write_data_rt
This function writes real-time input data from the external controller to the robot controller. It is used for transmitting external signals such as force/torque feedback, digital I/O, and analog I/O in real-time external control mode.
Definition
DRFLEx.h within class CDRFLEx, public section
bool write_data_rt(float fExternalForceTorque[NUM_JOINT],
int iExternalDI,
int iExternalDO,
float fExternalAnalogInput[6],
float fExternalAnalogOutput[6]) {
return _write_data_rt(_rbtCtrlUDP,
fExternalForceTorque,
iExternalDI,
iExternalDO,
fExternalAnalogInput,
fExternalAnalogOutput);
};
Parameter
Parameter Name |
Data Type |
Default Value |
Description |
|---|---|---|---|
fExternalForceTorque |
float[6] |
External force/torque input supplied by the client. Six values. |
|
iExternalDI |
int |
External digital input data (16 channels). |
|
iExternalDO |
int |
External digital output data (16 channels). |
|
fExternalAnalogInput |
float[6] |
External analog input values (up to 6 channels). |
|
fExternalAnalogOutput |
float[6] |
External analog output values (up to 6 channels). |
Return
Value |
Description |
|---|---|
1 |
The command was sent. This does not confirm that the controller received or applied it. |
0 |
The input data datagram could not be sent. |
Note
This function is asynchronous. It returns without waiting for the controller to accept or reject the command, so a return value of 1 does not confirm that the robot acted on it. Rejected commands and motion warnings and errors are reported through set_on_log_alarm. set_on_rt_log_alarm reports only RT session messages, so register both callbacks.
Example
// Connect and start RT communication
drfl.connect_rt_control("192.168.137.100", 12347);
drfl.set_rt_control_input("v1.0", 0.001f, 4);
drfl.set_rt_control_output("v1.0", 0.001f, 4);
drfl.start_rt_control();
// Define external data arrays
float fExternalForceTorque[6] = {100.f, 100.f, 100.f, 100.f, 100.f, 100.f};
int iExternalDI = 1;
int iExternalDO = 2;
float fExternalAnalogInput[6] = {0.f, 0.f, 100.f, 100.f, 100.f, 100.f};
float fExternalAnalogOutput[6] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
// Send external control data
if (drfl.write_data_rt(fExternalForceTorque, iExternalDI, iExternalDO,
fExternalAnalogInput, fExternalAnalogOutput))
printf("External RT data written successfully.\n");
else
printf("Failed to write RT data.\n");
drfl.stop_rt_control();
drfl.disconnect_rt_control();
In this example, the function transmits simulated external I/O and force data to the robot controller through the real-time UDP interface.
Tips
Call write_data_rt after RT streaming has started using start_rt_control.
Values in
fExternalForceTorqueor I/O arrays should be updated continuously within the control loop.