movesj_g (자동 모드)

이 함수는 여러 경유점(Waypoint)을 지나는 조인트 공간(Joint Space) 스플라인 모션을 실행하며, 스플라인 보간으로 부드럽고 연속적인 궤적을 만듭니다. 각 경유점은 다음 경유점과 자동으로 블렌딩되어 끊김 없이 이동합니다.

이 API는 자동(실행) 모드에서만 동작합니다. 수동(교시) 모드에서는 사용할 수 없습니다.

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

bool movesj_g(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_g(_rbtCtrl, fTargetPos, nPosCount, fTargetVel, fTargetAcc, fTargetTime, eMoveMode);
}

매개변수

매개변수 이름

자료형

기본값

설명

fTargetPos

float[MAX_SPLINE_POINT][6]

BASE 좌표계 기준 경유점 포즈 목록 [X, Y, Z는 mm, Rx, Ry, Rz는 고정 X-Y-Z 각도(deg)]입니다. 이 함수는 각 경유점의 조인트 위치를 역기구학(Inverse Kinematics)으로 계산해 배열에 다시 씁니다.

nPosCount

unsigned char

유효한 경유점 수(최대 = MAX_SPLINE_POINT)입니다.

fTargetVel

float

스플라인 모션의 목표 속도입니다.

fTargetAcc

float

스플라인 모션의 목표 가속도입니다.

fTargetTime

float

0.0f

모션 시간 [sec]입니다.

eMoveMode

MOVE_MODE

MOVE_MODE_ABSOLUTE

절대 이동인지 상대 이동인지 정합니다.

주의

이 함수는 fTargetPos의 처음 nPosCount개 경유점마다 6개 요소를 모두 역기구학으로 구한 조인트 위치[deg]로 덮어씁니다. 호출할 때마다 경유점을 새로 복사해 전달하세요. 같은 배열을 다시 사용하면 다음 호출에서 조인트 값을 포즈로 보내게 됩니다.

각 조인트 위치는 BASE 좌표계 기준 경유점에 대한 관절 형상(Solution Space) 2번(Lefty, Above, No Flip, movejx 참조)의 역기구학 해입니다. 이 함수는 경유점마다 컨트롤러에서 이 결과를 받을 때까지 기다리고, 결과를 CDRFLEx 객체가 get_current_posx, get_desired_posx, fkin, ikin, ikin_norm, trans, coord_transform, calc_coord, get_user_home, get_user_cart_coord, flange_serial_read와 공유하는 데이터에 저장합니다. 따라서 이 함수들이 앞서 반환한 포인터는 movesj_g가 반환한 후 덮어쓴 데이터를 가리킵니다. 먼저 구조체를 복사해 두세요. 콜백 안에서 movesj_g를 호출하지 마세요. 콜백 함수 규칙을 참고하세요.

반환값

값

설명

0

실패

1

성공

예제

// BASE 기준 경유점 포즈[X, Y, Z 단위 mm; Rx, Ry, Rz 단위 deg]
const float waypoints[3][6] = {
    {400.f, 200.f, 300.f, 180.f, 0.f, 180.f},
    {450.f, 150.f, 300.f, 180.f, 0.f, 180.f},
    {500.f, 100.f, 300.f, 180.f, 0.f, 180.f}
};

// movesj_g는 첫 번째 인수를 덮어쓰므로 호출할 때마다 새 복사본을 전달하세요
float path[3][6];
for (int i = 0; i < 3; ++i)
    for (int j = 0; j < 6; ++j)
        path[i][j] = waypoints[i][j];

drfl.movesj_g(path, 3, 50.f, 100.f, 2.0f);

참고

  • movesj_g는 스플라인 블렌딩으로 부드러운 다중 지점 조인트 보간을 제공합니다.

  • 속도와 가속도 제한에 맞춰 블렌딩을 자동으로 조정합니다.

  • 경로 교시, 모션 스트리밍, 다중 지점 시퀀스 실행에 적합합니다.

  • force/stiffness control이나 change_operation_speed()와 연동되지 않습니다.

  • 오버플로를 막으려면 nPosCount ≤ MAX_SPLINE_POINT를 지키세요.