RT_OUTPUT_DATA_LIST

This structure provides real-time robot state data transmitted from the controller to the external PC during Realtime External Control. It contains comprehensive motion, torque, and I/O information of the robot.

BYTE#

Field Name

Data Type

Value

Remarks

0

time_stamp

double

Timestamp at data acquisition (s)

8

actual_joint_position

float[NUMBER_OF_JOINT]

[deg]

Joint position (motor-side incremental encoder)

32

actual_joint_position_abs

float[NUMBER_OF_JOINT]

[deg]

Joint position (link-side absolute encoder)

56

actual_joint_velocity

float[NUMBER_OF_JOINT]

[deg/s]

Joint velocity (motor-side)

80

actual_joint_velocity_abs

float[NUMBER_OF_JOINT]

[deg/s]

Joint velocity (link-side)

104

actual_tcp_position

float[NUM_TASK]

[mm, deg]

TCP position (x, y, z, a, b, c)

128

actual_tcp_velocity

float[NUMBER_OF_TASK]

[mm/s, deg/s]

TCP velocity (in base coordinates)

152

actual_flange_position

float[NUMBER_OF_TASK]

[mm, deg]

Flange position (in base coordinates)

176

actual_flange_velocity

float[NUMBER_OF_TASK]

[mm/s, deg/s]

Flange velocity (in base coordinates)

200

actual_motor_torque

float[NUMBER_OF_JOINT]

[Nm]

Motor torque (applied with gear ratio)

224

actual_joint_torque

float[NUMBER_OF_JOINT]

[Nm]

Estimated joint torque

248

raw_joint_torque

float[NUMBER_OF_JOINT]

[Nm]

Raw torque sensor values (calibrated)

272

raw_force_torque

float[NUMBER_OF_JOINT]

[N, Nm]

Force/Torque sensor data (flange coordinates).
Six task-space values: Fx, Fy, Fz, Tx, Ty, Tz.
A-series only, the models fitted with a force/torque sensor. On other models this field is zero.
The two fields are mutually exclusive: where this one is populated raw_joint_torque is zero, and where it is zero raw_joint_torque carries the joint torque sensor readings.

296

external_joint_torque

float[NUMBER_OF_JOINT]

[Nm]

Estimated external torque per joint

320

external_tcp_force

float[NUMBER_OF_TASK]

[N, Nm]

External TCP force (in base coordinates).
On robots without a force/torque sensor this is estimated from joint torque rather than measured, and its validity depends on singularity. See Force estimate validity below.

344

target_joint_position

float[NUMBER_OF_JOINT]

[deg]

Target joint position

368

target_joint_velocity

float[NUMBER_OF_JOINT]

[deg/s]

Target joint velocity

392

target_joint_acceleration

float[NUMBER_OF_JOINT]

[deg/s²]

Target joint acceleration

416

target_motor_torque

float[NUMBER_OF_JOINT]

[Nm]

Target motor torque

440

target_tcp_position

float[NUMBER_OF_TASK]

[mm, deg]

Target TCP position

464

target_tcp_velocity

float[NUMBER_OF_TASK]

[mm/s, deg/s]

Target TCP velocity

488

jacobian_matrix

float[NUMBER_OF_JOINT][NUMBER_OF_JOINT]

Jacobian matrix J(q)

632

gravity_torque

float[NUMBER_OF_JOINT]

[Nm]

Gravity torque g(q)

656

coriolis_matrix

float[NUMBER_OF_JOINT][NUMBER_OF_JOINT]

Coriolis matrix C(q, q̇)

800

mass_matrix

float[NUMBER_OF_JOINT][NUMBER_OF_JOINT]

Mass matrix M(q)

944

solution_space

unsigned short

Robot configuration (solution space)

946

singularity

float

Minimum singular value of the Jacobian. Lower values mean the configuration is closer to singular. This is the same value the controller uses to decide whether external_tcp_force is still valid. See Force estimate validity below.

950

operation_speed_rate

float

[%]

Current speed ratio

954

joint_temperature

float[NUMBER_OF_JOINT]

[°C]

Joint temperature

978

controller_digital_input

unsigned short

Controller DI (16-channel)

980

controller_digital_output

unsigned short

Controller DO (16-channel)

982

controller_analog_input_type

unsigned char[2]

Controller AI type
(0: voltage, 1: current)

984

controller_analog_input

float[2]

