최신 버전 정보는 1.33.5에서 확인하세요.
amovesx (자동 모드)
이 함수는 movesx의 비동기 버전으로, 비동기로 처리한다는 점만 빼면 movesx()와 같게 동작합니다. 모션이 시작되면 종료를 기다리지 않고 바로 반환합니다.
따라서 amovesx()가 끝나기 전에 새 모션 명령을 내리면 안전 오류가 발생합니다. 다음 명령을 실행하기 전에 항상 mwait()로 모션 종료를 확인하세요.
정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool amovesx(float fTargetPos[MAX_SPLINE_POINT][NUM_TASK],
unsigned char nPosCount,
float fTargetVel[2],
float fTargetAcc[2],
float fTargetTime = 0.f,
MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE,
MOVE_REFERENCE eMoveReference = MOVE_REFERENCE_BASE,
SPLINE_VELOCITY_OPTION eVelOpt = SPLINE_VELOCITY_OPTION_DEFAULT) {
return _amovesx(_rbtCtrl, fTargetPos, nPosCount, fTargetVel,
fTargetAcc, fTargetTime, eMoveMode, eMoveReference, eVelOpt);
};
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
fTargetPos |
float[MAX_SPLINE_POINT][6] |
최대 100개의 경유점(Waypoint) 정보 [mm, deg] |
|
nPosCount |
unsigned char |
유효한 경유점 수입니다. nPosCount는 1~100이어야 합니다. |
|
fTargetVel |
float[2] |
선속도와 각속도 [mm/s, deg/s] |
|
fTargetAcc |
float[2] |
선가속도와 각가속도 [mm/s2, deg/s2] |
|
fTargetTime |
float |
0.0 |
도달 시간 [sec] |
eMoveMode |
|
절대 또는 상대 이동 모드 |
|
eMoveReference |
|
기준 좌표계(BASE / TOOL) |
|
eVelOpt |
|
스플라인 모션의 속도 프로파일 옵션 |
참고
fTargetVel을 지정하면(예:{30, 0}) 첫 번째 요소는 선속도이고, 두 번째 요소는 각속도입니다(선속도에 비례해 결정).fTargetAcc를 지정하면(예:{60, 0}) 첫 번째 요소는 선가속도이고, 두 번째 요소는 각가속도입니다(선가속도에 비례).fTargetTime을 지정하면fTargetVel과fTargetAcc를 모두 무시하고 시간 기준으로 모션을 실행합니다.eMoveMode가MOVE_MODE_RELATIVE이면 각 경유점은 바로 앞 경유점을 기준으로 한 상대 위치로 정의됩니다. (예: 목록 [q1, q2, q3]에서 q2는 q1 기준, q3는 q2 기준입니다.)이 함수는 이전 모션과 다음 모션의 온라인 블렌딩을 지원하지 않습니다.
주의
eVelOpt에SPLINE_VELOCITY_OPTION_CONST(등속 스플라인)를 사용할 때, 입력한 경유점 사이의 거리나 속도로는 등속 이동이 불가능하면 등속 프로파일을 적용할 수 없습니다. 이 경우 모션이 자동으로SPLINE_VELOCITY_OPTION_DEFAULT로 전환됩니다.
반환값
값 |
설명 |
|---|---|
0 |
오류 |
1 |
성공 |
참고
로봇이 STATE_EMERGENCY_STOP, STATE_SAFE_OFF, STATE_SAFE_OFF2, STATE_SAFE_STOP, STATE_SAFE_STOP2 상태이면 메시지 없이 false를 반환합니다.
예제
#include <thread>
#include <chrono>
// 여러 경유점을 지나는 직교 좌표 스플라인 동작을 비동기로 실행합니다.
// 스플라인 동작 시작 3초 후 D-Out을 출력합니다.
float xpos[4][6];
unsigned char xposNum = 4;
float tvel[2] = { 50, 50 };
float tacc[2] = { 100, 100 };
xpos[0][0]=559; xpos[0][1]=434.5; xpos[0][2]=651.5; xpos[0][3]=0; xpos[0][4]=180; xpos[0][5]=0;
xpos[1][0]=559; xpos[1][1]=484.5; xpos[1][2]=251.5; xpos[1][3]=0; xpos[1][4]=180; xpos[1][5]=0;
xpos[2][0]=559; xpos[2][1]=234.5; xpos[2][2]=251.5; xpos[2][3]=0; xpos[2][4]=180; xpos[2][5]=0;
xpos[3][0]=559; xpos[3][1]=134.5; xpos[3][2]=451.5; xpos[3][3]=0; xpos[3][4]=180; xpos[3][5]=0;
drfl.amovesx(xpos, xposNum, tvel, tacc, 0, MOVE_MODE_ABSOLUTE);
std::this_thread::sleep_for(std::chrono::milliseconds(3000));
drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, true);
이 예제는 TCP 경유점 4개를 지나는 비동기 스플라인 모션을 실행하고, 모션 시작 3초 후 디지털 출력을 켭니다. 다음 명령은 mwait()로 완료를 확인한 후에만 내리세요.