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

ikin

작업 공간(Task Space) 포즈(fSourcePos, [X, Y, Z, Rx, Ry, Rz])에 도달하는 조인트 각도를 계산해 반환합니다. 포즈는 eTargetRef가 지정하는 좌표계를 기준으로 하며, 조인트 각도는 iSolutionSpace로 선택한 관절 형상(Solution Space)을 따릅니다.

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

LPROBOT_POSE ikin(
    float fSourcePos[NUM_TASK],
    unsigned char iSolutionSpace,
    COORDINATE_SYSTEM eTargetRef = COORDINATE_SYSTEM_BASE
) {
    return _ikin(_rbtCtrl, fSourcePos, iSolutionSpace, eTargetRef);
};

매개변수

매개변수 이름

자료형

기본값

설명

fSourcePos

float[6]

역기구학을 계산할 목표 작업 공간 포즈 [X, Y, Z, Rx, Ry, Rz]입니다. eTargetRef가 지정하는 좌표계를 기준으로 합니다.

iSolutionSpace

unsigned char

관절 형상 번호(0–7)입니다. 255를 지정하면 컨트롤러가 도달할 수 있는 해를 선택합니다.
사용할 역기구학(Inverse Kinematics) 형상(예: 엘보 업/다운, 손목 플립)을 지정합니다.

eTargetRef

COORDINATE_SYSTEM

COORDINATE_SYSTEM_BASE

fSourcePos의 기준 좌표계(Reference Coordinate System)입니다.

반환값

값

설명

ROBOT_POSE

fSourcePos에 도달하는 조인트 각도[deg](J1–J6)가 _fPosition에 담깁니다. 각도는 iSolutionSpace로 선택한 관절 형상을 따릅니다.

참고

이 함수는 컨트롤러가 응답할 때까지 기다립니다.

이 함수를 호출하면 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가 앞서 반환한 데이터를 덮어씁니다. 반환되는 포인터는 NULL이 아닙니다. 요청을 보내지 못하면 조인트 각도가 모두 0이 됩니다. 실패 여부를 NULL 검사로 판단하지 마세요.

주의

반환된 포인터는 프로세스 안의 모든 CDRFLEx 객체가 공유하는 ROBOT_POSE 하나를 가리킵니다. 어느 CDRFLEx 객체에서든 인수가 3개인 ikin을 다시 호출하면 이 값을 덮어씁니다. 다시 호출하기 전에 조인트 각도를 복사해 두고, 두 CDRFLEx 객체에서 동시에 호출하지 마세요.

예제

float x1[6] = { 370.9, 719.7, 651.5, 90, -180, 0 };
LPROBOT_POSE res = drfl.ikin(x1, 2);

float q1[6] = { 0 };
for (int i = 0; i < 6; i++) {
    q1[i] = res->_fPosition[i];
}

drfl.movej(q1, 60, 30);

이 예제는 작업 공간 포즈 x1의 역기구학을 계산해 관절 형상 2에 해당하는 조인트 각도를 구한 다음, movej로 로봇을 그 각도로 이동합니다. 역기구학 해는 여러 개일 수 있으며, iSolutionSpace로 로봇이 사용할 형상을 선택할 수 있습니다.