이전 버전(1.33.4)의 문서를 보고 있습니다. 이 버전은 계속 지원됩니다.
최신 버전 정보는 1.33.5에서 확인하세요.

moveb (자동 모드)

이 함수는 하나 이상의 직선이나 원호로 이루어진 경로 정보를 따라 로봇을 등속으로 이동하며, 경로 정보에 설정한 블렌딩 반경으로 각 구간을 블렌딩합니다.

moveb

정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션

// 모션 제어: 블렌딩 이동
bool moveb(MOVE_POSB tTargetPos[MAX_MOVEB_POINT],
           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,
           DR_MV_APP eAppType = DR_MV_APP_NONE) {
    return _moveb(_rbtCtrl, tTargetPos, nPosCount, fTargetVel, fTargetAcc,
                  fTargetTime, eMoveMode, eMoveReference, eAppType);
};

매개변수

매개변수 이름

자료형

기본값

설명

tTargetPos

MOVE_POSB [MAX_MOVEB_POINT]

경로 정보

nPosCount

unsigned char

유효한 경로 수입니다. nPosCount는 1~50이어야 합니다.

fTargetVel

float[2]

선속도, 각속도 [mm/s, deg/s]

fTargetAcc

float[2]

선가속도, 각가속도 [mm/s2, deg/s2]

fTargetTime

float

0.f

도달 시간 [sec]

eMoveMode

MOVE_MODE

MOVE_MODE_ABSOLUTE

열거형 정의를 참고하세요

eMoveReference

MOVE_REFERENCE

MOVE_REFERENCE_BASE

열거형 정의를 참고하세요

eAppType

DR_MV_APP

DR_MV_APP_NONE

열거형 정의를 참고하세요. 값을 받기는 하지만 컨트롤러로 보내지 않습니다.

참고

  • fTargetVel에 값을 전달하면(예: {30, 0}) 입력값은 모션의 선속도에 해당하며, 각속도는 선속도에 비례해 결정됩니다.

  • fTargetAcc에 값을 전달하면(예: {60, 0}) 입력값은 모션의 선가속도에 해당하며, 각가속도는 선가속도에 비례해 결정됩니다.

  • fTargetTime을 지정하면 fTargetVel과 fTargetAcc를 무시하고 fTargetTime을 기준으로 처리합니다.

  • eMoveMode가 MOVE_MODE_RELATIVE이면 posb 목록의 각 위치는 바로 앞 위치를 기준으로 한 상대 좌표로 정의됩니다.

주의

  • tTargetPos의 블렌딩 반경이 0이면 사용자 입력 오류가 발생합니다.

  • 연속된 Line–Line 구간의 방향이 같으면 Line 중복 입력으로 사용자 입력 오류가 발생합니다.

  • 블렌딩 조건 때문에 방향이 급격히 바뀌면, 급가속을 막기 위해 사용자 입력 오류가 발생합니다.

  • 이 함수는 이전 모션과 다음 모션의 온라인 블렌딩을 지원하지 않습니다.

반환값

값

설명

0

오류

1

성공

참고

로봇이 STATE_EMERGENCY_STOP, STATE_SAFE_OFF, STATE_SAFE_OFF2, STATE_SAFE_STOP, STATE_SAFE_STOP2 상태이면 메시지 없이 false를 반환합니다.

예제

MOVE_POSB xb[4];
memset(xb, 0x00, sizeof(xb));
unsigned char seqNum = 4;
float tvel[2] = { 50, 50 };
float tacc[2] = { 100, 100 };

xb[0]._iBlendType = 0;   // 직선
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;   // 원호
xb[1]._fBlendRad = 50;
xb[1]._fTargetPos[0][0] = 559;   // 경유점
xb[1]._fTargetPos[0][1] = 134.5;
xb[1]._fTargetPos[0][2] = 551.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] = 234.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;   // 직선
xb[2]._fBlendRad = 50;
xb[2]._fTargetPos[0][0] = 559;
xb[2]._fTargetPos[0][1] = 434.5;
xb[2]._fTargetPos[0][2] = 451.5;
xb[2]._fTargetPos[0][3] = 0;
xb[2]._fTargetPos[0][4] = 180;
xb[2]._fTargetPos[0][5] = 0;

xb[3]._iBlendType = 0;   // 직선
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;

// 현재 위치에서 LINE–CIRCLE–LINE–LINE으로 이루어진 궤적을 따라 로봇을 이동하며,
// 속도 50(mm/sec, deg/sec)과 가속도 100(mm/sec2, deg/sec2)을 유지합니다.
// 각 구간의 끝점에서 50 mm 거리에 도달하면 다음 구간으로 블렌딩을 시작합니다.
drfl.moveb(xb, seqNum, tvel, tacc);

이 예제는 직선 구간과 원호 구간으로 이루어진 블렌딩 경로를 일정한 속도/가속도로 실행하며, 50 mm 블렌딩 반경으로 각 구간을 부드럽게 연결합니다.