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 |
조인트 위치, 토크, 속도, 상태 플래그 같은 실시간 모니터링 데이터를 담은 구조체의 포인터입니다. |
반환값
없음
예제
#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 인터페이스가 올바르게 초기화되어 있어야 합니다.