최신 버전 정보는 1.33.5에서 확인하세요.
ikin_norm
이 함수는 결과 조인트 각도를 정규화하는 역기구학(Inverse Kinematics)을 계산합니다. 주어진 TCP 포즈(fSourcePos)에 해당하는 조인트 위치를 계산하고, 결과가 정규화된 조인트 범위 안에 있도록 조정해 형상이 달라도 일관된 해를 얻을 수 있습니다.
정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션
LPINVERSE_KINEMATIC_RESPONSE ikin_norm(
float fSourcePos[NUM_TASK],
unsigned char iSolutionSpace,
COORDINATE_SYSTEM eTargetRef,
unsigned char iRefPosOpt
) {
return _ikin_norm(_rbtCtrl, fSourcePos, iSolutionSpace, eTargetRef, iRefPosOpt);
};
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
fSourcePos |
float[6] |
작업 공간(Task Space)의 목표 TCP 위치(x, y, z, Rx, Ry, Rz)입니다. |
|
iSolutionSpace |
unsigned char |
유효한 역기구학 형상 8가지 중 하나를 선택하는 관절 형상(Solution Space) 번호(0-7)입니다. 255를 지정하면 컨트롤러가 iRefPosOpt로 설정한 기준 조인트 위치에 가장 가까운, 도달할 수 있는 해를 선택합니다. |
|
eTargetRef |
TCP의 기준 좌표계(Reference Coordinate System)입니다. |
||
iRefPosOpt |
unsigned char |
여러 역기구학 해 가운데 하나를 선택할 때 사용하는 기준 조인트 위치 옵션입니다. |
반환값
값 |
설명 |
|---|---|
계산하고 정규화한 조인트 위치를 담은 |
참고
이 함수는 컨트롤러가 응답할 때까지 기다립니다.
반환된 포인터는 CDRFLEx 객체 안의 저장 공간을 가리키며, 이 공간은 다른 DRFL 호출과 재연결 때마다 다시 사용됩니다. 다른 DRFL 함수를 호출하기 전에 구조체를 복사해 두세요. 인수가 3개인 ikin은 프로세스 안의 모든 CDRFLEx 객체가 공유하는 저장 공간에 결과를 반환합니다. ikin을 참고하세요. get_user_home을 제외하면 포인터는 NULL이 아닙니다. 실패 여부를 NULL 검사로 판단하지 마세요.
예제
float tcp_pose[6] = { 500.0f, 400.0f, 300.0f, 180.0f, 0.0f, 90.0f };
LPINVERSE_KINEMATIC_RESPONSE res =
drfl.ikin_norm(tcp_pose, 1, COORDINATE_SYSTEM_BASE, 1);
if (res && res->_iStatus == 0)
{
// ikin_norm이 반환한 조인트 해를 사용합니다.
float q[6] = {0};
for (int i = 0; i < 6; ++i)
q[i] = res->_fTargetPos[i];
drfl.movej(q, 50, 20);
}
else
{
// 상태:
// 0: 유효한 조인트 해 반환
// 1: 목표 포즈가 로봇 작업 영역 밖에 있음
// 2: 손목 축 특이점 감지
}
이 예제에서는 BASE 좌표계에서 목표 TCP 포즈 tcp_pose의 역기구학을 관절 형상 1로 계산합니다. 불연속을 막기 위해 결과 조인트 각도를 -180~+180 deg 범위로 정규화합니다. 일관된 조인트 상태가 필요한 연속 경로 모션이나 캘리브레이션에 유용합니다.