역기구학 API

로봇 역기구학은 산업용 로봇 제어 시스템의 핵심 기능 중 하나로, 직교 좌표계 공간의 위치 및 자세 정보를 로봇 관절 공간의 각도 정보로 변환할 수 있습니다. 각 로봇 제조업체는 해당 제어기에서 상응하는 역기구학 API 기능을 제공하여 사용자가 정밀한 운동 제어 및 경로 계획을 구현할 수 있도록 돕습니다. 역기구학 API의 주요 역할은 지정된 공구 중심점(TCP) 위치 및 자세에 따라 로봇 각 관절이 도달해야 하는 각도 값을 계산하는 것입니다.

ABB

ABB 로봇 제어기는 역기구학 계산을 위해 CalcJointT 기능을 제공합니다. 이 기능은 지정된 robtarget 데이터로부터 로봇 팔 축과 외부 축의 관절각을 계산하는 데 사용됩니다.

CalcJointT 기능:

CalcJointT(Calculate Joint Target) 기능은 지정된 robtarget 데이터에 따라 로봇 각 축의 관절각을 계산할 수 있습니다. 이 기능은 계산 과정에서 Tool, WObj 등 관련 매개변수의 규정을 고려해야 합니다. 유효한 프로그램 변위(ProgDisp) 및 외부 축 오프셋(EOffs) 실행 중에는 동일한 좌표계를 사용하여 입력 robtarget 데이터를 지정해야 합니다. 계산 완료 후 반환되는 jointtarget 데이터는 교정 좌표계로 표현됩니다.

MultiMove 애플리케이션 유형에서 협조 작업물과 함께 협조 또는 동기 협조 모드를 형성할 때, 작업물이 다른 프로그램 작업에 위치한 기계 단위를 통해 이동되는 경우 특정 상황에서는 CalcJointT 기능을 사용하면 안 됩니다. 이러한 상황에는 다음이 포함됩니다: 기계 팔 단위에 의해 이동된 협조 작업물의 현재 위치를 현재 사용자 좌표계에서 계산하는 경우, 다른 프로그램 작업에 위치한 기계 단위가 정지 상태인 경우, 그리고 매개변수 \UseCurWObjPos를 사용하는 경우입니다.

기능의 반환값은 jointtarget 데이터 유형으로, 팔 측면에서 기계 팔 각 축의 각도(도 단위), 외부 축의 값(선형 축은 mm 단위, 회전 축은 도 단위)에 대한 정보를 포함합니다. 반환값은 항상 교정 위치와 관련됩니다.

CalcJointT 기능의 구문은 다음과 같습니다:

CalcJointT ([\UseCurWObjPos] Rob_target Tool [\WObj] [\ErrorNumber])
매개변수명 데이터 유형 설명

[\UseCurWObjPos]

switch

선택 매개변수, 다른 작업의 기계 단위에 의해 이동된 협조 작업물의 현재 위치를 계산에 사용(현재 사용자 좌표계), 기타 모든 데이터는 RAPID 프로그램에서 획득

Rob_target

robtarget

최외부 좌표계에서 기계 팔과 외부 축의 위치와 유효한 프로그램 변위(ProgDisp) 및 외부 축 오프셋(EOffs) 실행 중 지정된 도구 및 작업물과 관련

Tool

tooldata

기계 팔 관절각 계산에 사용되는 도구

[\WObj]

wobjdata

기계 팔 위치와 관련된 작업물(좌표계). 이 매개변수를 생략하면 작업물 wobj0가 사용됩니다. 고정 도구, 협조 외부 축 또는 컨베이어 벨트를 사용할 때는 이 매개변수를 자세히 설명해야 합니다

[\ErrorNumber]

errnum

오류 처리용. 적어도 하나의 축이 관절 제한 구역 밖에 있거나 적어도 하나의 결합 관절에 대한 제한을 초과하는 경우 오류 수량 ERR_ROBLIMIT를 저장하는 변수; 위치(robtarget)가 로봇 작업 영역 밖에 있는 경우 ERR_OUTSIDE_REACH를 저장

프로그램 실행:

