최신 버전 정보는 1.33.5에서 확인하세요.
amove_periodic (자동 모드)
이 함수는 move_periodic()의 비동기 버전입니다. 모션이 끝날 때까지 기다리지 않고 모션이 시작되면 곧바로 다음 줄을 실행한다는 점만 빼면 move_periodic()과 같게 동작합니다. 이전 모션이 끝나기 전에 새 모션 명령을 내려야 한다면, 안전을 위해 두 명령 사이에 반드시 mwait()를 넣어야 합니다.
이 명령은 지정한 기준 좌표계(eMoveReference)에서 각 축(병진 또는 회전)의 사인 함수를 따르는 주기 모션을 실행합니다. 모션의 속성(진폭, 주기, 가감속 시간, 총 반복 횟수)은 각 입력 매개변수로 정합니다.
정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool amove_periodic(float fAmplitude[NUM_TASK],
float fPeriodic[NUM_TASK],
float fAccelTime,
unsigned int nRepeat,
MOVE_REFERENCE eMoveReference = MOVE_REFERENCE_TOOL) {
return _amove_periodic(_rbtCtrl, fAmplitude, fPeriodic, fAccelTime, nRepeat, eMoveReference);
};
매개변수
매개변수 이름 |
자료형 |
기본값 |
범위 |
설명 |
|---|---|---|---|---|
fAmplitude |
float[6] |
≥ 0 |
진폭(-fAmplitude와 +fAmplitude 사이를 움직임) [mm] 또는 [deg] |
|
fPeriodic |
float[6] |
≥ 0 |
주기(한 주기에 걸리는 시간) [sec] |
|
fAccelTime |
float |
≥ 0 |
가감속 시간 [sec] |
|
nRepeat |
unsigned char |
> 0 |
반복 횟수 |
|
eMoveReference |
|
열거형 정의를 참고하세요 |
참고
fAmplitude는 각 축(x, y, z, rx, ry, rz)의 진폭을 정합니다. 주기 모션을 하지 않는 축의 진폭은 반드시0이어야 합니다.fPeriodic은 각 축이 한 주기의 모션을 마치는 데 걸리는 시간을 정합니다. 각 값은 축 순서(x, y, z, rx, ry, rz)와 같은 순서로 대응합니다.fAccelTime은 주기 모션의 시작과 끝에 적용할 가감속 시간을 지정합니다. 실제로는fAccelTime과, 진폭이 0이 아닌 축 중 가장 긴 주기의 1/4 가운데 큰 값을 적용합니다.fAccelTime이fPeriodic의 가장 긴 주기에nRepeat을 곱한 값의 1/2 이상이면 컨트롤러가 오류를 보고합니다.nRepeat은 전체 주기를 몇 번 반복할지 정합니다. 주기가 가장 긴 축이 전체 모션 시간을 결정합니다.모션이 정상적으로 끝나면, 로봇이 시작 위치로 돌아오도록 나머지 축은 기준 축이 끝나기 전에 멈출 수 있습니다. 그렇지 않으면 감속 경로가 약간 벗어날 수 있습니다.
eMoveReference는 주기 모션을 TOOL 좌표계에서 실행할지 BASE 좌표계에서 실행할지 지정합니다.속도가 너무 빠르면 다음 식으로 조정하세요.
velocity = Amplitude(fAmplitude) * 2 * π(3.14) / Period(fPeriodic)
예: 진폭 10 mm, 주기 1 s이면 최대 속도는 62.83 mm/s이 함수는 이전 모션과 다음 모션 사이의 온라인 블렌딩을 지원하지 않습니다.
반환값
값 |
설명 |
|---|---|
0 |
오류 |
1 |
성공 |
참고
로봇이 STATE_EMERGENCY_STOP, STATE_SAFE_OFF, STATE_SAFE_OFF2, STATE_SAFE_STOP, STATE_SAFE_STOP2 상태이면 메시지 없이 false를 반환합니다.
예제
#include <thread>
#include <chrono>
// X축(진폭 10 mm, 주기 1초) 동작과
// Y축 회전(진폭 0.5 deg, 주기 1초)을 5회 반복합니다.
// 1초 후 디지털 출력 채널 1을 설정합니다.
float fAmplitude[NUM_TASK] = {10, 0, 0, 0, 0.5, 0};
float fPeriod[NUM_TASK] = {1, 1, 1, 1, 1, 1};
drfl.amove_periodic(fAmplitude, fPeriod, 0.5, 5, MOVE_REFERENCE_TOOL);
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, true);
drfl.mwait();
이 예제는 TOOL 좌표계에서 X축과 Y축 회전 방향으로 사인파 주기 모션을 만듭니다. 1초 후 로봇이 주기 궤적(Trajectory)을 계속 따라가는 동안 디지털 출력 1이 켜집니다.