최신 버전 정보는 1.33.5에서 확인하세요.
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 |
|
열거형 정의를 참고하세요 |
|
eMoveReference |
|
열거형 정의를 참고하세요 |
|
eAppType |
|
열거형 정의를 참고하세요. 값을 받기는 하지만 컨트롤러로 보내지 않습니다. |
참고
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 블렌딩 반경으로 각 구간을 부드럽게 연결합니다.