입력 Robtarget에 따라 반환되는 jointtarget을 계산합니다. 매개변수 \UseCurWObjPos를 사용하는 경우, 사용되는 위치는 사용자 좌표계를 제어하는 데 사용되는 기계 단위의 현재 위치에서 가져옵니다. 기계 팔 관절각을 계산하기 위해 선택된 Tool, WObj(협조 사용자 좌표계 포함) 및 실행 중 유효한 ProgDisp를 고려해야 합니다. 실행 중 외부 축 위치를 계산하기 위해 유효한 도구 EOffs를 고려해야 합니다.

계산은 항상 입력 robtarget 데이터에 지정된 구성 데이터에 따라 기계 팔 구성을 선택합니다. 명령 ConfL과 ConfJ는 이 계산 원칙에 영향을 주지 않습니다. 손목 특이점을 사용할 때는 기계 팔 축 4를 0도로 설정합니다.

로봇 위치가 저장될 때 유효한 프로그램 변위(ProgDisp) 및/또는 외부 축 오프셋(BOEEs)이 존재하는 경우, CalcJointT를 실행할 때 동일한 프로그램 변위 및/또는 외부 축 오프셋이 유효해야 합니다.

제한사항:

협조 좌표계를 사용하는 경우, CalcJointT를 사용할 때 협조된 단위를 보유해야 합니다.

CalcJointT를 실행할 때 TCP와 협조 관련 위치에서는 일반적으로 작업물의 사용자 좌표계를 제어하는 데 사용되는 기계 단위가 사용 가능한지 확인해야 합니다.

CalcJointT는 일반적으로 RAPID 프로그램의 robtarget, tooldata 및 wobjdata를 사용하여 jointtarget을 계산합니다. 협조 작업물의 경우 기계 단위 위치를 robtarget의 외부 축 위치로 사용하지만, 기계 단위가 다른 프로그램 작업(MultiMove 시스템)에 의해 제어되거나 기계 단위가 제어 시스템(컨베이어 벨트)에 의해 제어되지 않는 경우는 예외입니다. 컨베이어 벨트를 제외한 MultiMove 시스템의 경우, 기계 단위가 CalcJointT 실행 중 정지 상태이면 매개변수 \UseCurwObjPos를 사용할 수 있습니다.

오류 처리 및 실용 예제

시스템은 다음과 같은 복구 가능한 오류를 생성하며 오류 처리기에서 이러한 오류를 처리합니다. 시스템 변수 ERRNO는 다음 값으로 설정됩니다:

오류 코드 오류 원인

ERR_ROBLIMIT

위치에 도달할 수 있지만 적어도 하나의 축이 관절 제한 밖에 있거나 적어도 하나의 결합 관절에 대한 제한을 초과

ERR_OUTSIDE_REACH

위치(robtarget)가 로봇 작업 영역 밖에 있음

ERR_WOBJ_MOVING

작업물(사용자 좌표계)을 제어하는 기계 단위가 CalcJointT \UseCurWObjPos 실행 시간 내에 정지 상태가 아님

기본 오류 처리 예제:

VAR errnum reach_error;
VAR jointtarget result_joints;

result_joints := CalcJointT(target_point, tool0 \WObj:=wobj0 \ErrorNumber:=reach_error);

IF reach_error = ERR_ROBLIMIT OR reach_error = ERR_OUTSIDE_REACH OR reach_error = ERR_WOBJ_MOVING THEN
    TPWrite "Position unreachable: " + NumToStr(reach_error, 0);
    ! 오류 상황 처리 - 오류 기록 또는 새 목표 위치 요청
ELSE
    ! 정상 운동 실행
    MoveAbsJ result_joints, v1000, fine, tool0;
ENDIF

도달 가능성 검사 예제:

FUNC bool CanRobReach(robtarget ToPoint, PERS tooldata Tool, \PERS wobjdata WObj)
    VAR jointtarget jdump;
    jdump := CalcJointT(ToPoint, Tool \WObj?WObj);
    RETURN TRUE;
ERROR
    RETURN FALSE;
ENDFUNC

FANUC

FANUC 로봇 제어기는 역기구학 계산을 위해 POS2JOINT 내장 기능을 제공합니다. 이 루틴은 역기구학 루틴을 호출하여 직교 좌표계 위치(in_pos)를 관절각(out_jnt)로 변환하는 데 사용됩니다.

POS2JOINT 기능의 구문은 다음과 같습니다:

POS2JOINT(ref_jnt, in_pos, uframe, utool, config_ref, wjnt_cfg, ext_ang, out_jnt, and status)

