TOnRTMonitoringDataCB

UDP 기반 실시간 통신 인터페이스로 로봇 운용 데이터를 높은 주파수로 제공하는 실시간 콜백 함수입니다.
짧은 지연의 피드백이 필요한 애플리케이션에서 주요 로봇 상태(조인트 위치, 토크, 외력 등)를 연속으로 모니터링할 수 있습니다.

콜백은 set_rt_control_output으로 설정한 출력 주기마다 한 번 호출됩니다.

콜백 함수 규칙을 참고하세요.

정의 위치: DRFLEx.h

// typedef 정의(DRFLEx.h)
typedef void (*TOnRTMonitoringDataCB)(const LPRT_OUTPUT_DATA_LIST);

// 내부 정의
DRFL_API void _set_on_rt_monitoring_data(LPROBOTCONTROL pCtrl, TOnRTMonitoringDataCB pCallbackFunc);

// 사용자 호출용 래퍼(UDP 실시간 제어 인터페이스)
void set_on_rt_monitoring_data(TOnRTMonitoringDataCB pCallbackFunc)
{
    _set_on_rt_monitoring_data(_rbtCtrlUDP, pCallbackFunc);
};

매개변수

매개변수 이름

자료형

기본값

설명

pRTData

RT_OUTPUT_DATA_LIST

조인트 위치, 토크, 속도, 상태 플래그 같은 실시간 모니터링 데이터를 담은 구조체의 포인터입니다.

반환값
없음

예제

#include "DRFLEx.h"
#include <iostream>
#include <iomanip>
#include <mutex>
#include <thread>
#include <chrono>
using namespace DRAFramework;
using namespace std;

// 최신 샘플. 콜백 함수에서 복사하고 메인 루프에서 출력합니다
std::mutex g_mtxRT;
RT_OUTPUT_DATA_LIST g_tLatestRT;
bool g_bHasRT = false;

// 실시간 데이터 콜백 함수(UDP): 데이터를 복사한 뒤 반환
void OnRTMonitoringDataCB(const LPRT_OUTPUT_DATA_LIST pRTData)
{
    if (!pRTData) return;

    std::lock_guard<std::mutex> lock(g_mtxRT);
    g_tLatestRT = *pRTData;
    g_bHasRT = true;
}

void PrintRTData(const RT_OUTPUT_DATA_LIST& tData)
{
    cout << fixed << setprecision(3);
    cout << "[REAL-TIME MONITORING DATA]" << endl;

    // 조인트 위치 표시
    cout << "Joint positions [deg]: ";
    for (int i = 0; i < NUM_JOINT; i++)
        cout << setw(8) << tData.actual_joint_position[i] << " ";
    cout << endl;

    // 외부 토크 표시
    cout << "External torque [Nm]: ";
    for (int i = 0; i < NUM_JOINT; i++)
        cout << setw(8) << tData.external_joint_torque[i] << " ";
    cout << endl;

    // 툴 힘 표시
    cout << "Tool force [N]: ";
    for (int i = 0; i < 3; i++)
        cout << setw(8) << tData.external_tcp_force[i] << " ";
    cout << endl;

    cout << "------------------------------------" << endl;
}

int main()
{
    CDRFLEx drfl;

    // 실시간 모드(UDP)로 컨트롤러에 연결
    if (!drfl.connect_rt_control("192.168.137.100")) {
        cout << "Failed to connect to controller (RT mode)." << endl;
        return -1;
    }

    // RT 모니터링 콜백 함수 등록
    drfl.set_on_rt_monitoring_data(OnRTMonitoringDataCB);

    // 출력 데이터 버전과 주기를 선택한 뒤 스트림 시작
    drfl.set_rt_control_output("v1.0", 0.002f, 4);
    drfl.start_rt_control();

    // 메인 루프: 100 ms마다 최신 샘플 출력
    while (true) {
        RT_OUTPUT_DATA_LIST tData;
        bool bHasData = false;
        {
            std::lock_guard<std::mutex> lock(g_mtxRT);
            tData = g_tLatestRT;
            bHasData = g_bHasRT;
        }
        if (bHasData)
            PrintRTData(tData);
        std::this_thread::sleep_for(std::chrono::milliseconds(100));
    }

    drfl.disconnect_rt_control();
    return 0;
}

참고

  • 이 콜백은 set_rt_control_output으로 설정한 출력 주기마다 한 번 호출됩니다.

  • RT_OUTPUT_DATA_LIST에서 사용할 수 있는 주요 필드는 다음과 같습니다.
    - 조인트 위치, 속도, 토크
    - TCP 외력과 모멘트
    - 디지털/아날로그 입력 상태
    - 시스템 및 모션 플래그

  • 권장 사용 사례:
    - 로봇 모션의 실시간 시각화
    - 힘 기반 제어나 적응형 순응 모니터링
    - 짧은 지연의 피드백을 사용하는 연구 또는 제어 실험

  • RT 콜백에서 get_rt_control_input_version_list, get_rt_control_output_version_list, get_rt_control_input_data_list, get_rt_control_output_data_list, disconnect_rt_control을 호출하지 마세요. 호출이 반환되지 않습니다. RT 콜백에서 connect_rt_control을 호출하면 false를 반환하고 Already connected를 출력합니다.

  • 이 콜백은 DRCF_VERSION ≥ 2일 때만 사용하세요. 또한 UDP 인터페이스가 올바르게 초기화되어 있어야 합니다.