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²]입니다. |
|
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를 대신 사용하세요.