이 기능은 %ENVIRONMENT Group의 MOTN 환경 그룹에 속합니다.

매개변수명 데이터 유형 입력/출력 설명

ref_jnt

JOINTPOS

[in]

기준 관절 위치

in_pos

POSITION

[in]

입력 직교 좌표계 위치

uframe

POSITION

[in]

사용자 좌표계

utool

POSITION

[in]

사용자 도구 좌표계

config_ref

INTEGER

[in]

구성 참조

wjnt_cfg

CONFIG

[in]

손목 관절 구성

ext_ang

ARRAY OF REAL

[in]

외부 축 각도 배열

out_jnt

JOINTPOS

[out]

출력 관절 위치

status

INTEGER

[out]

실행 상태

YASKAWA

YASKAWA 로봇 제어기는 지정된 제어 그룹의 직교 좌표 위치(로봇 좌표계)를 각도 위치로 변환하는 mpConvCartPosToAxes 기능을 제공합니다.

mpConvCartPosToAxes 기능의 구문은 다음과 같습니다:

int mpConvCartPosToAxes(
    unsigned int grp_no,
    MP_COORD* coord,
    unsigned int tool_no,
    BITSTRING fig_ctrl,
    long prev_angle[MP_GRP_AXES_NUM],
    MP_KINEMA_TYPE type,
    long angle[MP_GRP_AXES_NUM]
);
매개변수명 데이터 유형 설명

grp_no

unsigned int

제어 그룹 번호

coord

MP_COORD*

직교 좌표 위치 포인터

tool_no

unsigned int

도구 번호

fig_ctrl

BITSTRING

구성 제어 매개변수

prev_angle

long[MP_GRP_AXES_NUM]

이전 각도 위치 배열

type

MP_KINEMA_TYPE

운동학 유형

angle

long[MP_GRP_AXES_NUM]

출력 각도 위치 배열

KUKA

KUKA 로봇 제어기는 역기구학 계산을 위해 Inverse 기능을 제공합니다. 이 기능은 직교 좌표계 위치에서 추가 축 각도를 사용하여 적합한 로봇 축 각도를 계산합니다. 이때 직교 좌표계 위치에 대해 상태 및 회전 값을 지정할 필요가 없습니다.

Inverse 기능은 PTP 접근 시 세부 블록에서 계산된 점에 사용할 수 있습니다. 이 기능을 사용하여 회전 값의 유효성을 확인하고 필요 시 목표 점에서 조정할 수 있습니다.

Inverse 기능의 구문은 다음과 같습니다:

result = INVERSE(position, start_axis, err_status)
매개변수명 유형 전달 방식 설명

result

E6AXIS

반환값

전달된 위치에서의 축 각도

position

E6POS

IN 매개변수

기본 좌표계 기반 직교 좌표계 위치(필요 시 추가 축 각도 포함), 이 위치에 대해 로봇 축 각도 계산

start_axis

E6AXIS

IN 매개변수

운동 시작점에서의 로봇 축 각도

err_status

INT

OUT 매개변수

전달된 축 각도(start_axis)에 대해 소프트웨어 제한 스위치에서 검사할지 여부 설정

시작점 start_axis의 사용

다음 상황에서는 시작점 start_axis가 필요합니다:

  • 목표점에 상태 값이 없는 경우. 시스템 변수 $TARGET_STATUS를 통해 목표점이 가져야 할 상태 값을 정의합니다:

상태 설정 설명

$TARGET_STATUS=#SOURCE

목표점은 시작점과 동일한 상태를 가지며, start_axis의 축 각도에서 상태를 계산

$TARGET_STATUS=#BEST

목표점은 로봇이 축 공간에서 시작점부터 목표점까지 가능한 한 짧게 이동해야 하는 상태를 가짐

  • 목표점에 회전 값이 없는 경우. 특정 축에 대해 계산된 허용 가능한 회전 값으로, 목표점이 시작점에 대한 최단 경로를 가질 수 있습니다. 이때 회전이 소프트웨어 제한 스위치를 초과하는 것이 허용됩니다.

  • 목표점이 특이점 근처에 있는 경우. 축 각도를 결정하고 이보다 큰 값을 계산해야 합니다. 시스템 변수 $SINGUL_POS[1…​3]를 통해 목표점이 유지해야 할 각도를 설정합니다:

설정값 설명

$SINGUL_POS[1…​3]=0

