Chapter 8: moveJ

About This Chapter

The moveJ() method discussed in this chapter is a PC-side motion API provided by the SDU Robotics RTDEControlInterface. On the robot side, it is connected to the URScript movej command through the control URScript. It is one of the most fundamental motion APIs for joint movements.

It is used in nearly every program, including movements between taught points and movements to retreat positions.

This chapter explains:

  • The moveJ algorithm

  • Parameters

  • Internal behavior

  • Speed

  • Acceleration

  • Blending

  • Return values

  • Precautions


8.1 What Is moveJ?

The moveJ() method in this chapter belongs to the SDU Robotics ur_rtde API. This does not mean that a moveJ command is defined in the official Universal Robots RTDE protocol.

The J in moveJ stands for:

Joint

In other words, it is a command that moves the robot to target joint angles.

Instead of specifying a TCP position, it specifies the angles of all six axes:

q1

q2

q3

q4

q5

q6

The robot moves toward these target angles.


8.2 Illustration of the Motion

For example:

Start

Joint

0°

30°

10°

...

↓

End

Joint

90°

10°

-30°

...

Each axis moves simultaneously, eventually reaching its target angle.

The TCP trajectory along the way is not guaranteed.


8.3 How Does the TCP Move?

The TCP follows a curved path, for example:

Start

○

↓

)

↓

○

End

Consequently, moveJ is not suitable for operations such as:

  • Machining

  • Measurement

  • Laser processing


8.4 Applications

moveJ is suitable for:

  • Moving to the home position

  • Retreating

  • Moving between taught points

  • Changing orientation

  • High-speed movement

  • Movement through spaces with few obstacles


8.5 Arguments

Typical API usage:

moveJ(
    q,
    speed=1.05,
    acceleration=1.4,
    asynchronous=False
)

8.6 q

The target joint angles.

Example:

q = [
    0.0,
    -1.57,
    1.57,
    0.0,
    1.57,
    0.0,
]

The unit is:

rad

Not degrees.


8.7 speed

Joint speed.

Unit:

rad/s

Example:

speed=0.5

This is the target speed, not a safety speed limit.

The controller may impose its own limits.


8.8 acceleration

Acceleration.

Unit:

rad/s²

Example:

acceleration=1.2

Excessive acceleration increases vibration and mechanical shock.


8.9 asynchronous

False

↓

Synchronous

True

↓

Asynchronous

Synchronous execution:

moveJ()

↓

Motion completes

↓

return

Asynchronous execution:

moveJ()

↓

return

↓

Robot moves

8.10 Return Value

Normally, the method returns:

True

for success, or:

False

for failure.

However, a communication disconnection, Protective Stop, or similar condition may result in a RuntimeError.


8.11 Blend Radius

A blend radius can be specified for moveJ.

Instead of:

○

↓

Stop

↓

○

The movements can be joined smoothly:

○

╲

╱

○

This reduces time spent stopping.


8.12 Determining Arrival

It is safer to determine completion of a moveJ motion from the difference between the current and target positions, rather than simply from whether the API call has returned.

Example:

Current joint angles

↓

Difference from target joint angles

↓

1e-3 rad or less

↓

Complete

8.13 Joint Limits

moveJ cannot move to a configuration that exceeds the joint limits.

The joint ranges are checked before inverse kinematics becomes relevant.


8.14 Collision Detection

If any of the following occurs during motion:

  • Protective Stop

  • Safety Stop

  • Emergency Stop

moveJ does not complete normally.

Therefore, handle errors as follows:

try:

    ok = rtde_c.moveJ(q)

except RuntimeError:

    ...

8.15 Advantages of moveJ

  • Fast

  • Stable

  • Does not require inverse kinematics

  • Low CPU overhead

  • Suitable for moving between taught points


8.16 Disadvantages of moveJ

  • Does not guarantee the TCP trajectory

  • Unsuitable for machining

  • Does not avoid obstacles

  • Does not allow intermediate orientations to be specified


8.17 Comparison with moveL

Item

moveJ

moveL

Interpolation

Joint

TCP

Speed

Fast

Slow

TCP trajectory

Not guaranteed

Straight line

Machining

×

○

Retreat

○

△

Teaching

◎

○



Summary

moveJ is one of the most fundamental motion commands for UR robots.

Because it interpolates in joint space, it is fast and stable, making it well suited to retreat motions and orientation changes.

However, because the TCP trajectory is not guaranteed, moveL should be used for machining and measurement.

The next chapter explains moveL in detail.