[V/mA]

Controller analog inputs

992

controller_analog_output_type

unsigned char[2]

Controller AO type
(0: voltage, 1: current)

994

controller_analog_output

float[2]

[V/mA]

Controller analog outputs

1002

flange_digital_input

unsigned char

Flange DI
(A-series: 2ch, M/H-series: 6ch)

1003

flange_digital_output

unsigned char

Flange DO
(A-series: 2ch, M/H-series: 6ch)

1004

flange_analog_input

float[4]

[V/mA]

Flange analog input channels
(A-series: 2ch, M/H-series: 4ch)

1020

external_encoder_strobe_count

unsigned char[2]

Encoder strobe event count

1022

external_encoder_count

unsigned int[2]

External encoder pulse counts

1030

goal_joint_position

float[NUMBER_OF_JOINT]

[deg]

Reserved for final goal joint

1054

goal_tcp_position

float[NUMBER_OF_TASK]

[mm, deg]

Reserved for final goal TCP

1078

robot_mode

unsigned char

0~5

Robot mode
(0: Manual, 1: Auto, 2: Recovery, 3: Backdrive,
4: Measure, 5: Initialize)

1079

robot_state

unsigned char

0~15

Operation state (Standby, Moving, etc.)
0 to 10 are defined states, 11 to 14 are reserved,
and 15 is Not Ready.

1080

control_mode

unsigned short

Servo mode (Position, Torque)

1082

reserved

unsigned char[256]

Reserved bytes for future expansion

Total size: 1,338 bytes

Force estimate validity

On robots without a force/torque sensor, external_tcp_force is estimated from joint torque. singularity tells you whether that estimate can be trusted. It is valid at or above the threshold for the robot model:

Model

Threshold

A0509 / E0509 / M0609 / M1509

0.138

M1013 / A0912

0.200

H2515

0.231

M0617 / H2017 / P3020

0.262

Below the threshold the estimate is degraded. Values are still produced, but they must not be treated as a measurement. Log singularity alongside external_tcp_force and treat the model threshold as the working limit.

Defined in: DRFS.h

