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

speedj_rt

이 함수는 외부 컨트롤러에서 조인트 속도를 실시간으로 제어합니다. UDP 기반 실시간 인터페이스로 목표 속도와 가속도 값을 연속으로 스트리밍해 조인트 모션을 매끄럽게 제어할 수 있습니다.

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

bool speedj_rt(float fTargetVel[NUM_JOINT],
               float fTargetAcc[NUM_JOINT],
               float fTargetTime) {
    return _speedj_rt(_rbtCtrlUDP, fTargetVel, fTargetAcc, fTargetTime);
};

매개변수

매개변수 이름

자료형

기본값

설명

fTargetVel

float[6]

명령할 목표 조인트 속도[deg/s]입니다.

fTargetAcc

float[6]

목표 조인트 가속도[deg/s²]입니다.
-10000으로 설정하면 fTargetVel을 바탕으로 가속도를 자동 계산합니다.

fTargetTime

float

목표 명령의 지속 시간[s]입니다.

참고

  • 비동기 명령입니다.

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

  • fTargetTime이 컨트롤러 주기(약 1 ms) 이하이면 보간 없이 모션을 실행합니다.

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

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

  • 가속도가 set_accj_rt로 설정한 값을 넘으면 정보 메시지가 최대 1초에 한 번 생성됩니다. 모션을 제한하거나 정지하지는 않습니다.

주의

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

  • 너무 짧은 간격으로 자주 호출하면 통신 지연이 생기거나 응답이 끊기듯 거칠어질 수 있습니다.

  • 안정적으로 동작하려면 fTargetTime이 통신 주기보다 크도록 설정하세요.

반환값

값

설명

1

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

0

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

참고

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

예제

#include <chrono>
#include <cmath>
#include <thread>

drfl.connect_rt_control("192.168.137.100", 12347);

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

// RT 설정
drfl.set_rt_control_input(version, period, lossCount);
drfl.set_rt_control_output(version, period, lossCount);
drfl.start_rt_control();

float fTargetVel[6] = {0.f, 0.f, 0.f, 0.f, 0.f, 0.f};
float fTargetAcc[6] = {1000.f, 1000.f, 1000.f, 1000.f, 1000.f, 1000.f};
float fTargetTime = 0.05f; // 50 ms

float time = 0.f;
int count = 0;

while (count++ < 3000) {
    // 예: J1을 ±50 deg/s 사이에서 진동
    fTargetVel[0] = 50.f * std::sin(count * 0.01f);
    drfl.speedj_rt(fTargetVel, fTargetAcc, fTargetTime);
    std::this_thread::sleep_for(std::chrono::milliseconds(1));
}

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

이 예제는 speedj_rt로 1 ms 간격마다 사인파 프로파일의 조인트 속도를 연속으로 명령합니다.

팁

  • 조인트를 매끄럽고 연속적인 속도로 제어하려면 speedj_rt를 사용하세요.

  • 결정론적 모션을 위해 고정된 갱신 루프(보통 1 kHz)를 유지하세요.

  • 위치 기반 스트리밍에는 servoj_rt를 대신 사용하세요.