이전 버전(1.33.4)의 문서를 보고 있습니다. 이 버전은 계속 지원됩니다.
최신 버전 정보는 1.33.5에서 확인하세요.

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 인터페이스가 올바르게 초기화되어 있어야 합니다.