Chapter 15: Forward and Inverse Kinematics

About This Chapter

UR is a six-axis robot.

Therefore, there is no one-to-one correspondence between:

  • TCP position

  • Individual joint angles

This chapter explains:

  • Forward kinematics

  • Inverse kinematics

  • Singularities

These are important fundamentals for understanding moveL, servoL, and Force Mode.


15.1 Joint Space and Cartesian Space

UR operates in two main spaces:

Joint Space

[q1 q2 q3 q4 q5 q6]

and

Cartesian Space

[x y z rx ry rz]

moveJ controls motion in Joint Space.

moveL controls motion in Cartesian Space.


15.2 Forward Kinematics

Forward kinematics calculates:

Joint angles

↓

TCP position

For example:

q

↓

FK

↓

Pose

The result is unique.

For the same joint angles, the TCP will always be at the same position.


15.3 Inverse Kinematics

Inverse kinematics calculates:

TCP

↓

Joint angles

In other words:

Pose

↓

IK

↓

q

Unlike forward kinematics, the solution is not unique.


15.4 Why Multiple Solutions Exist

For example, the robot may reach the same location with an:

Elbow-up configuration

or an:

Elbow-down configuration
      ○

     /

Base

and

     ○

      \

Base

may have the same TCP position but different joint angles.


15.5 Wrist Flip

Multiple solutions also exist for the wrist.

For example, a wrist rotation of:

180°

may leave the TCP pose unchanged.

Thus, multiple IK solutions can exist.


15.6 Why moveL Is Difficult

moveL performs:

Pose

↓

IK

↓

Joint

at every control cycle.

If IK cannot be solved, motion stops partway through.


15.7 Unreachable Positions

For example, if a target is:

Outside the workspace

no IK solution exists.

Pose

↓

×

moveL fails.


15.8 Joint Limits

Even within the workspace, an IK solution may not exist if reaching the target would exceed a:

Joint Limit

For example, if J1 would need to rotate:

400°

the target cannot actually be reached.


15.9 Singularities

A singularity is a condition in which:

Small TCP movement

↓

Very large joint rotation

is required.

Because the required joint velocity approaches infinity, the controller imposes speed limits.


15.10 Wrist Singularity

The best-known example is a:

Wrist Singularity.

When the wrist axes become aligned, an orientation degree of freedom is lost.

moveL may slow down, or speed limits may be applied.


15.11 Elbow Singularity

A configuration in which the arm is fully extended is also a singularity.

Base

──────TCP

In such a fully extended configuration, control tends to become unstable.


15.12 Differences Between moveJ and moveL

moveJ controls the joints directly and does not use IK.

It is therefore relatively easier to avoid singularities.

moveL solves IK at every cycle and is more susceptible to singularities.


15.13 getInverseKinematics()

With ur_rtde, IK can be calculated in advance:

q = rtde_c.getInverseKinematics(pose)

This enables a safer design:

Before moveL

↓

Check IK

↓

Abort if unsuccessful

15.14 Forward Kinematics

Conversely:

pose = rtde_c.getForwardKinematics(q)

can be used to determine the TCP position from joint angles.

This is useful in teaching software and similar applications.


15.15 Safety Check

For example:

rtde_c.isPoseWithinSafetyLimits(pose)

can be used to check in advance whether a pose is within the workspace and configured safety limits.

Checking before executing a move can reduce errors.


15.16 Typical Usage Example

Generate Pose

↓

Safety Check

↓

IK

↓

MoveL

This sequence is recommended.


15.17 Implementation in ur_ctrl.py

A high-level API could expose methods such as:

check_pose()

inverse_kinematics()

forward_kinematics()

This would eliminate the need for users to call the RTDE API directly.

Automatically performing safety checks and IK checks before a move is also an effective design.


15.18 Common Problems

  • A target thought to be reachable has no IK solution.

  • moveL fails after changing the tool.

  • Motion stops upon reaching a joint limit.

  • Speed drops dramatically near a singularity.

  • A large rotation occurs when only a small orientation change was intended.


Summary

Forward kinematics maps:

Joint

↓

TCP

Inverse kinematics maps:

TCP

↓

Joint

moveJ controls Joint Space and therefore does not require IK.

In contrast, moveL, servoL, and Force Mode control Cartesian Space and are affected by IK, joint limits, and singularities.

For highly reliable applications, it is therefore recommended to check IK feasibility and safety limits before executing a move.

The next chapter explains the differences between the Safety System, Protective Stop, Emergency Stop, and Fault, as well as error recovery from Python.