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

servol_rt

이 함수는 외부 컨트롤러에서 실시간 작업 공간(TCP) 위치 제어를 합니다. 목표 포즈, 속도, 가속도, 보간 시간을 바탕으로 실시간 제어(Real-time Control) 주기마다 로봇 TCP(툴 중심점)의 위치와 자세를 명령합니다.

정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션

bool servol_rt(float fTargetPos[NUM_TASK],
               float fTargetVel[NUM_TASK],
               float fTargetAcc[NUM_TASK],
               float fTargetTime) {
    return _servol_rt(_rbtCtrlUDP, fTargetPos, fTargetVel, fTargetAcc, fTargetTime);
};

주의

  • 통신 지연이나 네트워크 지터가 있으면 servol_rt 모션이 끊기듯 거칠어집니다.

  • 목표 시간(fTargetTime)을 조정하고 느린 응답 속도를 사용하거나, 더 매끄러운 모션이 필요하면 speedl_rt를 사용하는 것을 권장합니다.

  • fTargetTime은 전송 간격이 아닙니다. 값을 정하는 방법은 아래 두 번째 주의 절을 참고하세요.

매개변수

매개변수 이름

자료형

기본값

설명

fTargetPos

float[6]

목표 포즈 [X, Y, Z, A, B, C](mm, deg)입니다. 자세는 오일러 ZYZ 규칙을 따릅니다.

fTargetVel

float[6]

목표 TCP 속도[mm/s, deg/s]
-10000으로 설정하면 fTargetPos로부터 속도를 자동으로 계산합니다.

fTargetAcc

float[6]

목표 TCP 가속도[mm/s², deg/s²]
-10000으로 설정하면 가속도를 자동으로 계산합니다.

fTargetTime

float

목표 보간 시간[s]

참고

  • 비동기 명령입니다.

  • 내부 모션 프로파일은 현재 상태와 목표 상태
    (fTargetPos, fTargetVel, fTargetAcc) 사이를 fTargetTime 동안 보간합니다.

  • 최솟값이 0.001 s인 릴리스에서는 fTargetTime이 컨트롤러 주기(약 1 ms) 이하이면 보간을 건너뜁니다.

  • 완료 전에 다음 명령을 받지 못하면 로봇은 set_accx_rt로 설정한 작업 가속도로 감속해 정지합니다.

주의

  • 현재 구현은 동작 속도[%]와 연동되지 않습니다.

  • fTargetTime은 컨트롤러가 목표에 도달하는 데 주어지는 시간이며, 명령을 보내는 간격이 아닙니다. 연속된 명령이 겹치도록 전송 간격보다 충분히 크게 설정하세요.

  • 컨트롤러는 fTargetTime의 최솟값을 강제하며, 그보다 작은 값은 최솟값으로 올립니다. fTargetTime의 최솟값은 DRCF v2.12.x와 v3.3.x에서 0.001 s입니다. DRCF v3.4.0 이상에서는 0.025 s 미만의 값을 0.025 s로 올리며, 이때 각 명령에는 fTargetTime + 0.005 s가 걸립니다. 최솟값보다 작은 값은 알림 없이 대체되므로, 한 컨트롤러 릴리스에서 조정한 값은 다른 릴리스에서 다시 확인해야 합니다.

  • 전송 간격은 set_rt_control_input에 선언한 주기와 일치해야 합니다. 그렇지 않으면 입력 워치독이 세션을 종료하지만, servol_rt는 계속 1을 반환합니다.

  • 연속 위치 제어에는 speedl_rt를 고려하세요.

  • 힘/순응 제어(Compliance Control)나 특이점 부근의 DR_VAR_VEL과 함께 사용할 수 없습니다.
    이런 경우 시스템이 자동으로 DR_AVOID 모드로 전환합니다.

반환값

값

설명

1

명령을 보냈습니다. 컨트롤러가 명령을 받았거나 적용했다는 뜻은 아닙니다.

0

명령 데이터그램을 보내지 못했습니다.

참고

이 함수는 비동기로 동작합니다. 컨트롤러가 명령을 수락하거나 거부할 때까지 기다리지 않고 반환하므로, 반환값 1은 로봇이 명령대로 동작했다는 뜻이 아닙니다. 거부된 명령과 모션 경고 및 오류는 set_on_log_alarm으로 보고됩니다. set_on_rt_log_alarm은 RT 세션 메시지만 보고하므로 두 콜백을 모두 등록하세요.

예제

drfl.connect_rt_control("192.168.137.100", 12347);

std::string version = "v1.0";
float period = 0.001f; // 1 ms 주기
int lossCount = 4;

// 실시간 스트리밍 설정
drfl.set_rt_control_input(version, period, lossCount);
drfl.set_rt_control_output(version, period, lossCount);
drfl.start_rt_control();

// 목표 TCP 포즈 정의
float fTargetPos[6] = {150.f, 0.f, 100.f, 0.f, 0.f, 0.f};
float fTargetVel[6] = {200.f, 100.f, 100.f, 20.f, 20.f, 20.f};
float fTargetAcc[6] = {1000.f, 800.f, 800.f, 100.f, 100.f, 100.f};
float fTargetTime = 0.06f; // 60 ms(30 ms 이상 권장)

// 실시간 작업 공간 모션 명령 전송
if (drfl.servol_rt(fTargetPos, fTargetVel, fTargetAcc, fTargetTime))
    printf("Task-space motion command successful.\n");
else
    printf("Task-space motion failed.\n");

drfl.stop_rt_control();
drfl.disconnect_rt_control();

이 예제는 작업 공간 명령을 1 ms 간격으로 계속 보내 TCP 모션을 실시간으로 제어하는 방법을 보여 줍니다.

팁

  • 외부 시스템에서 정밀한 직교 좌표 보간 제어가 필요하면 servol_rt를 사용하세요.

  • 모션이 매끄럽도록 주기 사이의 타이밍을 항상 일정하게 유지하세요.

  • 조인트 수준 스트리밍은 servoj_rt를 참고하세요.