최신 버전 정보는 1.33.5에서 확인하세요.
read_data_rt
이 함수는 로봇 컨트롤러의 실시간 출력 데이터를 읽습니다. set_rt_control_output으로 구성한 모션, 토크, 시스템 상태가 담긴 최신 출력 구조체를 가져옵니다.
보통 start_rt_control 뒤 실시간 루프 안에서 조인트 위치, 속도, 외부 토크를 계속 모니터링할 때 사용합니다.
정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션
LPRT_OUTPUT_DATA_LIST read_data_rt() {
return _read_data_rt(_rbtCtrlUDP);
};
매개변수
없음
반환값
값 |
설명 |
|---|---|
LPRT_OUTPUT_DATA_LIST |
모든 RT 출력 데이터 필드가 담긴 구조체에 대한 포인터입니다. |
예제
#include <chrono>
#include <cstring>
#include <thread>
drfl.connect_rt_control("192.168.137.100", 12347);
std::string version = "v1.0";
float period = 0.001f; // 1 msec 주기
int lossCount = 4;
// 입출력 스트리밍 설정
drfl.set_rt_control_input(version, period, lossCount);
drfl.set_rt_control_output(version, period, lossCount);
drfl.start_rt_control();
// 실시간 읽기 루프
while (true) {
// 프레임 전체를 한 번에 복사합니다. 필드별로 복사하면 복사하는 사이에
// 버퍼가 덮어써질 수 있어 필드 값이 서로 다른 프레임에서
// 올 수 있습니다.
RT_OUTPUT_DATA_LIST frame;
memcpy(&frame, drfl.read_data_rt(), sizeof(frame));
printf("Joint 1 Pos: %.1f Vel: %.1f Torque: %.1f\n",
frame.actual_joint_position[0],
frame.actual_joint_velocity[0],
frame.actual_joint_torque[0]);
// 루프를 종료하는 사용자 정의 조건
if (frame.actual_joint_position[0] > 30.0f)
break;
// RT 주기만큼 대기
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
drfl.stop_rt_control();
drfl.disconnect_rt_control();
이 예제는 실시간 스트림에서 현재 조인트 위치, 속도, 토크를 계속 가져와 출력합니다.
팁
이 함수는 반드시 start_rt_control로 RT 스트리밍을 시작한 뒤에 호출해야 합니다.
반환되는 포인터는 절대 null이 되지 않으므로 null 검사로는 유효성을 확인할 수 없습니다.
포인터가 가리키는 버퍼는 새 프레임이 도착할 때마다 덮어쓰이므로, 필드를 하나씩 읽으면 서로 다른 두 패킷의 값이 섞일 수 있습니다. 예제처럼 구조체 전체를 한 번에 복사하고 복사본으로 작업하세요.첫 RT 데이터를 받기 전까지는 time_stamp를 포함해 반환된 구조체의 모든 필드가 0입니다. 데이터를 사용하기 전에(예: 서보 목표의 초깃값으로 쓰기 전에) time_stamp가 0이 아니고 계속 증가하는지 확인하세요.
루프 안에서 데이터를 안전하게 복사하려면
memcpy나 직접 인덱싱을 사용하세요.시각화하려면 데이터를 배열에 저장하거나 로거로 실시간 전송하세요.