최신 버전 정보는 1.33.5에서 확인하세요.
movesj (자동 모드)
이 함수는 조인트 공간(Joint Space)의 경유점(Waypoint) 목록을 지나 현재 조인트 위치에서 최종 조인트 위치(마지막 경유점)까지 잇는 스플라인 곡선을 따라 로봇을 이동합니다. 입력한 속도/가속도는 경로상의 최대 속도/가속도이며, 실제 가감속은 각 경유점 구간에 맞춰 자동으로 분배됩니다.
정의(모든 축에 같은 속도/가속도)
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool movesj(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 _movesj(_rbtCtrl, fTargetPos, nPosCount, fTargetVel,
fTargetAcc, fTargetTime, eMoveMode);
};
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
fTargetPos |
float[MAX_SPLINE_POINT][6] |
경유점 목록(최대 100개) |
|
nPosCount |
unsigned char |
유효한 경유점 수입니다. nPosCount는 1~100이어야 합니다. |
|
fTargetVel |
float |
모든 조인트에 똑같이 적용하는 최대 속도 [deg/s] |
|
fTargetAcc |
float |
모든 조인트에 똑같이 적용하는 최대 가속도 [deg/s2] |
|
fTargetTime |
float |
0.f |
도달 시간 [sec] |
eMoveMode |
|
열거형 정의를 참고하세요 |
정의(조인트별 속도/가속도)
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool movesj(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 _movesj_ex(_rbtCtrl, fTargetPos, nPosCount, fTargetVel,
fTargetAcc, fTargetTime, eMoveMode);
};
이 오버로드는 조인트 축마다 속도와 가속도 제한을 따로 지정할 수 있습니다. 내부적으로 _movesj 대신 _movesj_ex를 호출합니다.
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
fTargetPos |
float[MAX_SPLINE_POINT][6] |
경유점 목록(최대 100개) |
|
nPosCount |
unsigned char |
유효한 경유점 수입니다. nPosCount는 1~100이어야 합니다. |
|
fTargetVel |
float[6] |
조인트 축별 최대 속도 제한 [deg/s] |
|
fTargetAcc |
float[6] |
조인트 축별 최대 가속도 제한 [deg/s2] |
|
fTargetTime |
float |
0.f |
도달 시간 [sec] |
eMoveMode |
|
열거형 정의를 참고하세요 |
참고
fTargetTime을 지정하면fTargetVel과fTargetAcc를 무시하고 시간을 기준으로 모션을 처리합니다.eMoveMode가MOVE_MODE_RELATIVE이면 목록의 각 경유점은 바로 앞 경유점을 기준으로 한 상대 위치로 정의됩니다(예: 목록이 [q1, q2, …, 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를 반환합니다.
예제
// CASE 1 : 절대 좌표 입력(mode = MOVE_MODE_ABSOLUTE)
float jpos[4][6];
float jvel = 10;
float jacc = 10;
unsigned char jposNum = 4;
// q0
jpos[0][0]=0; jpos[0][1]=0; jpos[0][2]=-30; jpos[0][3]=0; jpos[0][4]=-30; jpos[0][5]=0;
// q1
jpos[1][0]=90; jpos[1][1]=0; jpos[1][2]=0; jpos[1][3]=0; jpos[1][4]=0; jpos[1][5]=0;
// q2
jpos[2][0]=0; jpos[2][1]=0; jpos[2][2]=-30; jpos[2][3]=0; jpos[2][4]=-30; jpos[2][5]=0;
// q3(목표)
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.movesj(jpos, jposNum, jvel, jacc);
// 절대 경유점을 지나는 스플라인 곡선을 따라 최대 속도 10(deg/s),
// 최대 가속도 10(deg/s^2)으로 이동합니다.
// CASE 2 : 상대 각도 입력(mode = MOVE_MODE_RELATIVE)
float rpos[4][6];
jvel = 10; jacc = 10; jposNum = 4;
// 상대 경유점(각 점은 이전 점 기준)
rpos[0][0]=0; rpos[0][1]=0; rpos[0][2]=-30; rpos[0][3]=0; rpos[0][4]=-30; rpos[0][5]=0;
rpos[1][0]=90; rpos[1][1]=0; rpos[1][2]=0; rpos[1][3]=0; rpos[1][4]=0; rpos[1][5]=0;
rpos[2][0]=-90; rpos[2][1]=0; rpos[2][2]=-30; rpos[2][3]=0; rpos[2][4]=-30; rpos[2][5]=0;
rpos[3][0]=0; rpos[3][1]=0; rpos[3][2]=30; rpos[3][3]=0; rpos[3][4]=30; rpos[3][5]=0;
drfl.movesj(rpos, jposNum, jvel, jacc, 0, MOVE_MODE_RELATIVE);
이 예제는 먼저 절대 조인트 좌표로 스플라인을 실행한 다음, 상대 경유점으로 다시 실행합니다. 상대 경유점의 각 행은 바로 앞 조인트 상태를 기준으로 적용됩니다. 속도/가속도 제한과 상관없이 정해진 시간 동안 스플라인을 실행하려면 fTargetTime을 사용하세요.