축의 각도를 0도로 결정

$SINGUL_POS[1…​3]=1

각도를 시작점부터 목표점까지 변경하지 않고 유지

오류 처리 및 실용 예제

변수 err_status는 계산 결과를 전송하는 데 사용됩니다. 계산이 성공하지 못한 경우, 이 변수는 오류 코드에 해당하는 값을 전송합니다:

설명

-4

미리 설정된 변수 $TOOL이 유효하지 않음

-3

미리 설정된 변수 $BASE가 유효하지 않음

-2

err_status가 아직 유효한 값을 가지지 않음

-1

모든 주요 position 변수 구성 요소가 정의되지 않음, S와 T는 반드시 정의될 필요 없음

0

계산 성공, 오류 없음

1

규정된 축 각도에 대해 소프트웨어 제한 스위치를 초과

2

규정된 직교 좌표계 목표 위치에 도달 가능한 축 각도가 없음

3

직교 좌표계 목표 위치에 도달 가능한 축 각도가 있지만, 규정된 회전으로 인해 소프트웨어 제한 스위치를 초과

KUKA 역기구학 계산 예제:

DEF safe_inverse_calculation()
  DECL E6POS target_pos
  DECL E6AXIS start_joints, result_joints
  DECL INT error_status

  target_pos = {X 100.0, Y 200.0, Z 300.0, A 0.0, B 90.0, C 0.0}
  start_joints = $AXIS_ACT

  result_joints = INVERSE(target_pos, start_joints, error_status)

  SWITCH error_status
    CASE 0
      ; 계산 성공, 운동 실행
      PTP result_joints
    CASE 1, 2, 3
      ; 위치에 도달할 수 없거나 제한 초과
      $MSG_T = {MSG_T: "Position unreachable, error code: " [] error_status []}
    DEFAULT
      ; 기타 오류
      $MSG_T = {MSG_T: "Calculation error: " [] error_status []}
  ENDSWITCH
END

ROKAE

ROKAE 로봇 제어기는 지정된 robtarget 변수에 따라 해당 관절각을 계산하는 CalcJointT 기능을 제공합니다. 이 기능은 입력 위치에 해당하는 관절각과 외부 축 위치를 반환합니다. 관절각의 단위는 도(Degree)이며, 직선 외부 축의 단위는 밀리미터(mm), 회전 외부 축의 단위는 도(Degree)입니다.

이 기능의 정의 포맷은 다음과 같습니다:

CalcJointT(Rob_Target, Tool, Wobj)
매개변수명 데이터 유형 설명

Rob_Target

robtarget

지정된 직교 좌표계 공간 목표점, 점 정의 시 사용된 도구와 작업물이 CalcJointT 명령에서 사용되는 도구/작업물과 일치하는지 주의해야 함, 그렇지 않으면 잘못된 결과가 발생할 수 있음

Tool

tool

관절각 계산 시 사용되는 도구, 사용된 robtarget 정의 시 사용된 도구와 일치해야 함에 주의

Wobj

wobj

작업물 좌표계

UR

즉 Universal Robot의 제어기는 역기구학 변환(도구 공간에서 관절 공간으로)을 계산하는 get_inverse_kin 기능을 제공합니다. qnear가 정의된 경우 qnear에 가장 가까운 해를 반환합니다. 그렇지 않으면 현재 관절 위치에 가장 가까운 해를 반환합니다. tcp가 제공되지 않으면 제어기의 현재 활성 tcp를 사용합니다.

매개변수명 유형 설명

x

tool pose

도구 자세

qnear

list of joint positions

관절 위치 목록(선택 사항)

maxPositionError

numeric

최대 허용 위치 오차(선택 사항)

maxOrientationError

numeric

최대 허용 방향 오차(선택 사항)

tcp

tcp offset pose

tcp 오프셋 자세(선택 사항)

기능 반환값은 관절 위치입니다. 예제 명령은 다음과 같습니다:

get_inverse_kin(p[.1,.2,.2,0,3.14,0], [0.,3.14,1.57,.785,0,0])

