Chapter 5: RTDEReceiveInterface

About This Chapter

Whereas RTDEControlInterface is the class used to move the robot, RTDEReceiveInterface is the class used to retrieve the robot’s state.

In practical applications, it is used just as frequently as motion commands for tasks such as:

  • Retrieving the current position

  • Determining whether motion has completed

  • Monitoring errors

  • Monitoring safety status

This chapter describes the main APIs and usage of RTDEReceiveInterface in SDU Robotics’ ur_rtde library.


5.1 What Is the Receive Interface?

RTDEReceiveInterface is a state-acquisition interface provided by SDU Robotics’ ur_rtde. It uses the output data of Universal Robots’ official RTDE interface to obtain the controller state.

UR Controller

        │

    RTDE Output

        │

RTDEReceiveInterface

        │

Python

It does not provide any motion commands.


5.2 Creating an Instance

from rtde_receive import RTDEReceiveInterface

ROBOT_IP = "192.168.0.10"

rtde_r = RTDEReceiveInterface(ROBOT_IP)

Normally, it is instantiated together with RTDEControlInterface.

rtde_c = RTDEControlInterface(IP)
rtde_r = RTDEReceiveInterface(IP)

5.3 Reading Joint Positions

This is one of the most frequently used APIs.

q = rtde_r.getActualQ()

Return value:

[
q1,
q2,
q3,
q4,
q5,
q6
]

Unit:

rad

The values are not in joint degrees.


5.4 Joint Velocities

dq = rtde_r.getActualQd()

Unit:

rad/s

These values can also be used to determine whether the robot has stopped.


5.5 Reading the TCP Pose

pose = rtde_r.getActualTCPPose()

Return value:

[
x,
y,
z,
rx,
ry,
rz
]

Units:

m
rad

The position values are not in millimeters.


5.6 TCP Speed

speed = rtde_r.getActualTCPSpeed()

Retrieves the TCP velocity vector.

It can be used to determine whether the robot has stopped.


5.7 TCP Force

On robots equipped with a force sensor, the following API is available:

force = rtde_r.getActualTCPForce()

Return value:

Fx

Fy

Fz

Mx

My

Mz

It is frequently used in Force Mode.


5.8 Robot Mode

mode = rtde_r.getRobotMode()

Retrieves the state of the robot controller.

Representative states include:

  • Disconnected

  • Booting

  • Power Off

  • Idle

  • Running

This is useful for checking the controller before starting operation.


5.9 Safety Mode

mode = rtde_r.getSafetyMode()

Retrieves the safety state.

Examples include:

  • Normal

  • Protective Stop

  • Recovery

  • Emergency Stop


5.10 Runtime State

state = rtde_r.getRuntimeState()

Retrieves the current program state.

For example, it can be used to distinguish among:

Stopped

Running

Paused

It is often used together with the Dashboard interface.


5.11 Digital Input

rtde_r.getDigitalInState(pin)

Retrieves the input state.

Return value:

True

False

5.12 Digital Output

rtde_r.getDigitalOutState(pin)

Retrieves the output state.

This can be used to verify whether the output is actually ON.


5.13 Joint Temperatures

temp = rtde_r.getJointTemperatures()

Retrieves the temperature of each joint.

This is useful for monitoring during prolonged operation.


5.14 Determining Motion Completion

A motion command alone does not tell you whether the robot has reached its destination.

For example:

target = [...]

while True:

    q = rtde_r.getActualQ()

    if max(abs(a-b) for a,b in zip(q,target)) < 1e-3:
        break

    time.sleep(0.01)

This checks the difference between the current and target positions.


5.15 Detecting a Stop

Velocity can also be used to detect a stop.

dq = rtde_r.getActualQd()

If all joint velocities become sufficiently small, the robot can be considered stopped.


5.16 The Concept Behind wait_move()

The wait_move() method in ur_ctrl.py determines completion internally using logic such as:

Current position

↓

Difference from target position

↓

Within tolerance

↓

Complete

Alternatively:

Velocity

↓

Approximately zero

↓

Complete

The return value of MoveJ alone is not sufficient.


5.17 Monitoring Loop

A typical example:

while True:

    pose = rtde_r.getActualTCPPose()

    mode = rtde_r.getRobotMode()

    safety = rtde_r.getSafetyMode()

    print(pose)

    if safety != NORMAL:
        break

    time.sleep(0.02)

A monitoring frequency of approximately 50 Hz is often sufficient.


5.18 Characteristics of RTDEReceive

RTDEReceive has the following characteristics:

  • High-speed operation

  • Read-only access

  • A wide range of APIs

However, it does not provide motion commands.

Use RTDEControl for motion commands.


Summary

RTDEReceiveInterface is a class dedicated to monitoring robot state.

This library uses the following information:

  • Current position

  • Velocity

  • Robot Mode

  • Safety Mode

  • Runtime State

These are used to implement:

  • wait_move()

  • Error monitoring

  • State monitoring

The next chapter describes RTDEIOInterface.