기능
로봇 제어기에서 하나 이상의 라인 또는 원호 구성된 경로 정보을 받아 로봇을 경로 정보에 설정된 blending radius로 블렌딩하여 등속으로 이동시키기 위한 함수이다.
인수
|
인수명 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
|
tTargetPos |
struct MOVE_POSB [MAX_MOVEB_POINT] |
- |
최대 25개까지의 경로 정보 |
|
nPosCount |
unsigned char |
- |
유효 경로 정보 개수 |
|
fTargetVel |
float[2] |
- |
선속도, 각속도 |
|
fTargetAcc |
float[2] |
- |
선가속도, 각가속도 |
|
fTargetTime |
float |
0.f |
도달 시간 [sec] |
|
eMoveMode |
enum.MOVE_MODE |
MOVE_MODE_ ABSOLUTE |
상수 및 열거형 상수 참조 |
|
eMoveReference |
enum.MOVE_REFERENCE |
MOVE_REFERENCE_BASE |
상수 및 열거형 상수 참조 |
|
eAppType |
enum.DR_MV_APP |
DR_MV_APP_NONE |
application 사용 여부 |
알아두기
-
fTargetVel 에 하나의 인자를 입력한 경우(예를들어, fTargetVel ={30, 0}) 입력된 인자는 모션의 선속도에 대응되며, 각속도는 선속도에 비례하여 결정됩니다.
-
fTargetAcc 에 하나의 인자를 입력한 경우(예를들어, fTargetAcc ={60, 0}) 입력된 인자는 모션의 선가속도에 대응되며, 각가속도는 선가속도에 비례하여 결정됩니다.
-
fTargetTime 지정 시, fTargetVel, fTargetAcc 를 무시하고 fTargetTime 기준으로 처리됩니다
-
eMoveMode 가 MOVE_MODE_RELATIVE 인 경우 posb list의 각 pos는 앞 선 pos에 대한 상대좌표로 정의됩니다.
주의
-
posb에서 blending radius가 0인 경우, 사용자 입력 오류가 나타납니다.
-
연속된 Line-Line segment가 같은 방향을 가질 경우 Line의 중복입력으로 사용자 입력 오류가 나타납니다.
-
블렌딩 구간에서 조건에 따라 급격하게 방향전환이 발생하게 되는 경우 급가속을 방지하기 위해 사용자 입력오류가 나타납니다.
-
선행모션과 후행모션에 대한 온라인 블렌딩은 지원하지 않습니다.
리턴
|
값 |
설명 |
|---|---|
|
0 |
오류 |
|
1 |
성공 |
예제
MOVE_POSB xb[4];
memset(xb, 0x00, sizeof(xb));
int segNum = 4;
float tvel = { 50, 50 };
float tacc = { 100, 100 };
xb[0]._iBlendType = 0; // line
xb[0]._fBlendRad = 50;
xb[0]._fTargetPos[0][0] = 559;
xb[0]._fTargetPos[0][1] = 234.5;
xb[0]._fTargetPos[0][2] = 651.5;
xb[0]._fTargetPos[0][3] = 0;
xb[0]._fTargetPos[0][4] = 180;
xb[0]._fTargetPos[0][5] = 0;
xb[1]._iBlendType = 1; // circle
xb[1]._fBlendRad = 50;
xb[1]._fTargetPos[0][0] = 559;
xb[1]._fTargetPos[0][1] = 234.5;
xb[1]._fTargetPos[0][2] = 451.5;
xb[1]._fTargetPos[0][3] = 0;
xb[1]._fTargetPos[0][4] = 180;
xb[1]._fTargetPos[0][5] = 0;
xb[1]._fTargetPos[1][0] = 559;
xb[1]._fTargetPos[1][1] = 434.5;
xb[1]._fTargetPos[1][2] = 451.5;
xb[1]._fTargetPos[1][3] = 0;
xb[1]._fTargetPos[1][4] = 180;
xb[1]._fTargetPos[1][5] = 0;
xb[2]._iBlendType = 0; // line
xb[2]._fBlendRad = 50;
xb[2]._fTargetPos[0][0] = 559;
xb[2]._fTargetPos[0][1] = 434.5;
xb[2]._fTargetPos[0][2] = 251.5;
xb[2]._fTargetPos[0][3] = 0;
xb[2]._fTargetPos[0][4] = 180;
xb[2]._fTargetPos[0][5] = 0;
xb[3]._iBlendType = 0; // line
xb[3]._fBlendRad = 50;
xb[3]._fTargetPos[0][0] = 559;
xb[3]._fTargetPos[0][1] = 234.5;
xb[3]._fTargetPos[0][2] = 251.5;
xb[3]._fTargetPos[0][3] = 0;
xb[3]._fTargetPos[0][4] = 180;
xb[3]._fTargetPos[0][5] = 0;
drfl.moveb(xb, segNum, tvel, tacc);
// 현재위치에서 시작하여 LINE→CIRCLE→LINE→LINE으로 이루어진 궤적을
// 속도 50, 50(mm/sec, deg/sec), 가속도 100, 100(mm/sec2, deg/sec2)
// 유지하며 각 구간의 끝점에서 50mm 거리에 도달하면 다음 segment로
// blending이 시작됨