예제 매개변수: x = p[.1, .2, .2, 0, 3.14, 0]는 위치가 x=100mm, y=200mm, z=200mm, 회전 벡터가 rx=0도, ry=180도, rz=0도인 자세를 나타냅니다. qnear = [0., 3.14, 1.57, .785, 0, 0]는 해가 관절각 j0=0도, j1=180도, j2=90도, j3=45도, j4=0도, j5=0도에 가까워야 함을 나타냅니다. maxPositionError의 기본값은 1e-10미터, maxOrientationError의 기본값은 1e-10라디안입니다.

PEITIAN

PEITIAN 로봇 제어기도 해당하는 역기구학 계산 기능을 제공합니다. 그 frame 구조체 유형은 위치와 자세 정보의 완전한 설명을 포함합니다.

멤버명 데이터 유형 설명

x

double

변환된 좌표계 원점의 원래 좌표계에서의 좌표 x 성분, 단위 밀리미터

y

double

변환된 좌표계 원점의 원래 좌표계에서의 좌표 y 성분, 단위 밀리미터

z

double

변환된 좌표계 원점의 원래 좌표계에서의 좌표 z 성분, 단위 밀리미터

a

double

변환된 좌표계 자세의 원래 좌표계에서 오일러 각 표현 a 성분, 단위 도

b

double

변환된 좌표계 자세의 원래 좌표계에서 오일러 각 표현 b 성분, 단위 도

c

double

변환된 좌표계 자세의 원래 좌표계에서 오일러 각 표현 c 성분, 단위 도

회전 축 순서에 따라 오일러 각은 총 12가지 다른 오일러 각 표현 방법이 있습니다. 여기서는 ZYX형 오일러 각을 사용하며, 즉 초기 좌표계 자세에서 변환 좌표계 자세로의 변환 순서는 먼저 z축을 중심으로 a각도 회전, 다음 새로운 y축을 중심으로 b각도 회전, 마지막으로 새로운 x축을 중심으로 c각도 회전입니다.

getjoint 기능:

getjoint 기능은 어떤 TCP 자세에 해당하는 로봇 축 위치, 즉 운동학 역해를 구하는 데 사용됩니다. 기능 원형은 다음과 같습니다:

joint getjoint(pose p, tool t, wobj w)
매개변수명 데이터 유형 설명

p

pose

로봇 자세, 섹션 2.4.4 참조

t

tool

지정된 도구, 섹션 2.4.6 참조

w

wobj

기준 작업물 좌표계, 섹션 2.4.7 참조

이 기능은 joint 유형을 반환하며, 해당하는 로봇 축 위치 정보를 반환합니다.

사용 예제:

pose p = {x 763.869, y 207.323, z 1422.841, a 129.538, b 0.480, c 92.084, cfg 0}
print getjoint(p, $FLANGE, $WORLD)

pose 구조체는 위치 및 구성 정보를 포함합니다:

멤버명 데이터 유형 설명

b

double

로봇 도구 자세의 현재 작업물 좌표계에서 오일러 각 표현 b 성분, 단위 도

c

double

로봇 도구 자세의 현재 작업물 좌표계에서 오일러 각 표현 c 성분, 단위 도

cfg

int

로봇 축 구성. 로봇이 TCP를 동일한 위치에 도달시키는 여러 가지 다른 방법이 있을 수 있기 때문에, cfg 매개변수(0-7 값, 가능한 8가지 방법을 나타냄, 여기서 "beta"는 5축 배수 각도를 나타냄)를 통해 그 중 한 가지 방법을 지정하여 고유한 로봇 축 위치 그룹을 결정해야 함

turn

int

cfg와 함께 역해의 축 위치를 결정하는 데 사용. 여기서는 turn의 6번째 비트만 사용하며, bit0은 1축, bit1은 2축을 나타내는 식입니다. turn 값이 -1일 때는 가장 가까운 점에 가장 가까운 해를 자동 선택함을 나타내고; turn 값이 1일 때는 해당 축이 0보다 작은 해를 선택함을 나타내며; turn 값이 0일 때는 해당 축이 0보다 큰 해를 선택함을 나타냅니다. 축의 운동 범위가 360도보다 클 때 이 매개변수가 보조 선택에 사용될 수 있으며, 다른 대부분의 상황에서는 이 값을 설정할 필요가 없습니다

ej1~ej6

double

외부1축~외부6축의 위치, 직선 축 단위는 mm, 회전 축 단위는 도

ELITE

ELITE 로봇 제어기는 역기구학 계산을 위해 get_inv_kinematics 기능을 제공합니다. 이 기능은 목표점 자세와 기준점 관절각에 따라 목표점의 관절각을 계산할 수 있습니다.

