movesj (자동 모드)

이 함수는 조인트 공간(Joint Space)의 경유점(Waypoint) 목록을 지나 현재 조인트 위치에서 최종 조인트 위치(마지막 경유점)까지 잇는 스플라인 곡선을 따라 로봇을 이동합니다. 입력한 속도/가속도는 경로상의 최대 속도/가속도이며, 실제 가감속은 각 경유점 구간에 맞춰 자동으로 분배됩니다.

movesj

정의(모든 축에 같은 속도/가속도)
DRFLEx.h, CDRFLEx 클래스의 public 섹션

bool movesj(float fTargetPos[MAX_SPLINE_POINT][NUM_JOINT],
            unsigned char nPosCount,
            float fTargetVel,
            float fTargetAcc,
            float fTargetTime = 0.f,
            MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE) {
    return _movesj(_rbtCtrl, fTargetPos, nPosCount, fTargetVel,
                   fTargetAcc, fTargetTime, eMoveMode);
};

매개변수

매개변수 이름

자료형

기본값

설명

fTargetPos

float[MAX_SPLINE_POINT][6]

경유점 목록(최대 100개)

nPosCount

unsigned char

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

fTargetVel

float

모든 조인트에 똑같이 적용하는 최대 속도 [deg/s]

fTargetAcc

float

모든 조인트에 똑같이 적용하는 최대 가속도 [deg/s2]

fTargetTime

float

0.f

도달 시간 [sec]

eMoveMode

MOVE_MODE

MOVE_MODE_ABSOLUTE

열거형 정의를 참고하세요


정의(조인트별 속도/가속도)
DRFLEx.h, CDRFLEx 클래스의 public 섹션

bool movesj(float fTargetPos[MAX_SPLINE_POINT][NUM_JOINT],
            unsigned char nPosCount,
            float fTargetVel[NUMBER_OF_JOINT],
            float fTargetAcc[NUMBER_OF_JOINT],
            float fTargetTime = 0.f,
            MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE) {
    return _movesj_ex(_rbtCtrl, fTargetPos, nPosCount, fTargetVel,
                      fTargetAcc, fTargetTime, eMoveMode);
};

이 오버로드는 조인트 축마다 속도와 가속도 제한을 따로 지정할 수 있습니다. 내부적으로 _movesj 대신 _movesj_ex를 호출합니다.

매개변수

매개변수 이름

자료형

기본값

설명

fTargetPos

float[MAX_SPLINE_POINT][6]

경유점 목록(최대 100개)

nPosCount

unsigned char

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

fTargetVel

float[6]

조인트 축별 최대 속도 제한 [deg/s]

fTargetAcc

float[6]

조인트 축별 최대 가속도 제한 [deg/s2]

fTargetTime

float

0.f

도달 시간 [sec]

eMoveMode

MOVE_MODE

MOVE_MODE_ABSOLUTE

열거형 정의를 참고하세요

참고

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

  • eMoveMode가 MOVE_MODE_RELATIVE이면 목록의 각 경유점은 바로 앞 경유점을 기준으로 한 상대 위치로 정의됩니다(예: 목록이 [q1, q2, …, q(n)]이면 q1은 시작 포즈 기준, q(n)은 q(n-1) 기준).

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

반환값

값

설명

0

오류

1

성공

참고

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

예제

// CASE 1 : 절대 좌표 입력(mode = MOVE_MODE_ABSOLUTE)
float jpos[4][6];
float jvel = 10;
float jacc = 10;
unsigned char jposNum = 4;

// q0
jpos[0][0]=0;   jpos[0][1]=0;   jpos[0][2]=-30; jpos[0][3]=0;  jpos[0][4]=-30; jpos[0][5]=0;
// q1
jpos[1][0]=90;  jpos[1][1]=0;   jpos[1][2]=0;   jpos[1][3]=0;  jpos[1][4]=0;   jpos[1][5]=0;
// q2
jpos[2][0]=0;   jpos[2][1]=0;   jpos[2][2]=-30; jpos[2][3]=0;  jpos[2][4]=-30; jpos[2][5]=0;
// q3(목표)
jpos[3][0]=0;   jpos[3][1]=0;   jpos[3][2]=0;   jpos[3][3]=0;  jpos[3][4]=0;   jpos[3][5]=0;

drfl.movesj(jpos, jposNum, jvel, jacc);
// 절대 경유점을 지나는 스플라인 곡선을 따라 최대 속도 10(deg/s),
// 최대 가속도 10(deg/s^2)으로 이동합니다.

// CASE 2 : 상대 각도 입력(mode = MOVE_MODE_RELATIVE)
float rpos[4][6];
jvel = 10; jacc = 10; jposNum = 4;

// 상대 경유점(각 점은 이전 점 기준)
rpos[0][0]=0;   rpos[0][1]=0;   rpos[0][2]=-30; rpos[0][3]=0;  rpos[0][4]=-30; rpos[0][5]=0;
rpos[1][0]=90;  rpos[1][1]=0;   rpos[1][2]=0;   rpos[1][3]=0;  rpos[1][4]=0;   rpos[1][5]=0;
rpos[2][0]=-90; rpos[2][1]=0;   rpos[2][2]=-30; rpos[2][3]=0;  rpos[2][4]=-30; rpos[2][5]=0;
rpos[3][0]=0;   rpos[3][1]=0;   rpos[3][2]=30;  rpos[3][3]=0;  rpos[3][4]=30;  rpos[3][5]=0;

drfl.movesj(rpos, jposNum, jvel, jacc, 0, MOVE_MODE_RELATIVE);

이 예제는 먼저 절대 조인트 좌표로 스플라인을 실행한 다음, 상대 경유점으로 다시 실행합니다. 상대 경유점의 각 행은 바로 앞 조인트 상태를 기준으로 적용됩니다. 속도/가속도 제한과 상관없이 정해진 시간 동안 스플라인을 실행하려면 fTargetTime을 사용하세요.