amovesj (자동 모드)
이 함수는 movesj의 비동기 버전입니다. 모션이 끝날 때까지 기다리지 않고 모션이 시작되면 곧바로 반환해 다음 줄을 실행한다는 점만 빼면 movesj()와 같게 동작합니다.
amovesj() 모션이 끝나기 전에 새 모션 명령을 내리면 안전을 위해 오류가 발생합니다. 따라서 새 모션 명령을 실행하기 전에 amovesj()와 다음 모션 명령 사이에서 반드시 mwait()로 amovesj() 모션의 종료를 확인해야 합니다.
정의(모든 축에 같은 속도/가속도)
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool amovesj(float fTargetPos[MAX_SPLINE_POINT][NUM_JOINT],
unsigned char nPosCount,
float fTargetVel,
float fTargetAcc,
float fTargetTime = 0.f,
MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE) {
return _amovesj(_rbtCtrl, fTargetPos, nPosCount, fTargetVel,
fTargetAcc, fTargetTime, eMoveMode);
};
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
fTargetPos |
float[MAX_SPLINE_POINT][6] |
최대 100개의 경유점(Waypoint) 목록 |
|
nPosCount |
unsigned char |
유효한 경유점 수입니다. nPosCount는 1~100이어야 합니다. |
|
fTargetVel |
float |
모든 조인트에 똑같이 적용하는 최대 속도 [deg/s] |
|
fTargetAcc |
float |
모든 조인트에 똑같이 적용하는 최대 가속도 [deg/s2] |
|
fTargetTime |
float |
0.0 |
도달 시간 [sec] |
eMoveMode |
|
상수 및 열거형 정의를 참고하세요 |
정의(조인트별 속도/가속도)
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool amovesj(float fTargetPos[MAX_SPLINE_POINT][NUM_JOINT],
unsigned char nPosCount,
float fTargetVel[NUMBER_OF_JOINT],
float fTargetAcc[NUMBER_OF_JOINT],
float fTargetTime = 0.f,
MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE) {
return _amovesj_ex(_rbtCtrl, fTargetPos, nPosCount, fTargetVel,
fTargetAcc, fTargetTime, eMoveMode);
};
이 오버로드는 조인트 축마다 속도와 가속도 제한을 따로 지정할 수 있습니다. 내부적으로 _amovesj 대신 _amovesj_ex를 호출합니다.
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
fTargetPos |
float[MAX_SPLINE_POINT][6] |
최대 100개의 경유점(Waypoint) 목록 |
|
nPosCount |
unsigned char |
유효한 경유점 수입니다. nPosCount는 1~100이어야 합니다. |
|
fTargetVel |
float[6] |
조인트 축별 최대 속도 제한 [deg/s] |
|
fTargetAcc |
float[6] |
조인트 축별 최대 가속도 제한 [deg/s2] |
|
fTargetTime |
float |
0.0 |
도달 시간 [sec] |
eMoveMode |
|
상수 및 열거형 정의를 참고하세요 |
참고
fTargetTime을 지정하면fTargetVel과fTargetAcc를 무시하고fTargetTime을 기준으로 처리합니다.eMoveMode가MOVE_MODE_RELATIVE이면 위치 목록의 각 위치는 바로 앞 위치를 기준으로 한 상대 좌표로 정의됩니다. (위치 목록이 [q1, q2, …, q(n-1), q(n)]이면 q1은 시작점 기준 상대 각도이고, q(n)은 q(n-1) 기준 상대 각도입니다.)이 함수는 이전 모션과 다음 모션의 온라인 블렌딩을 지원하지 않습니다.
반환값
값 |
설명 |
|---|---|
0 |
오류 |
1 |
성공 |
참고
로봇이 STATE_EMERGENCY_STOP, STATE_SAFE_OFF, STATE_SAFE_OFF2, STATE_SAFE_STOP, STATE_SAFE_STOP2 상태이면 메시지 없이 false를 반환합니다.
예제
#include <thread>
#include <chrono>
// jpos의 모든 점을 지나는 스플라인 동작 시작 3초 후 D-Out 출력
float jpos[4][6];
float jvel = 10;
float jacc = 10;
unsigned char jposNum = 4;
jpos[0][0]=0; jpos[0][1]=0; jpos[0][2]=-30; jpos[0][3]=0; jpos[0][4]=-30; jpos[0][5]=0;
jpos[1][0]=90; jpos[1][1]=0; jpos[1][2]=0; jpos[1][3]=0; jpos[1][4]=0; jpos[1][5]=0;
jpos[2][0]=0; jpos[2][1]=0; jpos[2][2]=-30; jpos[2][3]=0; jpos[2][4]=-30; jpos[2][5]=0;
jpos[3][0]=0; jpos[3][1]=0; jpos[3][2]=0; jpos[3][3]=0; jpos[3][4]=0; jpos[3][5]=0;
drfl.amovesj(jpos, jposNum, jvel, jacc);
std::this_thread::sleep_for(std::chrono::milliseconds(3000));
drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, true);
이 예제는 경유점 4개를 지나는 조인트 스플라인을 비동기로 실행하고, 시작 3초 후 디지털 출력을 전환합니다. 다음 모션을 내리기 전에 mwait()로 스플라인이 끝났는지 확인하세요.