ikin (수동 모드)

이 절에서는 수동(교시) 작업 중에 ikin을 사용하는 방법을 설명합니다. 이 함수는 주어진 목표 포즈에 대한 역기구학(IK) 해를 계산합니다. 원하는 직교 좌표 위치와 자세 [X, Y, Z, Rx, Ry, Rz]를 그에 해당하는 조인트 각도 [J1 … J6]로 변환하므로, 실제 모션을 실행하기 전에 도달 가능한 형상을 검증하거나 시뮬레이션할 수 있습니다.

일반적인 사용법

  • 로봇을 움직이지 않고 원하는 TCP 포즈에 대한 조인트 각도를 계산합니다.

  • 목표 위치에 기구학적으로 도달할 수 있는지 검증합니다.

  • 충돌 없는 교시를 위해 여러 역기구학 해(관절 형상)를 비교합니다.

  • 캘리브레이션 중에 접근 포즈나 후퇴 포즈를 수치로 생성합니다.

참고

  • 이 함수는 로봇을 움직이지 않으며, 역기구학 계산만 합니다.

  • 바로 모션을 실행하려면 계산 결과로 movej나 movel을 사용하세요.

예제: 목표 포즈에 대한 조인트 각도 계산

// 사전 조건:
// - 연결 완료(open_connection)
// - 수동(교시) 모드 활성

// 1단계. 목표 포즈 정의(BASE 좌표계 기준)
float targetPose[NUM_TASK] = {400.0f, 0.0f, 300.0f, 180.0f, 0.0f, 180.0f};

// 2단계. 관절 형상 선택(0: 기본값 / 엘보 다운)
unsigned char solSpace = 0;

// 3단계. 역기구학 계산
LPROBOT_POSE pJoints = drfl.ikin(targetPose, solSpace, COORDINATE_SYSTEM_BASE);

// 4단계. 계산된 조인트 값 출력
printf("[IK Result] J1=%.3f  J2=%.3f  J3=%.3f  J4=%.3f  J5=%.3f  J6=%.3f\n",
       pJoints->_fPosition[0], pJoints->_fPosition[1], pJoints->_fPosition[2],
       pJoints->_fPosition[3], pJoints->_fPosition[4], pJoints->_fPosition[5]);

이 예제는 BASE 좌표계에서 목표 직교 좌표 포즈를 정의하고, ikin으로 그 포즈에 도달하는 조인트 각도를 계산합니다. 이를 통해 작업자는 로봇 암을 실제로 움직이지 않고도 도달 가능성을 시험하거나 오프라인으로 모션 명령을 준비할 수 있습니다.

팁

  • 오프라인 포즈 검증이나 다른 형상 테스트에 사용하세요.

  • 반환되는 포인터는 NULL이 아니며, 도달할 수 없는 포즈를 알려 주지 않습니다. 이를 확인하려면 ikin (extension) 오버로드를 사용하고 INVERSE_KINEMATIC_RESPONSE의 _iStatus를 확인하세요.

  • fkin과 비교해 순기구학 모델과 역기구학 모델의 포즈가 일치하는지 확인하세요.

  • 여러 역기구학 해(서로 다른 iSolutionSpace)를 기록해 제약이 있는 환경에 가장 적합한 경로를 선택하세요.