Breadcrumbs

CDRFLEx.moveb

기능

로봇 제어기에서 하나 이상의 라인 또는 원호 구성된 경로 정보을 받아 로봇을 경로 정보에 설정된 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

성공

예제

C++
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이 시작됨