speedl_rt

이 함수는 외부 컨트롤러에서 실시간 작업 공간(TCP) 속도 제어를 합니다.
직교 좌표 공간에서 로봇 엔드 이펙터의 속도와 가속도를 명령하며, 보통 매끄러운 직선 스트리밍 제어에 사용합니다.

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

bool speedl_rt(float fTargetVel[NUM_TASK],
               float fTargetAcc[NUM_TASK],
               float fTargetTime) {
    return _speedl_rt(_rbtCtrlUDP, fTargetVel, fTargetAcc, fTargetTime);
};

매개변수

매개변수 이름

자료형

기본값

설명

fTargetVel

float[6]

목표 TCP 속도[mm/s, deg/s]입니다.

fTargetAcc

float[6]

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

fTargetTime

float

목표 보간 시간[s]입니다.

참고

  • 비동기 명령입니다.

  • 내부 모션 프로파일은 fTargetTime 동안 (fTargetVel, fTargetAcc)에 도달하도록 보간합니다.

  • fTargetTime이 컨트롤러 주기(약 1 ms) 이하이면 보간 없이 바로 제어합니다.

  • fTargetTime이 끝나기 전에 다음 명령을 받지 못하면 이전 속도를 유지합니다.

  • DRCF v3.0–v3.3에서는 0.1 s 안에 새 명령이 도착하지 않으면 알람과 함께 모션이 정지합니다. DRCF v3.4 이상과 v2.12.x에서는 새 명령이 도착할 때까지 로봇 팔이 마지막 목표 속도를 유지합니다. 명령 누락을 감지하려면 set_rt_control_input으로 입력 주기를 설정하세요.

  • set_accx_rt로 설정한 값을 가속도가 넘으면 정보 메시지가 생성되며, 최대 초당 한 번 생성됩니다. 모션은 제한되거나 정지되지 않습니다.

주의

  • 현재 버전에서 이 함수는 동작 속도[%]와 연동되지 않습니다.

  • 힘/순응 제어(Compliance Control) 모드와 함께 사용할 수 없습니다.

  • 특이점 부근에서는 DR_VAR_VEL 옵션과 함께 사용할 수 없습니다.
    이 상황이 감지되면 자동으로 DR_AVOID 동작으로 전환합니다.

  • 모션을 일정하게 유지하려면 명령을 1 ms 간격으로 보내고
    fTargetTime을 통신 주기보다 약간 크게 설정하세요.

반환값

값

설명

1

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

0

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

참고

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

예제

// 연결 및 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();

// 속도 및 가속도 목표값 정의
float fTargetVel[6] = {150.0f, 0.0f, 100.0f, 0.0f, 0.0f, 0.0f};
float fTargetAcc[6] = {800.0f, 800.0f, 800.0f, 100.0f, 100.0f, 100.0f};
float fTargetTime = 0.06f; // 60 ms

// 실시간 TCP 속도 명령 전송
if (drfl.speedl_rt(fTargetVel, fTargetAcc, fTargetTime))
    printf("TCP velocity command successful.\n");
else
    printf("TCP velocity command failed.\n");

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

이 예제는 TCP가 실시간 갱신에 따라 직선 방향으로 움직이는 연속 작업 공간 속도 제어를 보여 줍니다.

팁

  • 지연이 적은 직교 좌표 속도 스트리밍에는 speedl_rt를 사용하세요.

  • 폐루프 제어를 구현하려면 read_data_rt의 피드백과 함께 사용하세요.

  • 위치 기반 실시간 제어(Real-time Control)에는 servol_rt를 사용하세요.