Breadcrumbs

CDRFLEx.movec

기능

로봇 제어기에서 작업공간을 기준으로 로봇이 현재 위치에서 경유 지점를 지나 목표 위치까지 원호 또는 지정한 각도로 원호를 따라 이동시키기 위한 함수이다.

인수

인수명

자료형

기본값

설명

fTargetPos[0]

float[6]

-

경유 지점

fTargetPos[1]

float[6]

 

목표 위치

fTargetVel

float[2]

-

선속도, 각속도

fTargetAcc

float[2]

-

선가속도, 각가속도

fTargetTime

float

0.0

도달 시간 [sec]

eMoveMode

enum.MOVE_MODE

MOVE_MODE_

ABSOLUTE

상수 및 열거형 정의 참조

eMoveReference

enum.MOVE_REFERENCE

MOVE_REFERENCE_BASE

상수 및 열거형 정의 참조

fTargetAngle1

float

0.0

angle1

fTargetAngle2

float

0.0

angle2

fBlendingRadius

float

0.0

blending시 radius

eBlendingType

enum.BLENDING_SPEED_TYPE

BLENDING_SPEED_TYPE_DUPLICATE

상수 및 열거형 정의 참조

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 인 경우 fTargetPos[0] 과 fTargetPos[1] 는 각각 앞 선 위치값에 대한 상대좌표로 정의됩니다. (fTargetPos[0]은 시작점 대비 상대좌표, fTargetPos[1]는 fTargetPos[0]대비 상대좌표)

  • fTargetAngle1이 0보다 크고, fTargetAngle2이 0인 경우 fTargetAngle1은 Circular path 상의 총 회전각이 적용됩니다.

  • fTargetAngle1과 fTargetAngle2가 0보다 큰 경우, fTargetAngle1은 circular path 상에서 정속으로 이동하는 총 회전각을, fTargetAngle2는 가속과 감속을 위한 회전 구간의 회전각을 의미합니다. 이때 총 이동각은 fTargetAngle1+ 2 X fTargetAngle2만큼 circular path 상을 움직입니다.


주의

eBlendingType이 BLENDING_SPEED_TYPE_DUPLICATE이고 fBlendingRadius 가 0보다 큰 조건으로 후속 모션이 블렌딩 될 경우 선행모션의 잔여거리, 속도, 가속도로 결정되는 잔여모션시간이 후행모션의 모션시간보다 큰 경우 후행모션이 먼저 종료된 후 선행모션이 종료될 수 있습니다. 관련한 사항은 아래 이미지를 잠고하십시오.

image2021-12-2_11-29-36.png

리턴

설명

0

오류

1

성공

예제

C++
// CASE 1
float x1[2][6] = {{559,434.5,651.5,0,180,0}, {559,434.5,251.5,0,180,0}};
float tvel = {50,50}; # 태스크 속도를 50(mm/sec), 50(deg/sec)로 설정
float tacc = {100,100}; # 태스크 가속도를 100(mm/sec2), 100(deg/sec2)로 설정 
drfl.movec(x1, tvel, tacc);
// 속도 50(mm/sec), 가속도 100(mm/sec2)로 x1[0]을 경유하여 x1[1]에 이르는 
// 원호궤적을 따라 이동

// CASE 2
float x1[2][6] = {{559,434.5,651.5,0,180,0},{559,434.5,251.5,0,180,0}};
float tTime = 5;
drfl.movec(x1, 0, 0, tTime);
// x1[0]을 경유하여 x1[1]까지 5초의 도착시간을 가지고 원호궤적으로 이동

// CASE 3
float x1[2][6] = {{559,434.5,651.5,0,180,0},{559,434.5,251.5,0,180,0}};
float x2[2][6] = {{559,234.5,251.5,0,180,0 },{559,234.5,451.5,0,180,0}};
float tvel = {50,50}; 
float tacc = {100,100};
float blending_radius = 50; 
drfl.movec(x1, tvel, tacc, 0, MOVE_MODE_ABSOLUTE, MOVE_REFERENCE_BASE, 0, 0, blending_radius);
drfl.movec(x2, tvel, tacc, 0, MOVE_MODE_ABSOLUTE, MOVE_REFERENCE_BASE, 0, 0, 0, BLENDING_SPEED_TYPE_DUPLICATE);