역해 기능 get_inv_kinematics:

기능 구문은 다음과 같습니다:

table get_inv_kinematics(table var1, table var2)

매개변수 설명: var1은 pose 유형의 목표점 자세; var2는 joint 유형의 기준점 관절각, 기준점은 목표점에 가까워야 합니다. 작성하지 않으면 현재 점을 기준하는 것으로 간주됩니다. 기능은 역해 결과 공백 또는 table:joint 유형의 목표점 관절각을 반환합니다.

사용 예제:

pose={378.538,212.504,134.055,-2.712,-0.791,2.553}
joint={10.081,-75.007,105.449,-70.694,98.434,89.481,0.000,0.000}
Inv_data=get_inv_kinematics(pose,joint)

pose={x,y,z,rx,ry,rz}, 크기가 6인 배열, pose의 rx,ry,rz는 모두 라디안임에 주의. joint={j1,j2,j3,j4,j5,j6,j7,j8} 크기가 8인 배열.

정해 기능 get_fwd_kinematics:

ELITE는 또한 정기구학 계산을 위해 정해 기능 get_fwd_kinematics를 제공합니다:

table get_fwd_kinematics(table var1)

매개변수 var1은 joint 유형의 목표점 관절각입니다. 기능은 정해 결과 또는 table:pose 유형의 목표점 자세를 반환합니다.

사용 예제:

joint={10.081,-75.007,105.449,-70.694,98.434,89.481,0.000,0.000}
fwd_data=get_fwd_kinematics(joint)

데이터 구조 설명: pose={x,y,z,rx,ry,rz} 크기가 6인 배열; joint={j1,j2,j3,j4,j5,j6,j7,j8} 크기가 6~8인 배열.

자주 발생하는 문제

  1. 왜 CalcJointT가 ERR_ROBLIMIT 오류를 반환하는데, 로봇이 현재 이 위치에 있나요?

    이는 ABB 사용자들이 자주 겪는 문제입니다. 원인은 구성 매개변수 불일치입니다. 구성 [0,2,0,-1]을 사용하여 CalcJointT를 호출하면 오류가 발생하지만, [0,1,0,0] 구성을 사용하면 성공합니다. 해결 방법은 입력된 robtarget 구성이 실제 로봇 구성과 일치하는지 확인하는 것입니다.

  2. Universal Robots에서 "getInverse: Unable to find a solution" 오류가 나타나면 어떻게 처리하나요?

    이는 보통 CB3 프로그램을 e-Series 로봇에 로드할 때 발생하며, 기계적 차이(더 높은 베이스, 확장된 손목 관절 2, 더 긴 도구 플레이트 포함)로 인해 도구 위치와 관절각의 관계에 영향을 줍니다. 해결 방법은 경로 점을 다시 교육하거나, 관절각이 중요한 점(영점 위치 등)에 대해 "Use Joint Angles" 옵션을 선택하는 것입니다.

  3. FANUC의 POS2JOINT 기능은 언제 작동하지 않나요?

    FANUC 사용자는 POS2JOINT가 특이점에 도달할 때 변환할 수 없다고 보고했는데, 이는 직교 좌표계 위치에 대해 무한히 많은 관절 값(J4,J6)의 가능성이 존재하기 때문입니다. 해결책은 호출 전에 특이점에 가까운지 확인하거나 다른 기준 관절 위치를 사용하는 것입니다.

  4. 역기구학 계산으로 인한 안전 문제를 어떻게 예방하나요?

    Universal Robots는 자세가 안전 제한 내에 있는지 확인하는 is_within_safety_limits(pose) 기능을 제공합니다. get_inverse_kin()을 호출하기 전에 이 기능을 사용하면 오류 팝업을 피할 수 있습니다. 다른 제조업체의 경우, 계산 전에 목표 위치가 작업 공간 내에 있는지 확인하는 것을 권장합니다.

  5. 왜 때때로 역기구학 계산이 매우 느린가요?

    가능한 원인으로는 목표 위치가 특이점에 가까움, 관절 제한 검사 복잡성, 또는 기준 관절 위치가 목표에서 너무 멀리 떨어져 있음 등이 있습니다. 기준 관절 위치의 선택을 최적화하고 알려진 특이점 영역을 피하는 것을 권장합니다.