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 |
|
|
Timestamp at data acquisition (s) |
|
8 |
|
|
[deg] |
Joint position (motor-side incremental encoder) |
32 |
|
|
[deg] |
Joint position (link-side absolute encoder) |
56 |
|
|
[deg/s] |
Joint velocity (motor-side) |
80 |
|
|
[deg/s] |
Joint velocity (link-side) |
104 |
|
|
[mm, deg] |
TCP position (x, y, z, a, b, c) |
128 |
|
|
[mm/s, deg/s] |
TCP velocity (in base coordinates) |
152 |
|
|
[mm, deg] |
Flange position (in base coordinates) |
176 |
|
|
[mm/s, deg/s] |
Flange velocity (in base coordinates) |
200 |
|
|
[Nm] |
Motor torque (applied with gear ratio) |
224 |
|
|
[Nm] |
Estimated joint torque |
248 |
|
|
[Nm] |
Raw torque sensor values (calibrated) |
272 |
|
|
[N, Nm] |
Force/Torque sensor data (flange coordinates). |
296 |
|
|
[Nm] |
Estimated external torque per joint |
320 |
|
|
[N, Nm] |
External TCP force (in base coordinates). |
344 |
|
|
[deg] |
Target joint position |
368 |
|
|
[deg/s] |
Target joint velocity |
392 |
|
|
[deg/s²] |
Target joint acceleration |
416 |
|
|
[Nm] |
Target motor torque |
440 |
|
|
[mm, deg] |
Target TCP position |
464 |
|
|
[mm/s, deg/s] |
Target TCP velocity |
488 |
|
|
Jacobian matrix J(q) |
|
632 |
|
|
[Nm] |
Gravity torque g(q) |
656 |
|
|
Coriolis matrix C(q, q̇) |
|
800 |
|
|
Mass matrix M(q) |
|
944 |
|
|
Robot configuration (solution space) |
|
946 |
|
|
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 |
|
950 |
|
|
[%] |
Current speed ratio |
954 |
|
|
[°C] |
Joint temperature |
978 |
|
|
Controller DI (16-channel) |
|
980 |
|
|
Controller DO (16-channel) |
|
982 |
|
|
Controller AI type |
|
984 |
|
|
[V/mA] |
Controller analog inputs |
992 |
|
|
Controller AO type |
|
994 |
|
|
[V/mA] |
Controller analog outputs |
1002 |
|
|
Flange DI |
|
1003 |
|
|
Flange DO |
|
1004 |
|
|
[V/mA] |
Flange analog input channels |
1020 |
|
|
Encoder strobe event count |
|
1022 |
|
|
External encoder pulse counts |
|
1030 |
|
|
[deg] |
Reserved for final goal joint |
1054 |
|
|
[mm, deg] |
Reserved for final goal TCP |
1078 |
|
|
0~5 |
Robot mode |
1079 |
|
|
0~15 |
Operation state (Standby, Moving, etc.) |
1080 |
|
|
Servo mode (Position, Torque) |
|
1082 |
|
|
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.