CDRFLEx.movesx
기능
로봇 제어기에서 로봇을 현재 위치에서 작업공간의 경유점들을 거쳐 목표위치(마지막 경유점)까지 연결되는 스플라인 곡선경로를 따라 이동시키기 위한 함수이다. 입력된 속도/가속도는 경로 중 최대 속도/가속도이며 정속모션 옵션을 선택할 경우 조건에 따라 입력한 속도로 정속도의 모션을 수행합니다.
인수
인수명 | 자료형 | 기본값 | 설명 |
---|---|---|---|
fTargetPos | float [MAX_SPLINE_ POINT][6] | - | 최대 100개까지의 경유점 정보 |
nPosCount | unsigned char | - | 유효 경유점 개수 |
fTargetVel | float[2] | - | 선속도, 각속도 |
fTargetAcc | float[2] | - | 선가속도, 각가속도 |
fTargetTime | float | 0.f | 도달 시간 [sec] |
eMoveMode | enum.MOVE_MODE | MOVE_MODE_ ABSOLUTE | 상수 및 열거형 정의 참조 |
eMove Reference | enum.MOVE_REFERENCE | MOVE_REFERENCE_BASE | 상수 및 열거형 정의 참조 |
eVelOpt | enum.SPLINE_VELOCITY_OPTION | SPLINE_VELOCITY_OPTION_DEFAULT | 상수 및 열거형 정의 참조 |
알아두기
- fTargetVel 에 하나의 인자를 입력한 경우(예를들어, fTargetVel ={30, 0}) 입력된 인자는 모션의 선속도에 대응되며, 각속도는 선속도에 비례하여 결정됩니다.
- fTargetAcc 에 하나의 인자를 입력한 경우(예를들어, fTargetAcc ={60, 0}) 입력된 인자는 모션의 선가속도에 대응되며, 각가속도는 선가속도에 비례하여 결정됩니다.
- fTargetTime 지정 시, fTargetVel, fTargetAcc 를 무시하고 fTargetTime 기준으로 처리됩니다
- eMoveMode 가 MOVE_MODE_RELATIVE 인 경우 position list의 각 pos는 앞 선 pos에 대한 상대좌표로 정의됩니다. (position list=[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 | 성공 |
예제
// CASE 1 : 절대좌표계 기준 이동 (mod= MOVE_MODE_ABSOLUTE)
float xpos[4][6];
int xposNum = 4;
float tvel={ 50, 100 };
float tacc={ 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, 50(mm/sec, deg/sec), 최대가속도 100, 100(mm/sec2,
// deg/sec2)로 움직임
// CASE 2 : 상대좌표계 기준 이동 (mod= MOVE_MODE_RELATIVE)
float xpos[4][6];
int xposNum = 4;
float tvel={ 50, 100 };
float tacc={ 50, 100 };
xpos[0][0]=0; xpos[0][1]=400; xpos[0][2]=0;
xpos[0][3]=0; xpos[0][4]=0; xpos[0][5]=0;
// 시작위치에서 상대좌표 xpos[0]만큼의 동차변환 → x0
xpos[1][0]=0; xpos[1][1]=0; xpos[1][2]=-400;
xpos[1][3]=0; xpos[1][4]=0; xpos[1][5]=0;
// x0에서 상대좌표 xpos[1]만큼의 동차변환 → x1
xpos[2][0]=0; xpos[2][1]=-200; xpos[2][2]=0;
xpos[2][3]=0; xpos[2][4]=0; xpos[2][5]=0;
// x1에서 상대좌표 xpos[2]만큼의 동차변환 → x2
xpos[3][0]=0; xpos[3][1]=0; xpos[3][2]=200;
xpos[3][3]=0; xpos[3][4]=0; xpos[3][5]=0;
// x3에서 상대좌표 xpos[3]만큼의 동차변환 → x3
drfl.movesx(xpos, xposNum, tvel, tacc, 0, MOVE_MODE_RELATIVE);
// 현재위치에서 시작하여 xpos에 상대정의된 경유점 집합을 연결하는
// 스플라인 곡선을 최대속도 50, 50(mm/sec, deg/sec), 최대가속도 100,
// 100(mm/sec2, deg/sec2)로 움직임