최신 버전 정보는 1.33.5에서 확인하세요.
movesx (자동 모드)
이 함수는 작업 공간(Task Space)의 경유점(Waypoint)을 지나 현재 위치에서 목표 위치(마지막 경유점)까지 잇는 스플라인 곡선을 따라 로봇을 이동합니다. 입력한 속도/가속도는 경로상의 최대 속도/가속도입니다. eVelOpt가 SPLINE_VELOCITY_OPTION_CONST이면 로봇이 입력한 속도로 등속 이동합니다. 주어진 경유점과 속도로 등속 이동이 불가능하면 가변 속도(SPLINE_VELOCITY_OPTION_DEFAULT)로 이동합니다.
정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool movesx(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 _movesx(_rbtCtrl, fTargetPos, nPosCount, fTargetVel, fTargetAcc,
fTargetTime, eMoveMode, eMoveReference, eVelOpt);
};
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
fTargetPos |
float [MAX_SPLINE_POINT][6] |
최대 100개의 경유점 정보 [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.f |
도달 시간 [sec] |
eMoveMode |
|
열거형 정의를 참고하세요 |
|
eMoveReference |
|
열거형 정의를 참고하세요 |
|
eVelOpt |
|
열거형 정의를 참고하세요 |
참고
fTargetVel에 값을 전달하면(예:
fTargetVel ={30, 0}) 입력값은 모션의 선속도에 해당하며, 각속도는 선속도에 비례해 결정됩니다.fTargetAcc에 값을 전달하면(예:
fTargetAcc ={60, 0}) 입력값은 모션의 선가속도에 해당하며, 각가속도는 선가속도에 비례해 결정됩니다.fTargetTime을 지정하면 fTargetVel과 fTargetAcc를 무시하고 fTargetTime을 기준으로 처리합니다.
eMoveMode가
MOVE_MODE_RELATIVE이면 위치 목록의 각 위치는 바로 앞 위치를 기준으로 한 상대 좌표로 정의됩니다. (위치 목록이 [q1, q2, …,q(n-1), q(n)]이면 q1은 시작점 기준, q(n)은 q(n-1) 기준입니다.)이 함수는 이전 모션과 다음 모션의 온라인 블렌딩을 지원하지 않습니다.
주의
eVelOpt에 SPLINE_VELOCITY_OPTION_CONST 옵션(등속 옵션)을 선택해도, 입력한 경유점 사이의 거리와 속도가 맞지 않으면 등속 모션을 사용할 수 없으며, 모션이 자동으로 가변 속도 모션(eVelOpt = SPLINE_VELOCITY_OPTION_DEFAULT)으로 전환됩니다.
반환값
값 |
설명 |
|---|---|
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 xpos[4][6];
unsigned char xposNum = 4;
float tvel[2] = { 50, 100 };
float tacc[2] = { 50, 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]=434.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]=234.5; xpos[3][2]=451.5;
xpos[3][3]=0; xpos[3][4]=180; xpos[3][5]=0;
drfl.movesx(xpos, xposNum, tvel, tacc, 0, MOVE_MODE_ABSOLUTE);
// xpos에 정의한 경유점을 잇는 스플라인 곡선을 따라
// 최대 선속도/각속도 50, 최대 가속도 100으로 이동합니다.
// CASE 2 : 상대 좌표 기준으로 이동(mode = MOVE_MODE_RELATIVE)
float xpos2[4][6];
xpos2[0][0]=0; xpos2[0][1]=+400; xpos2[0][2]=0;
xpos2[0][3]=0; xpos2[0][4]=0; xpos2[0][5]=0; // 시작 위치 -> x0 구간
xpos2[1][0]=0; xpos2[1][1]=0; xpos2[1][2]=+400;
xpos2[1][3]=0; xpos2[1][4]=0; xpos2[1][5]=0; // x0 -> x1 구간
xpos2[2][0]=0; xpos2[2][1]=+200; xpos2[2][2]=0;
xpos2[2][3]=0; xpos2[2][4]=0; xpos2[2][5]=0; // x1 -> x2 구간
xpos2[3][0]=0; xpos2[3][1]=0; xpos2[3][2]=+200;
xpos2[3][3]=0; xpos2[3][4]=0; xpos2[3][5]=0; // x2 -> x3 구간
drfl.movesx(xpos2, xposNum, tvel, tacc, 0, MOVE_MODE_RELATIVE);
// xpos2의 상대 경유점을 잇는 스플라인 곡선을 따라
// 최대 속도 50(mm/sec, deg/sec), 최대 가속도 100(mm/sec2, deg/sec2)으로 이동합니다.