typedef struct _RT_OUTPUT_DATA_LIST
{
/* timestamp at the data of data acquisition */
double                      time_stamp;
/* actual joint position from incremental encoder at motor side(used for control) [deg] */
float                       actual_joint_position[NUMBER_OF_JOINT];
/* actual joint position from absolute encoder at link side (used for exact link position) [deg] */
float                       actual_joint_position_abs[NUMBER_OF_JOINT];
/* actual joint velocity from incremental encoder at motor side [deg/s] */
float                       actual_joint_velocity[NUMBER_OF_JOINT];
/* actual joint velocity from absolute encoder at link side [deg/s] */
float                       actual_joint_velocity_abs[NUMBER_OF_JOINT];
/* actual robot tcp position w.r.t. base coordinates: (x, y, z, a, b, c), where (a, b, c) follows Euler ZYZ notation [mm, deg] */
float                       actual_tcp_position[NUM_TASK];
/* actual robot tcp velocity w.r.t. base coordinates [mm, deg/s] */
float                       actual_tcp_velocity[NUMBER_OF_TASK];
/* actual robot flange position w.r.t. base coordinates: (x, y, z, a, b, c), where (a, b, c) follows Euler ZYZ notation [mm, deg] */
float                       actual_flange_position[NUMBER_OF_TASK];
/* robot flange velocity w.r.t. base coordinates [mm, deg/s] */
float                       actual_flange_velocity[NUMBER_OF_TASK];
/* actual motor torque applying gear ratio = gear_ratio * current2torque_constant * motor current [Nm] */
float                       actual_motor_torque[NUMBER_OF_JOINT];
/* estimated joint torque by robot controller [Nm] */
float                       actual_joint_torque[NUMBER_OF_JOINT];
/* calibrated joint torque sensor data [Nm] */
float                       raw_joint_torque[NUMBER_OF_JOINT];
/* calibrated force torque sensor data w.r.t. flange coordinates [N, Nm] */
float                       raw_force_torque[NUMBER_OF_JOINT];
/* estimated external joint torque [Nm] */
float                       external_joint_torque[NUMBER_OF_JOINT];
/* estimated tcp force w.r.t. base coordinates [N, Nm] */
float                       external_tcp_force[NUMBER_OF_TASK];
/* target joint position [deg] */
float                       target_joint_position[NUMBER_OF_JOINT];
/* target joint velocity [deg/s] */
float                       target_joint_velocity[NUMBER_OF_JOINT];
/* target joint acceleration [deg/s^2] */
float                       target_joint_acceleration[NUMBER_OF_JOINT];
/* target motor torque [Nm] */
float                       target_motor_torque[NUMBER_OF_JOINT];
/* target tcp position w.r.t. base coordinates: (x, y, z, a, b, c), where (a, b, c) follows Euler ZYZ notation [mm, deg] */
float                       target_tcp_position[NUMBER_OF_TASK];
/* target tcp velocity w.r.t. base coordinates [mm, deg/s] */
float                       target_tcp_velocity[NUMBER_OF_TASK];
/* jacobian matrix=J(q) w.r.t. base coordinates */
float                       jacobian_matrix[NUMBER_OF_JOINT][NUMBER_OF_JOINT];
/* gravity torque=g(q) [Nm] */
float                       gravity_torque[NUMBER_OF_JOINT];
/* coriolis matrix=C(q,q_dot)  */
float                       coriolis_matrix[NUMBER_OF_JOINT][NUMBER_OF_JOINT];
/* mass matrix=M(q) */
float                       mass_matrix[NUMBER_OF_JOINT][NUMBER_OF_JOINT];
/* robot configuration */
unsigned short              solution_space;
/* minimum singular value */
float                       singularity;
/* current operation speed rate(1~100 %) */
float                       operation_speed_rate;
/* joint temperature(celsius) */
float                       joint_temperature[NUMBER_OF_JOINT];
/* controller digital input(16 channel) */
unsigned short              controller_digital_input;
/* controller digital output(16 channel) */
unsigned short              controller_digital_output;
/* controller analog input type(2 channel) */
unsigned char               controller_analog_input_type[2];
/* controller analog input(2 channel) */
float                       controller_analog_input[2];
/* controller analog output type(2 channel) */
unsigned char               controller_analog_output_type[2];
/* controller analog output(2 channel) */
float                       controller_analog_output[2];
/* flange digital input(A-Series: 2 channel, M/H-Series: 6 channel) */
unsigned char               flange_digital_input;
/* flange digital output(A-Series: 2 channel, M/H-Series: 6 channel) */
unsigned char               flange_digital_output;
/* flange analog input(A-Series: 2 channel, M/H-Series: 4 channel) */
float                       flange_analog_input[4];
/* strobe count(increased by 1 when detecting setting edge) */
unsigned char               external_encoder_strobe_count[2];
/* external encoder count */
unsigned int                external_encoder_count[2];
/* final goal joint position (reserved) */
float                       goal_joint_position[NUMBER_OF_JOINT];
/* final goal tcp position (reserved) */
float                       goal_tcp_position[NUMBER_OF_TASK];
/* ROBOT_MODE_MANUAL(0), ROBOT_MODE_AUTONOMOUS(1), ROBOT_MODE_RECOVERY(2),
   ROBOT_MODE_BACKDRIVE(3), ROBOT_MODE_MEASURE(4), ROBOT_MODE_INITIALIZE(5) */
/* Refer to 'SAFETY_MODE' struct*/
unsigned char               robot_mode;
/* STATE_INITIALIZING(0), STATE_STANDBY(1), STATE_MOVING(2), STATE_SAFE_OFF(3), STATE_TEACHING(4), STATE_SAFE_STOP(5), STATE_EMERGENCY_STOP, STATE_HOMMING, STATE_RECOVERY, STATE_SAFE_STOP2, STATE_SAFE_OFF2, */
/* Refer to 'OPERATION_STATE' struct in DRCF 'ROBOT_STATE' struct in DRFL.*/
unsigned char               robot_state;
/* position control mode, torque mode */
/* Refer to 'SERVO_MODE' struct*/
unsigned short              control_mode;
/* Reserved */
unsigned char               reserved[256];

} RT_OUTPUT_DATA_LIST, *LPRT_OUTPUT_DATA_LIST;

Note

  • Provides all robot dynamic and sensor data in real-time.

  • Used for external torque control, compliance, and RT logging.

  • Transmitted over UDP during Realtime Control at the period given to set_rt_control_output. There is no default: until a period is set, no data is sent.

  • Units are mm, deg, N and Nm. Note that lengths are millimetres and angles degrees, not the SI metre and radian.