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.

Although currently limited in public applications, it is designed for future collaborative control integration with external systems.

Definition
DRFLEx.h within class CDRFLEx, public section (line 598)

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 for each joint.
Used when applying external sensor feedback.

iExternalDI

unsigned short

External digital input data (16 channels).

iExternalDO

unsigned short

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

Successfully transmitted real-time input data.

0

Failed to transmit (communication error or not in RT mode).

Example

#include "DRFLEx.h"
#include <iostream>
using namespace DRAFramework;

int main() {
    CDRFLEx drfl;

    // 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))
        std::cout << "External RT data written successfully." << std::endl;
    else
        std::cout << "Failed to write RT data." << std::endl;

    drfl.stop_rt_control();
    drfl.disconnect_rt_control();
    return 0;
}

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 fExternalForceTorque or I/O arrays should be updated continuously within the control loop.

  • In most use cases, this API will be utilized for future sensor fusion or external cooperative control.