제2부 기구학
2.6 역기구학 II: 수치적 해 — 뉴턴법·감쇠 최소제곱·SQP 기반 IK·QP 미분 IK
2.6.1 이 장에서 배우는 것 / 선수 지식 / 특히 중요한 독자
이 장은 역기구학을 반복 계산으로 푸는 방법을 다룬다. 해석적 해(2.5)가 없는 구조, 여유자유도 로봇, 관절 한계가 있는 문제에서 목표 자세 $T_g$에 대해 관절 변수 $q$를 찾는다. 오차 트위스트와 자코비안으로 세우는 뉴턴·가우스-뉴턴 반복, 특이점 근처에서 단계가 발산하는 이유와 감쇠 최소제곱·레벤버그-마콰트(LM)의 감쇠 규칙, 관절 한계를 다루는 절단·상자 제약 QP 단계, 재시작을 다룬다. 솔버 비교는 2.7, 여유자유도의 영공간 활용은 2.11에서 다룬다.
배우는 것:
- 오차 트위스트와 뉴턴 반복 — $V=\log(T_gT(q)^{-1})$, $\delta q=J^{\dagger}V$, 수렴 차수와 끌림 영역.
- 특이점과 감쇠 — 유사역행렬 단계가 $1/\sigma_{\min}$로 커지는 이유, 감쇠 최소제곱의 단계 상한, LM의 감쇠 규칙(Wampler·Chan·Sugihara).
- 관절 한계 — 절단, 상자 제약 QP 단계, 재시작.
- QP 미분 IK — 한 단계를 부등식 제약이 있는 최소제곱으로 푸는 방식과 우선순위·HQP의 출발점.
- 측정 — UR5와 Franka Research 3에서 성공률·수렴 이력·단계 크기, 라이브러리 구현과의 비교.
선수 지식: 1.1(SVD·유사역행렬), 1.2(최소제곱·감쇠), 1.12(LM), 2.4(지수곱·공간 자코비안의 열). 자코비안은 2.8에서 정식으로 다루며 이 장은 지수곱의 열 $J_i=\mathrm{Ad}_{P_i}S_i$만 사용한다.
특히 중요한 독자: 로봇 팔의 목표 자세 추종과 도달성 점검을 구현하는 엔지니어, 관절 한계·충돌을 포함한 역기구학을 설계하는 소프트웨어 개발자, 수치 최적화로 IK를 다루는 연구자.
출처 방침. 기준 시점은 2026-11-03이다. 직접 읽은 자료: ① Lynch·Park, Modern Robotics(사전 인쇄본 2017-05-03판) 6.2절(뉴턴-랩슨 방법, 끌림 영역, 유사역행렬, 오차 트위스트로 일반화),
modern_robotics의IKinSpace(문서 문자열: 뉴턴-랩슨, 반복 20회 고정), ② Robotics Toolbox for Python 1.5.0IK.py의ik_LM문서 문자열(Chan·Sugihara·Wampler의 감쇠 규칙), ③ Franka Research 3 공식 문서(robot_specifications)의 관절 한계표. 서지는 Crossref 응답으로 확인했다(Sugihara 2011, Chan·Lawrence, Beeson·Ames 2015, Kanoun 외 2011, Escande 외 2014). 읽지 못한 것: 위 논문들의 본문(감쇠 규칙의 식은 RTB의 문서 문자열에서 읽었다). 수치는 모두 이 장의 순수 파이썬 계산이다.
2.6.2 개념 — 초기값에서 가장 가까운 해로
수치 역기구학은 $f(q)=x_d$를 푸는 비선형 방정식의 반복 풀이이다. 현재 값에서 순기구학을 선형화해 한 걸음 가고 오차가 허용치보다 작아질 때까지 반복한다. 해가 여럿이면 초기값에서 "가까운" 해로 수렴한다. Modern Robotics는 각 해가 자기 끌림 영역(basin of attraction)을 가지며 초기값이 어느 영역에도 속하지 않으면 수렴하지 않을 수 있다고 적는다. 반복은 해석적 해와 달리 모든 해를 구하지 못하고 해가 없는 목표에서는 오차가 0이 아닌 값에서 멈춘다.
결론부터 적으면 다음과 같다. 유사역행렬(가우스-뉴턴)은 해 근처에서 이차 수렴하지만 특이점 근처에서 단계가 $1/\sigma_{\min}$로 커지고, 감쇠는 단계를 제한하는 대가로 수렴을 늦춘다. 관절 한계는 반복 중에 절단하는 것보다 한계를 제약으로 둔 QP 단계로 푸는 쪽이 한계 안의 해를 더 많이 찾지만 단독으로는 반 이하의 시행에서만 성공했고, 재시작을 더하면 둘 다 96 % 이상에 이르렀다(이 장의 계산).
2.6.3 원리
2.6.3.1 오차 트위스트와 뉴턴 반복
목표 자세 $T_g$와 현재 자세 $T(q)$의 차이를 공간 좌표의 오차 트위스트로 나타낸다. $T_gT(q)^{-1}=e^{[V]}$를 만족하는 $V\in\mathbb R^6$이다($V=\log(T_gT(q)^{-1})$, 1.7). Modern Robotics는 같은 오차를 물체 좌표에서 $V_b=\log(T_{sb}^{-1}T_{sd})$로 구하고 수반으로 옮긴다($V_s=\mathrm{Ad}_{T_{sb}}V_b$). 관절 변수를 $\delta q$만큼 바꾸면 엔드이펙터는 공간 자코비안 $J_s(q)$로 $J_s\,\delta q$의 트위스트만큼 움직이므로(2.8) 한 단계는 다음과 같다.
$$J_s(q_k)\,\delta q=V_k,\qquad \delta q=J_s^{\dagger}(q_k)\,V_k,\qquad q_{k+1}=q_k+\delta q.$$
여기서 $J^{\dagger}$는 무어-펜로즈 유사역행렬이다. $J$가 정칙이면 $J^{-1}$과 같고, 여유자유도($n>6$)이면 $\delta q$는 $J\delta q=V$를 만족하는 해 가운데 노름이 최소인 것이다. 이 반복은 오차 $\tfrac12\lVert V\rVert^2$에 대한 가우스-뉴턴 법이며 해 근처에서 이차 수렴한다. 이 장의 UR5 예에서 오차의 노름은 $0.83,\ 0.11,\ 5.7\times10^{-3},\ 7.6\times10^{-6},\ 2.0\times10^{-11},\ 3.3\times10^{-16}$으로 줄어, 오차의 자릿수가 대략 두 배씩 늘었다.
지수곱 공식(2.4)의 공간 자코비안은 열 $J_i=\mathrm{Ad}_{P_i}S_i$이며 $P_i=e^{[S_1]q_1}\cdots e^{[S_{i-1}]q_{i-1}}$이다. 이 열은 홈 자세의 스크루 축만으로 만들어지므로 좌표계 규칙이 필요 없다.
2.6.3.2 특이점과 감쇠
특이점에서는 $J$의 특이값 $\sigma_{\min}$이 0에 가까워지고, 오차 $V$에 최소 특이값 방향의 성분이 있으면 유사역행렬 단계의 크기가 $\lVert V_{\min}\rVert/\sigma_{\min}$으로 커진다. 감쇠 최소제곱은 이를 제한한다.
$$\delta q=J^\top\bigl(JJ^\top+\lambda^2I\bigr)^{-1}V=\bigl(J^\top J+\lambda^2I\bigr)^{-1}J^\top V.$$
특이값 $\sigma$인 방향의 이득은 $\sigma/(\sigma^2+\lambda^2)\le1/(2\lambda)$이므로 단계가 한없이 커지지 않는다. 대가는 해 근처에서도 이득이 $1/\sigma$보다 작아 수렴이 선형으로 느려진다는 것이다($\lambda$가 클수록 느리다). 레벤버그-마콰트(LM)는 감쇠 행렬 $W_n$을 오차에 맞춰 조절해 이 대가를 줄인다. Robotics Toolbox for Python의 문서 문자열은 세 가지 규칙을 적는다. Chan은 $W_n=\lambda E\,I$(오차 $E=\tfrac12 V^\top W_e V$에 비례), Sugihara는 $W_n=E\,I+\mathrm{diag}(\hat w)$($\hat w_i$는 링크 길이 제곱의 $0.01\sim1$배 수준), Wampler는 상수이다. 이 장은 $W_n=(E+\lambda)I$(Sugihara 규칙에서 $\hat w=\lambda$)를 사용한다. 오차가 줄면 감쇠도 줄어 해 근처에서 감쇠 편향이 작다.
2.6.3.3 관절 한계
관절 한계 $q_{lo}\le q\le q_{hi}$는 세 가지 방식으로 다룬다.
- 무시. 한계를 보지 않고 풀어 해가 한계 밖이면 실패로 본다. 구현이 가장 단순하다.
- 절단(clamp). 매 반복 뒤에 $q$를 한계로 절단한다. 한계에 걸린 관절은 자코비안의 해당 열이 무효가 되므로 수렴이 느려지거나 정체한다.
- 상자 제약 QP 단계. 한 단계를 다음 최소제곱으로 푼다.
$$\min_{\delta q}\ \tfrac12\lVert J\delta q-V\rVert^2+\tfrac12\,\delta q^\top W_n\,\delta q\quad\text{s.t.}\quad q_{lo}-q\le\delta q\le q_{hi}-q.$$
$J^\top J+W_n$이 양정부호이므로 좌표 하강(각 성분을 한계 안에서 차례로 최소화)이 수렴하며, 이 장은 이 방식을 구현했다(box_qp). 일반적인 부등식 제약(충돌 거리, 속도 한계)을 함께 다루는 QP 기반 미분 IK는 Kanoun 외(2011)가 부등식 과제를 우선순위 틀에 일반화한 연구로, Escande 외(2014)가 계층 QP(HQP)로 정리한 연구로 알려져 있다(두 논문의 본문은 읽지 못했다).
2.6.3.4 재시작과 전역성
반복은 초기값에 의존하므로 실패하면 새 초기값에서 다시 시작하는 재시작이 가장 간단한 보완이다. TRAC-IK(Beeson·Ames 2015, 제목은 "개선된 일반 역기구학 풀이"이다)가 이 방식과 SQP 기반 풀이를 병행하는 라이브러리로 알려져 있으나 이 장은 논문 본문과 코드를 읽지 못했다 (확인 필요); 솔버 비교는 2.7에서 다룬다.
2.6.3.5 수렴 판정과 오차 표현
수렴 판정은 오차 트위스트의 노름 $\lVert V\rVert<\epsilon$로 둔다. 각속도와 선속도의 단위가 다르므로 가중 $W_e$를 두거나 위치·자세 허용치를 따로 두는 것이 일반적이다. 자세 오차를 오일러 각의 차로 정의하면 특이한 각에서 불연속이 생기므로 회전 벡터(로그)가 안전하다(1.4·1.7). 여유자유도 로봇에서는 $J^{\dagger}$의 최소 노름 해에 영공간 성분을 더해 보조 과제를 줄 수 있다(2.11).
2.6.4 알고리즘
- 초기값 $q_0$, 목표 $T_g$, 허용치 $\epsilon$, 최대 반복 수 $N$을 정한다.
- $k=0,\dots,N$에 대해 $V_k=\log(T_gT(q_k)^{-1})$를 구하고 $\lVert V_k\rVert<\epsilon$이면 종료한다.
- 공간 자코비안 $J(q_k)$를 만든다.
- 단계 $\delta q$를 구한다. 유사역행렬: $J^{\dagger}V_k$. 감쇠 최소제곱: $(J^\top J+\lambda^2I)^{-1}J^\top V_k$. LM: 감쇠 $E_k+\lambda$. 한계 QP: 같은 정규방정식을 상자 제약 안에서 푼다.
- $q_{k+1}=q_k+\delta q$. 절단 방식이면 $q_{k+1}$을 한계로 절단한다.
- 실패하면 새 초기값으로 재시작한다(한계 안의 난수).
2.6.5 풀이 예제 — UR5의 수렴·성공률, 특이점 근처의 단계, Franka Research 3의 관절 한계
UR5의 공칭 DH 표(2.3)와 Franka Research 3의 DH 표·관절 한계(2.4)에서 지수곱 입력을 만들고, 이 장의 반복 솔버를 측정한다. 결론부터 적으면 다음과 같다. ① UR5의 같은 목표·시작점에서 유사역행렬은 4회에 $2.0\times10^{-11}$까지 이차로 수렴하고, 감쇠 0.05는 선형(회당 약 $0.05$배)으로 수렴한다. ② 임의의 시작점 200개에서 UR5의 성공은 유사역행렬 175개, LM 162개, 감쇠 0.1 138개(100회 이내, $\lVert V\rVert<10^{-6}$)이다. ③ 손목 특이점 근처($\theta_5=10^{-4}$ rad)에서 최소 특이 방향의 오차 0.01에 대한 유사역행렬의 한 단계는 192 rad이고 감쇠 0.01은 $5.2\times10^{-3}$ rad이다. ④ Franka Research 3의 한계 안 시작점 200개에서 한계를 무시한 LM은 169개가 수렴했지만 한계 안의 해는 50개뿐이며, 절단은 83개, 상자 제약 QP는 95개이고, 재시작 최대 10회를 더하면 각각 195개와 193개이다. ⑤ 라이브러리 구현(Modern Robotics, SciPy, Robotics Toolbox)은 같은 문제에서 162~181개로 같은 범위이다.
구현. jac_space·twist_err·normal_eq·pinv_step·box_qp·ik. 실험과 그림은 스크립트에 있다. 1.1의 svd·solve_lu, 1.7의 log_se3, 2.4의 exp_screw·adjoint·fk_space를 사용한다.
| 항목 | 값 |
|---|---|
| 입력 1 | UR5(UR 문서의 표준 DH 표, 2.3)에서 환산한 지수곱 입력. 수렴 이력: 목표 관절각 $(0.4,-1.2,1.5,-0.6,1.1,0.3)$, 시작점은 각 성분에 $U[-0.5,0.5]$를 더한 값(시드 49) |
| 입력 2 | UR5 성공률: 목표 관절각과 시작점이 $[-\pi,\pi]^6$ 균등인 200쌍(시드 49), 최대 반복 100회, 허용치 $10^{-6}$. 감쇠 0.1, LM의 $\lambda=10^{-3}$ |
| 입력 3 | Franka Research 3(Craig 관례 DH 표와 플랜지, 2.4): 목표 관절각과 시작점이 한계 안의 균등인 200쌍. 한계 $q_{lo}=(-2.9007,-1.8361,-2.9007,-3.0770,-2.8763,0.4398,-3.0508)$, $q_{hi}=(2.9007,1.8361,2.9007,-0.1169,2.8763,4.6216,3.0508)$ rad(공식 문서의 FR3 표) |
| 입력 4 | 특이점: 관절각 $(0.4,-1.2,1.5,-0.6,\theta_5,0.3)$에서 최소 특이값 방향으로 크기 0.01의 오차 트위스트를 주고 한 단계의 노름을 계산, $\theta_5=10^{-4}\sim1$ rad의 17점 |
| 입력 5 | 라이브러리 대조: 입력 2의 200쌍을 모든 구현에 같게 사용, 성공은 이 장의 오차 노름 $<10^{-5}$ |
from math import sqrt
R6 = range(6)
def dot(a, b):
return sum(x * y for x, y in zip(a, b))
def jac_space(S, q):
"""공간 자코비안 J_i = Ad_{P_i} S_i, P_i: 앞 지수곱"""
cols, P = [], eye4()
for s, x in zip(S, q):
cols.append(mv(adjoint(P), s))
P = mul(P, exp_screw(s, x))
return [[c[i] for c in cols] for i in R6]
def twist_err(S, M, q, Tg):
"""오차 트위스트 V = log(Tg T(q)^-1), (w, v) 순서"""
E = mul(Tg, inv_T(fk_space(S, M, q)))
R = [r[:3] for r in E[:3]]
rho, w = log_se3(R, [E[i][3] for i in range(3)])
return list(w) + list(rho)
def normal_eq(J, V, w):
"""(J^T J + w I) d = J^T V 의 A와 b"""
C = list(zip(*J))
A = [[dot(a, b) for b in C] for a in C]
for i in range(len(A)):
A[i][i] += w
return A, [dot(a, V) for a in C]
def pinv_step(J, V, tol=1e-9):
"""d = J^+ V (J^T의 SVD, tol 이하 특이값 제외)"""
U, s, W = svd(transpose(J))
c = [dot([W[i][k] for i in R6], V) for k in R6]
c = [x / y if y > tol * s[0] else 0.0
for x, y in zip(c, s)]
return [dot(u, c) for u in U]
def box_qp(A, b, lo, hi, sweeps=200):
"""min 1/2 d^T A d - b^T d, lo <= d <= hi (좌표 하강)"""
n = len(b)
d = [min(max(0.0, lo[i]), hi[i]) for i in range(n)]
for _ in range(sweeps):
for i in range(n):
g = b[i] - dot(A[i], d) + A[i][i] * d[i]
d[i] = min(max(g / A[i][i], lo[i]), hi[i])
return d
def ik(S, M, Tg, q, mode='lm', lam=1e-3, lim=None,
it=100, tol=1e-6):
"""모드 pinv · dls(w=lam^2) · lm(w=E+lam, E=|V|^2/2)
clamp(lm 후 한계로 절단) · qp(lm 단계를 상자 안에서 풂)"""
hist = []
for k in range(it + 1):
V = twist_err(S, M, q, Tg)
hist.append(sqrt(dot(V, V)))
if hist[-1] < tol:
return q, k, True, hist
if k == it:
break
J = jac_space(S, q)
if mode == 'pinv':
d = pinv_step(J, V)
else:
E = hist[-1] ** 2 / 2
w = lam ** 2 if mode == 'dls' else E + lam
A, b = normal_eq(J, V, w)
if mode == 'qp':
lo = [l - x for l, x in zip(lim[0], q)]
hi = [h - x for h, x in zip(lim[1], q)]
d = box_qp(A, b, lo, hi)
else:
d = solve_lu(A, b)[0]
q = [x + y for x, y in zip(q, d)]
if mode == 'clamp':
q = [min(max(x, l), h)
for x, l, h in zip(q, *lim)]
return q, it, False, hist
① 수렴 이력. 같은 목표·시작점에서 반복 횟수에 따른 오차 트위스트의 노름이다.
유사역행렬은 5회째에 $3.3\times10^{-16}$에 이른다(이차 수렴). 감쇠 0.05는 오차가 매번 약 $0.05$배로 줄어 선형으로 수렴하고 10회째에 $10^{-14}$에 이른다. LM은 오차가 줄면서 감쇠($E+\lambda$)도 줄지만 $E$가 충분히 작아진 뒤에는 $\lambda=10^{-3}$이 지배하므로 회당 약 $0.02$배(선형)로 수렴한다.
② 성공률. 임의의 시작점 200개(UR5)이다. 실패는 끌림 영역 밖의 시작점에서 반복이 정체하거나 최대 반복 수에 이르기 전에 수렴하지 못한 경우이다.
| 방법(UR5, 시작점 임의 200개) | 성공 | 성공한 시행의 반복 수 중앙값 |
|---|---|---|
| 유사역행렬(가우스-뉴턴) | 175 / 200 | 15 |
| 감쇠 최소제곱($\lambda=0.1$) | 138 / 200 | 19 |
| LM(감쇠 $E+10^{-3}$) | 162 / 200 | 16 |
유사역행렬이 가장 많이 성공한 것은 이 시행의 결과이며 특이점 근처 시작점의 비율, 감쇠 값, 반복 한도에 의존한다. 감쇠 0.1은 수렴이 선형이라 100회 안에 $10^{-6}$에 이르지 못한 시행이 많았다.
③ 특이점 근처의 한 단계. 손목 특이점에서 최소 특이 방향의 오차에 대한 한 단계의 노름이다. $\sigma_{\min}$은 $\theta_5=10^{-4}$에서 $5.2\times10^{-5}$, $\theta_5=0.1$에서 $5.1\times10^{-2}$, $\theta_5=1$에서 $0.21$이다.
유사역행렬의 단계는 $0.01/\sigma_{\min}$을 그대로 따른다($\theta_5=10^{-4}$에서 192 rad, $10^{-3}$에서 19.2 rad). 감쇠 0.01의 단계는 $\sigma_{\min}\approx0.01$ 부근에서 최대 $0.5$ rad($0.01/(2\lambda)$)이며 $\theta_5=10^{-4}$에서 $5.2\times10^{-3}$ rad이고, 감쇠 0.1은 $\theta_5=10^{-4}$에서 $5.2\times10^{-5}$ rad이다. $\theta_5\ge0.1$에서는 세 방법이 비슷하다.
④ 관절 한계(Franka Research 3). 한계 안의 시작점·목표 200개이다. 목표는 한계 안의 관절각으로 만들었으므로 한계 안의 해가 적어도 하나 있다.
| 방법(FR3, 한계 안의 시작점 200개) | 수렴 | 한계 안에서 수렴 | 반복 수 중앙값 |
|---|---|---|---|
| LM(한계 무시) | 169 | 50 | 15 |
| LM + 절단 | 83 | 83 | 19 |
| LM 단계를 한계 상자 안의 QP로 | 95 | 95 | 17 |
한계를 무시한 LM은 169개가 수렴했지만 그 가운데 119개(70 %)가 한계 밖의 해이다. 절단은 83개, 상자 제약 QP는 95개를 한계 안에서 찾았다. 재시작을 최대 10회 허용하면 두 방식 모두 96 % 이상이며 QP는 평균 재시작 횟수가 더 적다.
| 방법(재시작 최대 10회) | 한계 안에서 수렴 | 재시작 횟수 평균 |
|---|---|---|
| LM + 절단 | 195 / 200 | 1.64 |
| LM 단계를 한계 상자 안의 QP로 | 193 / 200 | 1.32 |
⑤ 라이브러리 대조(실행 2026-11-03). 같은 UR5 시작점·목표 200쌍에서 modern_robotics 1.1.1의 IKinSpace, SciPy 1.18.1의 least_squares(lm은 MINPACK, trf는 신뢰 영역), Robotics Toolbox for Python 1.5.0의 ik_NR·ik_LM(세 가지 감쇠 규칙; 관절 한계 비활성, 재시작 비활성)을 비교했다. 성공 판정은 모든 구현에서 이 장의 오차 노름 $<10^{-5}$로 통일했다. 스크립트는 robotics/fig-src/2.6-libcheck.py, 출력은 robotics/fig-src/data/2.6-libcheck-output.txt에 있다.
| 방법(UR5, 같은 시작점·목표 200개) | 성공(오차 노름 $<10^{-5}$) | 반복 수 중앙값 |
|---|---|---|
| 이 장 유사역행렬(반복 20회) | 119 | 12 |
| 이 장 유사역행렬(반복 100회) | 178 | 15 |
| 이 장 LM(반복 100회) | 165 | 16 |
IKinSpace(반복 20회 고정) | 116 | — |
least_squares(lm) | 181 | 16 |
least_squares(trf) | 176 | 14 |
ik_NR(유사역행렬) | 180 | 21 |
ik_LM(wampler) | 169 | 15 |
ik_LM(chan) | 177 | 14 |
ik_LM(sugihara) | 162 | 17 |
IKinSpace는 같은 반복 20회 상한에서 이 장의 유사역행렬(119개)과 거의 같은 116개이다(판정 허용치와 종료 조건이 조금 다르다). 반복 상한을 100회로 늘리면 유사역행렬이 178개로 올라간다. 라이브러리 구현은 162~181개이고, 관절 한계가 있는 Franka Research 3에서 least_squares(trf, bounds)는 95개가 수렴해 이 장의 상자 제약 QP(95개)와 같았다. 성공률의 차이는 감쇠 상수·종료 조건·반복 상한 같은 설정에서 나오며 한 구현의 우위를 뜻하지 않는다.
한계. 수치는 합성 목표와 무작위 시작점이다. 성공률은 시작점 분포($[-\pi,\pi]^6$ 균등), 반복 상한(100회), 허용치에 의존한다. 감쇠와 $\lambda$는 조정하지 않았다. 한 로봇 구조(UR5)와 한 여유자유도 구조(FR3)만 측정했으며 충돌·속도 한계·여유자유도의 보조 과제는 다루지 않았다. SQP 기반 풀이(TRAC-IK 등)는 구현하지 않았고 라이브러리도 실행하지 않았다.
견해: 수치 IK는 먼저 LM 또는 감쇠를 둔 가우스-뉴턴으로 구현하고, 관절 한계가 있으면 한계를 제약으로 둔 단계(상자 QP)에 재시작을 더해 구성하는 것을 기본으로 둔다고 본다. 근거는 이 장의 FR3 계산에서 한계를 무시하면 수렴한 해의 70 %가 한계 밖이었고, 절단과 QP는 단독으로는 반 이하였으나 재시작 10회로 96 % 이상에 이르렀다는 점이다. 해가 여럿이고 해 선택 정책이 중요한 응용에서는 이 판단이 달라질 수 있다.
2.6.6 설계 트레이드오프 — 수치 역기구학의 구성
공개 문헌에서 확인되는 방식은 네 가지이다.
- ① 유사역행렬·가우스-뉴턴. 가장 단순하고 해 근처에서 빠르다.
- ② 감쇠 최소제곱·LM. 특이점 근처에서 안정하고 감쇠 규칙에 따라 해 근처의 속도가 달라진다.
- ③ 상자 제약·부등식 QP 단계. 관절 한계·속도 한계를 제약으로 다룬다. QP 풀이가 필요하다(1.13).
- ④ 재시작·SQP. 지역 해를 벗어난다. TRAC-IK이 이 방향의 도구로 알려져 있다(2.7).
| 방식 | 입력 | 장점 | 한계 | 알맞은 경우 |
|---|---|---|---|---|
| ① 유사역행렬 | $J$, $V$ | 단순, 이차 수렴 | 특이점에서 발산, 한계 무시 | 해 근처의 추종 |
| ② 감쇠·LM | $J$, $V$, $\lambda$ | 특이점 안정 | 감쇠 선택, 수렴이 느려짐 | 일반적인 IK |
| ③ QP 단계 | $J$, $V$, 한계 | 한계 안의 해 | QP 비용, 한계로 정체 가능 | 한계가 중요한 로봇 |
| ④ 재시작·SQP | 위 + 난수/목적 | 성공률 | 계산 시간 | 도달성 점검, 초기값 없음 |
견해: 추종 제어(연속 목표 추종)와 도달성 점검(독립 목표, 초기값 없음)은 다른 문제로 보고 전자는 ②·③의 단일 단계를 제어 주기마다 푸는 형태로, 후자는 ④의 재시작을 갖춘 형태로 구분해 구현하는 것을 기본으로 둔다고 본다. 근거는 이 장에서 단일 시작점의 성공률이 70~90 % 이하였고 재시작이 96 % 이상으로 올렸다는 점이다.
2.6.7 응용 축 비교
| 응용 축 | 수치 IK가 맡는 일 | 요구 | 관련 장 |
|---|---|---|---|
| 산업·제조 | 오프라인 프로그래밍의 도달성 점검, 직교 지령의 관절 변환 | 모든 목표에서 성공, 한계 준수 | 2.10, 28.2 |
| 물류·이동 | 이동 매니퓰레이터의 팔 IK(베이스 자유도 포함) | 실시간, 연속성 | 2.15 |
| 도로 주행 | 해당하는 고유 요구 없음 | — | — |
| 서비스 | 가정용 7축 팔의 IK(여유자유도), 충돌 회피 | 안전, 한계 | 2.11, 7.3 |
| 의료·헬스케어 | 도구 끝 추종(RCM 제약 포함) | 정밀도, 연속성 | 32.14 |
| 휴머노이드·범용 | 전신 IK(QP 기반), 다중 과제 | 실시간 QP | 2.11, 7.18 |
| 필드 | 해당하는 고유 요구 없음(이동·휴머노이드 행과 같음) | — | — |
| 국방·안보 | 원리 수준에서 해당하는 고유 요구 없음 | — | — |
이 표는 이 책의 정리이며 장별 요구는 다르다.
2.6.8 관련 규격·프로토콜
| 문서 | 발행 | 무엇을 정하나 | 상세 장 |
|---|---|---|---|
IKinSpace·IKinBody | modern_robotics 1.1.1(GitHub NxRLab/ModernRobotics, MIT) | 뉴턴-랩슨 IK, 반복 20회 고정, 허용치 eomg·ev | 2.7 |
ik_NR·ik_LM·ik_GN | Robotics Toolbox for Python 1.5.0 | 뉴턴·LM(wampler·chan·sugihara)·가우스-뉴턴, 재시작(slimit), 관절 한계 옵션 | 2.7 |
least_squares | SciPy 1.18.1 | lm(MINPACK), trf(신뢰 영역, 상자 제약) | 1.13 |
| TRAC-IK | Beeson·Ames, Humanoids 2015(코드·본문은 확인하지 못했다) | 재시작과 SQP를 결합한 IK 라이브러리로 알려짐 | 2.7 |
| 수학 표기·기호표 | 이 책 | 오차 트위스트, 스크루 표기 | A.2 |
2.6.9 관련 규제·인증 요구와의 연결
수치 IK의 방식 자체를 규정하는 법령·인증 요건은 확인하지 못했다. 안전 기능이 의존하는 관절 한계·속도 한계는 이 장의 한계 제약과 같은 입력이다(27.10). 이 장은 규정의 조항을 확인하지 않았다 (확인 필요).
2.6.10 한계·유의점·미해결
- 지역 해. 해는 초기값에 의존하며 목표에 도달 가능한 해가 있어도 실패할 수 있다.
- 허용치와 가중. 위치·자세의 가중과 허용치는 응용이 정한다. 이 장은 6차원 트위스트의 노름 하나를 사용했다.
- 특이점. 감쇠는 특이점에서 단계를 제한하지만 해 근처의 수렴을 늦춘다.
- 관절 한계. 절단은 정체할 수 있다. 상자 제약 QP도 단독으로는 반 이하였다.
- 여유자유도. 보조 과제와 영공간 활용은 2.11에서 다룬다.
- 충돌·속도 한계. 이 장은 다루지 않았다(1.13·11.1 이후).
2.6.11 체크포인트·연구 질문·출처
체크포인트:
- 오차 트위스트를 공간 좌표와 물체 좌표로 구할 때 두 단계가 같음을 $V_s=\mathrm{Ad}_{T_{sb}}V_b$로 설명하라.
- 감쇠 최소제곱의 단계 이득이 $\sigma/(\sigma^2+\lambda^2)$이며 최댓값이 $1/(2\lambda)$인 이유를 보이라.
- LM에서 감쇠를 오차에 비례시키면 해 근처의 수렴 속도는 어떻게 되는가? 상수 감쇠와 비교하라.
- 상자 제약 QP 단계를 좌표 하강으로 푸는 이유와 수렴 조건($A\succ0$)을 설명하라.
연구 질문:
- 관절 한계와 충돌 제약을 함께 다루는 IK의 재시작 전략(초기값 분포)은 무엇이 최적인가?
- 감쇠 상수를 자동으로 정하는 방법(오차·특이값 기반)의 성공률 이득은 얼마인가?
1차 출처(조회 2026-11-03).
- K. M. Lynch, F. C. Park, Modern Robotics, Cambridge University Press, 2017(ISBN 9781107156302). 사전 인쇄본 2017-05-03판의 6.2절을 읽었다.
- T. Sugihara, "Solvability-unconcerned inverse kinematics by the Levenberg–Marquardt method," IEEE Transactions on Robotics 27(5), 984–991, 2011, doi:10.1109/tro.2011.2148230 — 서지만 확인.
- T. F. Chan, R. V. Lawrence, "General inverse kinematics with the error damped pseudoinverse," Proc. IEEE ICRA, 834–839, doi:10.1109/robot.1988.12164(Crossref에 등록된 연도는 1988) — 서지만 확인.
- P. Beeson, B. Ames, "TRAC-IK: An open-source library for improved solving of generic inverse kinematics," Proc. IEEE-RAS Humanoids, 928–935, 2015, doi:10.1109/humanoids.2015.7363472 — 서지만 확인.
- A. Kanoun, F. Lamiraux, P.-B. Wieber, "Kinematic control of redundant manipulators: generalizing the task-priority framework to inequality task," IEEE Transactions on Robotics 27(4), 785–792, 2011, doi:10.1109/tro.2011.2142450 — 서지만 확인.
- A. Escande, N. Mansard, P.-B. Wieber, "Hierarchical quadratic programming: fast online humanoid-robot motion generation," IJRR 33(7), 1006–1028, 2014, doi:10.1177/0278364914521306 — 서지만 확인.
- Robotics Toolbox for Python 1.5.0 소스(
IK.py),modern_robotics1.1.1, SciPy 1.18.1, Franka Research 3 공식 문서(robot_specifications).
다음 장. 2.7은 기구학 소프트웨어와 IK 솔버(KDL·TRAC-IK·IKFast·mink·cuRobo)를 성공률·속도·충돌 회피 측면에서 비교한다. 이 장의 반복 솔버가 그 라이브러리들의 공통 기반이다.