제2부 기구학
2.11 여유자유도: 영공간·과제 우선순위·관절 한계와 장애물 회피
2.11.1 이 장에서 배우는 것 / 선수 지식 / 특히 중요한 독자
이 장은 관절 수가 과제 차원보다 많은 로봇, 곧 여유자유도(redundancy) 로봇의 속도 수준 역기구학을 다룬다. 엔드이펙터를 같은 속도로 움직이는 관절 속도가 무수히 많으므로 하나를 고르는 기준이 필요하고, 남는 자유도로 보조 과제(관절 한계 회피·조작성 증가·장애물 회피)를 수행할 수 있다. 이 장은 일반해와 영공간 사영, 영공간 속도가 만드는 자기 운동과 그 적분 오차, 기울기 사영(보조 목적 함수의 기울기를 영공간에 사영하는 방법), 엄격한 과제 우선순위와 알고리즘 특이점을 정리하고, Franka Research 3(7R)와 평면 3R에서 계산으로 확인한다. 가속도·토크 수준의 여유자유도 제어는 12.6·12.7, 질량 가중 의사역행렬의 동역학적 의미는 3.4에서 다룬다.
배우는 것:
- 일반해와 영공간 — $\dot q=J^\dagger V+Nz$, $N=I-J^\dagger J$. 최소 노름 해와 가중 의사역행렬.
- 자기 운동 — 엔드이펙터를 고정한 채 움직이는 관절 운동과 그 수치 적분의 오차.
- 기울기 사영 — 관절 범위 중심, 조작성, 장애물 거리의 기울기를 영공간에 사영하는 방법과 닫힌 경로에서의 표류.
- 과제 우선순위 — $\dot q=J_1^\dagger V_1+(J_2N_1)^\dagger(V_2-J_2J_1^\dagger V_1)$, 알고리즘 특이점, 감쇠.
- 측정 — FR3의 영공간 성질 200개 형상, 원 경로 6바퀴의 관절 표류·한계 여유·조작성·장애물 거리, 평면 3R의 우선순위 실험, numpy·SciPy·Robotics Toolbox와의 대조.
선수 지식: 1.1(의사역행렬·SVD), 2.6(감쇠 최소제곱), 2.8(자코비안), 2.9(조작성·특이점).
특히 중요한 독자: 7자유도 팔과 이동 매니퓰레이터의 역기구학·속도 제어를 구현하는 엔지니어, 관절 한계·충돌을 영공간으로 처리하려는 소프트웨어 개발자, 계층 과제 제어(HQP·WBC)를 배우는 연구자.
출처 방침. 기준 시점은 2026-11-03이다. 직접 읽은 자료: ① Lynch·Park, Modern Robotics(사전 인쇄본 2017-05-03판) 5.1절(여유자유도 로봇과 내부 운동), 5.2절(여유자유도 로봇의 정적 평형), 6.2절(속도 수준 역기구학, 최소 노름 해, 질량 가중 의사역행렬), 6.4절(닫힌 경로와 여유자유도), 6.7절(참고문헌 안내), ② Robotics Toolbox for Python 1.5.0의
DH.Panda모델(DH 표, 공구 변환). 서지(Liégeois 1977, Klein·Huang 1983, Maciejewski·Klein 1985, Nakamura 외 1987, Siciliano·Slotine 1991, Chiaverini 1997, Chan·Dubey 1995, Baerlocher·Boulic 2004)는 Crossref 응답으로 확인했고 Shamir·Yomdin 1988과 Chiaverini 외의 『Redundant robots』는 Modern Robotics의 참고문헌 목록에서만 확인했다. 읽지 못한 것: 위 논문들의 본문. 알고리즘의 변형(가변 이득, 감쇠 규칙)은 이 장이 정한 것이며 원 논문의 식과 같은지 확인하지 않았다(확인 필요). 수치는 모두 이 장의 순수 파이썬 계산이다.
2.11.2 개념 — 같은 엔드이펙터 속도를 내는 무수한 관절 속도
결론부터 적으면 다음과 같다. 관절이 $n$개이고 과제 차원이 $m$이며 $J$의 계수가 $m$이면 $\dot q$의 해 집합은 영공간과 평행한 $(n-m)$차원 아핀 공간이다. Modern Robotics는 어깨에서 손바닥까지 7관절의 팔이 손바닥을 탁자 위에 고정해도 팔꿈치의 위치라는 내부 자유도 하나가 남는 예를 든다. 의사역행렬 $J^\dagger V$는 이 집합에서 노름이 가장 작은 점이고, 영공간 성분 $Nz$는 엔드이펙터 속도를 바꾸지 않고 $z$로 자유롭게 정할 수 있다. 영공간에 보조 과제를 두면 같은 엔드이펙터 운동을 하면서 관절 한계에서 멀어지고 장애물을 피하며 조작성을 키울 수 있다.
이 장의 계산 결과를 미리 적으면 다음과 같다. ① 영공간 사영 $N$은 $JN=0$·$N^2=N$·$N^\top=N$·$\mathrm{tr}\,N=n-m$을 $10^{-13}$ 수준에서 만족한다. ② 의사역행렬만 사용한 닫힌 경로(원 6바퀴)는 매 바퀴 관절이 $0.08$ rad 안팎으로 어긋난다(Modern Robotics 6.4절의 지적과 같다). ③ 관절 범위 중심의 기울기 사영은 바퀴마다 표류를 약 $1/40$로 줄여 6바퀴째에 $3\times10^{-9}$ rad에 이르고, 장애물 회피 항은 가장 가까운 점의 거리를 $66$ mm에서 $249$ mm까지 키우지만 관절 여유를 $14.7$ %에서 $8.9$ %로 줄인다. ④ 엄격한 우선순위는 위치 오차 $0.17$ mm를 지키고 방위각 오차가 닫힌 식의 최소값 $36.3^\circ$에 이른다.
2.11.3 원리
2.11.3.1 일반해와 영공간 사영
과제 속도 $V\in\mathbb R^m$을 만드는 관절 속도의 일반해는 다음과 같다.
$$\dot q=J^\dagger V+(I-J^\dagger J)\,z,\qquad J^\dagger=J^\top(JJ^\top)^{-1},\qquad N=I-J^\dagger J.$$
$J$의 계수가 $m$이면 $N$은 영공간으로의 직교 사영이다($JN=0$, $N^2=N$, $N^\top=N$, $\mathrm{tr}\,N=n-m$). $J^\dagger V$와 $Nz$는 직교하므로 $\lVert\dot q\rVert^2=\lVert J^\dagger V\rVert^2+\lVert Nz\rVert^2$이고, 최소 노름 해는 $z=0$이다(Modern Robotics 6.2절). 관절마다 비용을 다르게 두려면 가중 의사역행렬 $W^{-1}J^\top(JW^{-1}J^\top)^{-1}$이 $\dot q^\top W\dot q$를 최소화한다. Modern Robotics는 $W$로 질량 행렬 $M(q)$를 사용하면 운동에너지를 최소화하는 해가 된다고 적는다. 특이점 근처에서는 $JJ^\top$의 조건수가 나빠져 $J^\dagger$를 감쇠 형태(2.6·2.9)로 바꾸며 이때 $N$은 엄밀한 사영이 아니다.
2.11.3.2 자기 운동과 적분 오차
엔드이펙터를 고정한 채($V=0$) 관절이 움직이는 운동을 자기 운동(self-motion)이라 한다. 단위 영공간 방향 $n(q)$를 따라 $\dot q=n(q)$로 적분하면 엔드이펙터는 1차에서 움직이지 않는다. 그러나 $J(q)$가 변하므로 오일러 적분의 한 걸음 $\Delta s$마다 2차 오차가 생기고 호 길이 $s$를 걸어가면 엔드이펙터가 $O(s\,\Delta s)$ 이동한다. 실제 제어에서는 엔드이펙터 오차 되먹임($V=V_d+Ke$)이 이 오차를 지속적으로 되돌리므로 문제가 되지 않는다. 영공간 방향은 부호가 정해지지 않으므로(길이 1의 벡터 $\pm n$) 연속성을 위해 이전 방향과 내적이 양인 쪽을 고른다.
2.11.3.3 기울기 사영과 닫힌 경로
보조 목적 함수 $H(q)$를 줄이거나 키우는 영공간 속도를 $z=\pm k\,\nabla H(q)$로 둔다(Liégeois 1977이 이 구조를 제안한 것으로 알려져 있고 Klein·Huang 1983이 의사역행렬 제어를 정리했다. 본문은 읽지 못했다). 이 장이 구현한 세 가지는 다음과 같다.
- 관절 범위 중심. $H=\tfrac1{2n}\sum_i\bigl((q_i-\bar q_i)/\Delta_i\bigr)^2$을 줄인다. $z_i=-k\,(q_i-\bar q_i)/\Delta_i^2$.
- 조작성. $H=w(q)=\sqrt{\det JJ^\top}$를 키운다. $z=k\nabla w$, 기울기는 중심 차분(2.9의 $w$).
- 점 장애물 회피. 장애물과 가장 가까운 링크 위의 점 $p_c$의 거리 $d$가 영향 거리 $d_0$ 안이면 $v_{\mathrm{rep}}=k_o\,\dfrac{d_0-d}{d_0}\,\dfrac{p_c-p_o}{d}$를 만들고 $z=J_c^\dagger v_{\mathrm{rep}}$로 둔다($J_c$는 그 점의 $3\times n$ 자코비안). Maciejewski·Klein(1985)이 장애물 회피를 여유자유도로 푼 연구로 알려져 있다(본문은 읽지 못했다).
닫힌 경로(엔드이펙터가 같은 자세로 돌아오는 경로)에서는 최소 노름 해를 되풀이해도 관절 변수가 같은 값으로 돌아오지 않는다. Modern Robotics 6.4절은 여유자유도 로봇의 수치 역기구학이 닫힌 경로를 관절공간의 닫힌 경로로 만들지 않는 경향이 있고 필요하면 추가 조건이 필요하다고 적으며, 반복성(cyclicity) 조건은 Shamir·Yomdin(1988)이 다룬 것으로 안내한다. 퍼텐셜의 기울기를 영공간에 더하면 바퀴당 관절 이동량이 0으로 수렴하는(관절 변수가 닫힌 궤적으로 수렴하는) 모습이 이 장의 계산에서 나타났고 증명은 하지 않았다.
2.11.3.4 과제 우선순위
과제 둘이 있고 첫째가 우선이면 둘째는 첫째의 영공간에서만 수행한다.
$$\dot q=J_1^\dagger V_1+\bigl(J_2N_1\bigr)^\dagger\bigl(V_2-J_2J_1^\dagger V_1\bigr),\qquad N_1=I-J_1^\dagger J_1.$$
둘째 항이 $N_1$ 안에 있으므로 $J_1\dot q=V_1$이 유지되고(첫째 과제가 가능하면) 둘째 과제는 첫째에 영향을 주지 못한다. Nakamura 외(1987)가 이 구조를 제안했고 Siciliano·Slotine(1991)이 여러 과제로 일반화했으며 Baerlocher·Boulic(2004)이 임의 개수의 엄격한 우선순위를 다룬 것으로 알려져 있다(세 논문의 본문은 읽지 못했다). 한계는 알고리즘 특이점이다. $J_1$과 $J_2$가 각각 정칙이어도 $J_2N_1$이 계수를 잃으면 둘째 과제가 해당 방향에서 수행되지 않고, 근처에서는 $(J_2N_1)^\dagger$가 커져 속도가 발산한다. Chiaverini(1997)가 이를 줄이는 감쇠 기법을 제안한 것으로 알려져 있다(본문은 읽지 못했다). 이 장은 주 과제와 보조 과제에 서로 다른 감쇠($\lambda$, $\lambda_2$)를 둔다. 임의의 부등식 과제와 계층은 계층 QP로 푼다(12.7).
2.11.3.5 관절 한계와 가중
관절 한계를 영공간으로 처리하는 방식은 두 가지이다. 기울기 사영은 한계에서 멀어지도록 $z$를 두며 한계에 걸린 관절의 비용을 키워 가중 의사역행렬로 해당 관절의 속도를 줄이는 방식(Chan·Dubey 1995가 가중 최소 노름 해로 한계를 피한 연구로 알려져 있다. 본문은 읽지 못했다)도 있다. 부등식 제약을 직접 다루는 QP 단계는 2.6의 상자 제약 단계와 같은 구조이다. 이 장은 기울기 사영만 구현했고 한계에 도달한 뒤의 절단·QP는 다루지 않았다.
2.11.3.6 여유자유도와 특이점
여유자유도 로봇은 일부 특이점(계수가 $m$ 미만이 되는 형상)을 영공간 운동으로 피할 수 있다. $w(q)$의 기울기를 영공간에 사영하면 특이점에서 멀어지는 방향이다(2.9). 단 모든 특이점이 자기 운동으로 피해지는 것은 아니며 작업공간 경계의 특이점은 피할 수 없다.
2.11.4 알고리즘
영공간 속도(J, V, z, λ):
J⁺ ← Jᵀ (J Jᵀ + λ² I)⁻¹
N ← I − J⁺ J
qd ← J⁺ V + N z
기울기 사영: z ← − k_c · (q − q_중심)/Δ² (관절 범위 중심)
z ← k_w · ∇w(q) (조작성)
z ← J_c⁺ · k_o (d0 − d)/d0 · (p_c − p_o)/d (장애물, d < d0)
엄격한 우선순위(J1, V1, J2, V2; λ, λ2):
q1 ← J1⁺ V1, N1 ← I − J1⁺ J1
qd ← q1 + (J2 N1)⁺ (V2 − J2 q1)
닫힌 루프: V ← V_d + K · log(T_d T⁻¹), q ← q + qd · dt
각 단계의 비용은 $6\times n$ 의사역행렬(정규방정식 $6\times6$)이다. 조작성의 기울기는 $2n$번의 $w$ 계산이 필요하다(이 장은 중심 차분).
2.11.5 풀이 예제 — FR3의 영공간, 자기 운동, 원 경로의 표류, 평면 3R의 우선순위
결론부터 적으면 다음과 같다. ① FR3(7R) 임의 형상 200개에서 $\sigma_{\min}(J)\ge0.02$인 179개는 영공간 사영의 성질이 $2.5\times10^{-12}$ 안에서 맞고, $\sigma_{\min}<0.02$인 21개는 정규방정식의 조건수 때문에 오차가 $1.6\times10^{-8}$까지 커진다. ② 평면 3R의 자기 운동을 호 길이 1 rad 적분하면 꼭짓점이 걸음 $\Delta s$에 비례해($\Delta s=0.1$에서 $8.6$ mm, $0.001$에서 $0.084$ mm) 움직인다. ③ FR3의 원 경로(반지름 $0.12$ m, 4 s) 6바퀴에서 의사역행렬만 사용하면 바퀴당 관절 이동량이 $0.078\to0.086$ rad로 줄지 않고, 관절 중심 항은 $0.239,\ 0.006,\ 0.0002$ rad로 수렴하며 모든 방식의 최대 위치 오차가 $0.18\sim0.19$ mm로 같다. ④ 평면 3R에서 위치 우선 방식은 위치 오차 $0.17$ mm를 지키고 방위각 오차 $36.27^\circ$는 닫힌 식의 최소값 $36.31^\circ$와 같으며 단일 쌓기 방식은 위치 오차 $212.6$ mm를 내고 최대 관절 속도가 $440$ rad/s에 이른다. ⑤ numpy·SciPy·Robotics Toolbox와 $3.2\times10^{-12}$ 안에서 같다.
구현. jpinv·null_proj·apply·redundant·priority·centering. 자기 운동·원 경로 시뮬레이션·장애물 거리·조작성 기울기·평면 3R 우선순위 시뮬레이션과 그림은 스크립트에 있다. 1.1의 matmul·transpose·solve_lu·svd, 1.7의 log_se3, 2.3의 dh_mod, 2.4의 fk_space·inv_T, 2.6의 FR3 지수곱 입력·관절 한계, 2.8의 jac_space, 2.9의 det를 사용한다.
| 항목 | 값 |
|---|---|
| 입력 1 | FR3(2.4의 Craig 관례 DH 표와 플랜지, 지수곱 입력). 관절 한계 $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. 영공간 성질: 한계 안 균등 형상 200개(시드 54), $V,z\in U[-1,1]$ |
| 입력 2 | 평면 3R 자기 운동: $l_1=l_2=l_3=0.4$ m, 시작 $q=(0.5,0.9,-1.2)$ rad, 호 길이 1 rad를 걸음 $\Delta s=0.1,\dots,0.001$로 오일러 적분 |
| 입력 3 | 원 경로: 시작 $q_0=(0,-\pi/4,0,-3\pi/4,0,\pi/2,\pi/4)$, 엔드이펙터 자세 고정, 위치는 $y$-$z$ 평면의 반지름 $0.12$ m 원(주기 4 s, 6바퀴), 시간 간격 $0.01$ s, 되먹임 이득 $K=10$/s, 의사역행렬 감쇠 $10^{-6}$. 관절 중심 이득 $k_c=20$, 조작성 이득 $k_w=10$, 장애물: 팔꿈치(관절 4 좌표계 원점)의 시작 위치에서 $x$ 방향 $0.08$ m인 점 $(-0.0851,0,0.6148)$ m, 영향 거리 $d_0=0.15$ m, 이득 $k_o=3$. 장애물 거리는 관절 4·5·6 좌표계 원점 세 점 가운데 가장 가까운 점 |
| 입력 4 | 평면 3R 우선순위: $l=0.4$ m, 꼭짓점이 $x$축 위를 $0.7\to1.15$ m(2 s)로 이동 후 1 s 정지, 방위각 $\phi=q_1+q_2+q_3=60^\circ$ 요구, 시간 간격 $0.001$ s, $K=10$/s, 위치 지령 속도 상한 3 m/s·방위각 지령 속도 상한 1 rad/s, 주 과제 감쇠 $\lambda\in\{0.02,0.002\}$, 보조 과제 감쇠 $\lambda_2=0.1$ |
| 입력 5 | 라이브러리 대조: FR3 임의 형상 200개($\sigma_{\min}\ge0.02$인 형상만, 시드 541) |
from math import sqrt
def jpinv(J, lam=0.0):
"""J (m x n 행 목록): J^T (J J^T + lam^2 I)^-1"""
m = len(J)
A = matmul(J, transpose(J))
for i in range(m):
A[i][i] += lam * lam
X = [solve_lu(A, [float(i == k) for i in range(m)])[0]
for k in range(m)]
return matmul(transpose(J), transpose(X))
def null_proj(J, Jp):
"""영공간 사영 N = I - J^+ J"""
n, P = len(J[0]), matmul(Jp, J)
return [[float(i == j) - P[i][j] for j in range(n)]
for i in range(n)]
def apply(A, v):
return [sum(a * x for a, x in zip(r, v)) for r in A]
def redundant(J, V, z, lam=0.0):
"""기울기 사영: qd = J^+ V + N z"""
Jp = jpinv(J, lam)
N = null_proj(J, Jp)
return [a + b for a, b in zip(apply(Jp, V), apply(N, z))]
def priority(J1, V1, J2, V2, lam=0.0, lam2=0.0):
"""우선순위: qd = J1^+ V1 + (J2 N1)^+ (V2 - J2 qd1)"""
P1 = jpinv(J1, lam)
N1 = null_proj(J1, P1)
q1 = apply(P1, V1)
r = [a - b for a, b in zip(V2, apply(J2, q1))]
P2 = jpinv(matmul(J2, N1), lam2)
return [a + b for a, b in zip(q1, apply(P2, r))]
def centering(q, lo, hi):
"""범위 중심 쪽 영공간 속도 -grad H"""
return [-(x - (a + b) / 2) / (b - a) ** 2
for x, a, b in zip(q, lo, hi)]
① 영공간 사영의 성질. FR3의 임의 형상 200개에서 사영 $N$과 일반해의 성질을 확인했다. $\sigma_{\min}(J)\ge0.02$인 형상(179개)과 그 미만(21개)을 나누었다.
| 영공간 사영의 성질(FR3, 임의 형상 200개) | 최대 오차, $\sigma_{\min}\ge0.02$ (179개) | 최대 오차, $\sigma_{\min}<0.02$ (21개) |
|---|---|---|
| $\lVert JN\rVert_{\max}$ | 9.6e-14 | 1.8e-11 |
| $\lVert N^2-N\rVert_{\max}$ | 5.4e-14 | 1.1e-11 |
| $\lVert N-N^\top\rVert_{\max}$ | 9.6e-14 | 2.0e-11 |
| $\lvert\mathrm{tr}\,N-1\rvert$ | 1.9e-13 | 1.2e-11 |
| $\lVert J\dot q-V\rVert$, $\dot q=J^\dagger V+Nz$ | 1.5e-13 | 6.5e-11 |
| $\lvert\lVert\dot q\rVert^2-\lVert J^\dagger V\rVert^2-\lVert Nz\rVert^2\rvert$ | 2.5e-12 | 1.6e-08 |
앞의 179개 형상에서는 모든 성질이 $2.5\times10^{-12}$ 안에서 맞고 $\mathrm{tr}\,N=n-m=1$이다. 뒤의 21개는 정규방정식 $JJ^\top$의 조건수가 $\sigma_{\min}^{-2}$에 비례해 오차가 $10^{-11}\sim10^{-8}$로 커진다. 특이점 근처에서는 SVD 기반 의사역행렬(1.1)이 정확하다.
② 자기 운동의 적분 오차. 평면 3R($m=2$, $n=3$)에서 꼭짓점을 고정하고 단위 영공간 방향으로 호 길이 1 rad를 적분했다.
| 자기 운동 호 길이 1 rad(평면 3R, 꼭짓점 고정, 오일러) | 꼭짓점 이동량 (m) |
|---|---|
| 걸음 $\Delta s=0.1$ rad | 8.58e-03 |
| 걸음 $\Delta s=0.03$ rad | 2.51e-03 |
| 걸음 $\Delta s=0.01$ rad | 8.39e-04 |
| 걸음 $\Delta s=0.003$ rad | 2.51e-04 |
| 걸음 $\Delta s=0.001$ rad | 8.37e-05 |
꼭짓점 이동량이 걸음 $\Delta s$에 비례한다(비 $0.084\sim0.086$). 오일러 적분의 1차 오차이며 걸음을 $1/100$로 줄이면 오차도 $1/100$로 줄지만 0이 되지 않는다. 닫힌 루프 되먹임이 필요한 이유이다.
③ 원 경로의 표류와 보조 과제. FR3가 원 경로를 6바퀴 추종하는 닫힌 루프 시뮬레이션이다. 표는 바퀴마다 시작·끝 관절 변수의 거리(바퀴당 관절 이동량), 마지막 바퀴의 최소 관절 여유(관절 구간 대비 한계까지 남은 비율)·최소 조작성 $w$, 전 구간의 최대 위치 오차, 장애물 거리이다.
| 제어 방식(FR3, 원 6바퀴) | 바퀴당 관절 이동량 (rad), 1~6바퀴 | 마지막 바퀴 최소 관절 여유 | 마지막 바퀴 최소 $w$ | 최대 위치 오차 (mm) | 최소 장애물 거리 (mm), 전 구간 · 마지막 바퀴 |
|---|---|---|---|---|---|
| 유사역행렬만 | 0.078, 0.078, 0.079, 0.081, 0.083, 0.086 | 15.1 % | 0.0591 | 0.18 | 39 · 75 |
| + 관절 중심 | 0.239, 0.006, 1.6e-04, 4.2e-06, 1.1e-07, 2.8e-09 | 14.7 % | 0.0597 | 0.18 | 33 · 34 |
| + 조작성 | 0.073, 0.054, 0.039, 0.028, 0.019, 0.013 | 14.7 % | 0.0597 | 0.18 | 33 · 33 |
| + 장애물 회피 | 1.107, 0.138, 0.149, 0.158, 0.167, 0.173 | 8.9 % | 0.0642 | 0.19 | 66 · 249 |
의사역행렬만 사용하면 바퀴당 관절 이동량이 $0.078$, $0.078$, $0.079$, $0.081$, $0.083$, $0.086$ rad로 줄지 않고 오히려 늘어난다. 엔드이펙터는 원을 정확히 도는데($0.18$ mm) 관절은 같은 값으로 돌아오지 않는다(Modern Robotics 6.4절). 관절 중심 항은 첫 바퀴에 $0.239$ rad를 움직여 중심으로 이동한 뒤 $6.2\times10^{-3}$, $1.6\times10^{-4}$, $4.2\times10^{-6}$, $1.1\times10^{-7}$, $2.8\times10^{-9}$ rad로 바퀴마다 약 $1/40$로 수렴한다. 조작성 기울기 항은 $0.073\to0.013$ rad로 천천히 줄어든다. 네 방식 모두 최대 위치 오차가 $0.18\sim0.19$ mm이므로 영공간 항이 엔드이펙터 추종을 해치지 않는다. 마지막 바퀴의 최소 관절 여유와 최소 $w$는 관절 중심·조작성에서 $14.7$ %·$0.0597$, 유사역행렬만에서 $15.1$ %·$0.0591$로 이 과제에서는 차이가 작다(과제 자체가 한계에서 먼 영역이다). 장애물 회피 항은 가장 가까운 점의 거리를 전 구간 최소 $39$ mm(유사역행렬만)에서 $66$ mm로, 마지막 바퀴 최소 $75$ mm에서 $249$ mm로 키우지만 첫 바퀴에 $1.107$ rad를 움직이고 이후에도 $0.14\sim0.17$ rad의 표류가 남으며 마지막 바퀴의 최소 관절 여유가 $8.9$ %로 줄어든다(팔꿈치가 장애물에서 멀어지는 자세가 한계에 더 가깝다). 관절 중심 항과 조작성 항에서 장애물 거리가 $33$ mm로 오히려 가까워진 것은 보조 과제가 장애물을 모르기 때문이다.
④ 과제 우선순위. 평면 3R의 꼭짓점을 $x=0.7\to1.15$ m로 옮기면서 방위각 $60^\circ$를 요구하면 $x$가 커질수록 방위각을 지킬 수 없게 된다. 손목점이 어깨에서 $l_1+l_2=0.8$ m 안이어야 하므로 $\cos\phi\ge(x^2-0.48)/(0.8x)$이며 $\phi=60^\circ$는 $x\le r^*=(0.4+\sqrt{2.08})/2=0.921$ m에서만 가능하다. 위치를 지킬 때 가능한 최소 방위각 오차는 $60^\circ-\arccos\bigl((x^2-0.48)/(0.8x)\bigr)$이다.
| 평면 3R: 위치 우선, 방위각 $60^\circ$ 요구, 꼭짓점 $x=0.7\to1.15$ m | 최종 위치 오차 (mm) | 최종 방위각 오차 ($^\circ$) | 최대 관절 속도 (rad/s) | 방위각 오차 $>1^\circ$ 시작 $x$ (m) |
|---|---|---|---|---|
| 쌓기(3x3), $\lambda=0.02$ | 183.41 | 4.07 | 4.5 | 0.977 |
| 쌓기(3x3), $\lambda=0.002$ | 212.62 | 0.24 | 440.5 | 해당 없음 |
| 엄격한 우선순위, $\lambda=0.02$ | 28.96 | 29.82 | 2.9 | 0.928 |
| 엄격한 우선순위, $\lambda=0.002$ | 0.17 | 36.27 | 2.9 | 0.923 |
| 닫힌 식(위치를 지킬 때 가능한 최소 방위각 오차와 시작 위치) | 0 | 36.31 | 0.921 |
엄격한 우선순위($\lambda=0.002$)는 위치 오차를 $0.17$ mm로 지키고 방위각 오차는 $x=0.923$ m에서 $1^\circ$를 넘기 시작해 최종 $36.27^\circ$에 이른다. 닫힌 식의 최소값($36.31^\circ$)과 시작 위치($0.921$ m)와 같고 그림 3의 곡선이 닫힌 식과 겹친다. 쌓기(위치·방위각을 한 행렬에 같은 가중으로 둠)는 방위각 오차가 $0.24^\circ$로 작지만 위치 오차가 $212.6$ mm이며 최대 관절 속도가 $440.5$ rad/s로 폭주한다. 감쇠를 $0.02$로 크게 하면 우선순위 방식도 위치 오차가 $28.96$ mm로 늘고(방위각 오차 $29.82^\circ$가 줄어든 만큼) 쌓기는 위치 오차 $183.4$ mm·방위각 오차 $4.07^\circ$가 된다. 감쇠 $\lambda$가 크면 엄격한 우선순위가 부드럽게 무너진다.
⑤ 라이브러리 대조(실행 2026-11-03). 같은 FR3 임의 형상에서 numpy의 pinv, SciPy의 null_space(사영 $BB^\top$), Robotics Toolbox for Python 1.5.0의 DH.Panda(공구 변환을 제거)의 fkine·jacob0를 이 장의 값과 비교했다. Robotics Toolbox의 Panda 모델은 FR3와 같은 DH 값(2.4의 표)을 사용한다. 스크립트는 robotics/fig-src/2.11-libcheck.py, 출력은 robotics/fig-src/data/2.11-libcheck-output.txt에 있다.
| 비교(FR3, 임의 형상 200개, $\sigma_{\min}\ge0.02$) | 최대 차이 |
|---|---|
numpy.linalg.pinv와 이 장의 $J^\dagger$ | 3.2e-12 |
SciPy null_space의 사영 $BB^\top$와 이 장의 $N$ | 9.5e-14 |
RTB DH.Panda(공구 제거)의 fkine과 이 장의 순기구학 | 6.1e-16 |
RTB DH.Panda(공구 제거)의 jacob0와 이 장의 위치 자코비안 | 9.6e-16 |
사영과 의사역행렬이 $3.2\times10^{-12}$ 안에서, 순기구학과 자코비안이 $10^{-15}$ 안에서 같다. Robotics Toolbox의 Panda 모델이 이 장의 FR3 DH 표와 같은 값을 사용한다는 점이 확인되었다(관절 한계는 Panda와 FR3가 다르다).
한계. 한 로봇(FR3)의 한 원 경로, 한 시작 자세의 결과이며 이득은 조정하지 않았다. 닫힌 경로의 표류는 시뮬레이션이며 반복성(수렴)의 증명은 하지 않았다. 관절 한계에 걸린 뒤의 처리(절단·QP)와 관절 속도 한계, 자기 충돌, 여러 링크 점을 함께 고려한 장애물 회피, 3개 이상의 과제 우선순위, 알고리즘 특이점의 직접 시험은 다루지 않았다. 평면 3R의 우선순위 실험은 이동 목표가 도달 한계 근처로 가는 한 경우이다. 이 장의 장애물 거리는 링크 위 세 점의 거리이며 링크 전체의 충돌 거리가 아니다.
견해: 7자유도 팔의 직교 속도 제어는 의사역행렬을 기본으로 두고 영공간에 관절 범위 중심 항을 더하는 것을 기본으로 둔다고 본다. 근거는 이 장의 원 경로 6바퀴에서 의사역행렬만으로는 바퀴당 $0.078\sim0.086$ rad의 표류가 계속되었고, 관절 중심 항은 추종 오차($0.18$ mm)를 바꾸지 않으면서 3바퀴 안에 표류를 $10^{-3}$ rad 아래($1.6\times10^{-4}$ rad)로 줄였다는 점이다. 장애물이나 특이점이 걸린 과제에서는 해당 항을 따로 두되 첫 바퀴의 큰 이동($1.1$ rad)과 한계 여유 감소($8.9$ %)를 점검한다. 보조 과제를 여러 개 두는 경우에는 영공간 항을 합치기보다 엄격한 우선순위를 사용하는 편이 낫다고 본다. 근거는 이 장에서 위치 우선 방식이 위치 오차 $0.17$ mm를 지킨 반면 같은 가중의 쌍 풀이는 $212.6$ mm의 위치 오차와 $440$ rad/s의 속도를 냈다는 점이다. 우선순위 사이의 완전한 분리가 필요 없고 과제 사이를 부드럽게 절충하는 응용(가중 평균)에서는 이 판단이 달라질 수 있다.
2.11.6 설계 트레이드오프 — 남는 자유도로 무엇을 할 것인가
공개 문헌에서 확인되는 방식은 다음과 같다.
- ① 최소 노름(의사역행렬). 가장 단순하다. 닫힌 경로에서 관절이 표류한다.
- ② 가중 의사역행렬. 관절마다 비용을 달리한다(예: 질량 행렬, Modern Robotics 6.2절). 가중을 바꾸는 규칙이 필요하다.
- ③ 기울기 사영. 보조 목적 함수의 기울기를 영공간에 더한다. 목적 함수·이득을 정해야 하며 국소 극소에 갇힐 수 있다.
- ④ 엄격한 우선순위. 상위 과제를 해치지 않고 하위 과제를 수행한다. 알고리즘 특이점과 감쇠가 필요하다.
- ⑤ 계층 QP. 부등식 과제(관절 한계·장애물)를 포함한 계층을 QP로 푼다. 계산이 크다(12.7).
| 방식 | 입력 | 장점 | 한계 | 알맞은 경우 |
|---|---|---|---|---|
| ① 최소 노름 | $J$, $V$ | 단순, 닫힌 형식 | 닫힌 경로 표류, 보조 과제 없음 | 여유자유도가 작고 경로가 짧은 작업 |
| ② 가중 | + 가중 $W$ | 관절별 비용 | 가중 규칙 | 질량·한계 비용 반영 |
| ③ 기울기 사영 | + $\nabla H$, 이득 | 보조 목적 | 국소 극소, 이득 조정 | 한계·조작성·장애물 회피 |
| ④ 엄격한 우선순위 | $J_1,J_2$ | 우선순위 보장 | 알고리즘 특이점 | 위치·자세 등 계층 과제 |
| ⑤ 계층 QP | + 부등식 | 부등식 포함 | 계산량 | 전신 제어, 충돌·한계 포함 |
견해: 한계·충돌을 제약으로 직접 다룰 필요가 없는 7자유도 팔의 연속 추종은 ①+③(관절 중심 기울기)로 시작하고, 과제가 둘 이상으로 늘면 ④로, 부등식이 들어오면 ⑤로 옮기는 순서를 기본으로 둔다고 본다. 근거는 이 장의 계산에서 ③이 추종 오차를 바꾸지 않고 표류를 없앴고, ④가 상위 과제를 지켰으며, 장애물 항은 한계 여유를 소모했다는 점이다(한계를 제약으로 다루면 이 소모를 막을 수 있으나 이 장은 시험하지 않았다).
2.11.7 응용 축 비교
| 응용 축 | 여유자유도가 맡는 일 | 요구 | 관련 장 |
|---|---|---|---|
| 산업·제조 | 7축 팔의 관절 한계 회피, 용접·도장의 자세 여유 | 경로 반복성, 특이점 회피 | 2.9, 28.2 |
| 물류·이동 | 이동 베이스와 팔의 합성 여유자유도 | 실시간, 베이스 이동 최소화 | 2.15 |
| 도로 주행 | 해당하는 고유 요구 없음 | — | — |
| 서비스 | 가정용 7축 팔의 팔꿈치 자세, 장애물 회피 | 안전, 사람과의 공간 공유 | 7.3, 23.4 |
| 의료·헬스케어 | 도구 끝 고정과 팔 자세 선택(환자 접촉 회피) | 정밀도, 안전 | 32.14 |
| 휴머노이드·범용 | 팔·몸통 여유자유도의 계층 과제 | 실시간 QP | 12.7, 7.18 |
| 필드 | 해당하는 고유 요구 없음(이동·휴머노이드 행과 같음) | — | — |
| 국방·안보 | 원리 수준에서 해당하는 고유 요구 없음 | — | — |
이 표는 이 책의 정리이며 장별 요구는 다르다.
2.11.8 관련 규격·프로토콜
| 문서 | 발행 | 무엇을 정하나 | 상세 장 |
|---|---|---|---|
| Modern Robotics 5.1·6.2·6.4절 | Lynch·Park, 2017 | 여유자유도 로봇의 내부 운동, 최소 노름·가중 의사역행렬, 닫힌 경로의 관절 표류 | 2.6 |
DH.Panda | Robotics Toolbox for Python 1.5.0 | Panda(FR3와 같은 DH 값) 7R 모델, 관절 한계 | 2.7 |
| 수학 표기·기호표 | 이 책 | 의사역행렬 $J^\dagger$, 영공간 사영 $N$ | A.2 |
2.11.9 관련 규제·인증 요구와의 연결
여유자유도 처리 방식 자체를 규정하는 법령·인증 요건은 확인하지 못했다. 영공간으로 관절 한계·장애물 거리를 지키는 기능은 기능 안전(27.10)의 안전 기능이 아니라 제어 소프트웨어의 기능이며, 안전 기능으로 인증하려면 별도의 감시가 필요하다. 이 장은 규정의 조항을 확인하지 않았다 (확인 필요).
2.11.10 한계·유의점·미해결
- 표류. 최소 노름 해는 닫힌 경로에서 관절이 돌아오지 않는다. 기울기 사영은 수렴을 보였지만 증명하지 않았다.
- 이득과 단위. 영공간 이득 $k$는 단위·목적 함수에 의존하며 조정하지 않았다.
- 부작용. 장애물 회피 항은 첫 바퀴에 큰 관절 이동을 만들고 관절 여유를 소모했다.
- 알고리즘 특이점. $J_2N_1$의 계수 손실을 직접 시험하지 않았다. 이 장은 감쇠로만 완화했다.
- 한계 처리. 한계 도달 후의 처리와 관절 속도·가속도 한계는 다루지 않았다(2.6, 12.7).
- 링크 점. 장애물 거리를 링크 위 세 점으로만 쟀다. 링크 전체·자기 충돌 거리는 11.1 이후이다.
2.11.11 체크포인트·연구 질문·출처
체크포인트:
- $J^\dagger V$와 $Nz$가 직교함을 보이고 $\lVert\dot q\rVert^2$의 분해를 작성하라.
- 가중 의사역행렬 $W^{-1}J^\top(JW^{-1}J^\top)^{-1}$이 $\dot q^\top W\dot q$를 최소화함을 라그랑주 승수로 유도하라.
- 평면 3R에서 꼭짓점을 고정한 자기 운동의 영공간 방향을 $J$의 외적으로 구하는 식을 작성하라.
- 엄격한 우선순위 식에서 $J_1\dot q=V_1$이 유지됨을 $J_1N_1=0$으로 보이라.
- 평면 3R에서 방위각 $60^\circ$가 가능한 $x$의 한계 $r^*=0.921$ m를 손목점 거리 조건으로 유도하라.
연구 질문:
- 기울기 사영의 닫힌 경로 수렴(반복성)은 어떤 목적 함수와 이득에서 보장되는가?
- 알고리즘 특이점을 감쇠 없이 검출·회피하는 방법과 관절 한계·장애물 거리를 부등식으로 동시에 지키는 계층 제어의 비용은?
1차 출처(조회 2026-11-03).
- K. M. Lynch, F. C. Park, Modern Robotics, Cambridge University Press, 2017(ISBN 9781107156302). 사전 인쇄본 2017-05-03판의 5.1·5.2·6.2·6.4·6.7절을 읽었다.
- A. Liégeois, "Automatic supervisory control of the configuration and behavior of multibody mechanisms," IEEE Transactions on Systems, Man, and Cybernetics 7(12), 868–871, 1977, doi:10.1109/tsmc.1977.4309644 — 서지만 확인.
- C. A. Klein, C.-H. Huang, "Review of pseudoinverse control for use with kinematically redundant manipulators," IEEE Transactions on Systems, Man, and Cybernetics SMC-13(2), 245–250, 1983, doi:10.1109/tsmc.1983.6313123 — 서지만 확인.
- A. A. Maciejewski, C. A. Klein, "Obstacle avoidance for kinematically redundant manipulators in dynamically varying environments," IJRR 4(3), 109–117, 1985, doi:10.1177/027836498500400308 — 서지만 확인.
- Y. Nakamura, H. Hanafusa, T. Yoshikawa, "Task-priority based redundancy control of robot manipulators," IJRR 6(2), 3–15, 1987, doi:10.1177/027836498700600201 — 서지만 확인.
- B. Siciliano, J.-J. E. Slotine, "A general framework for managing multiple tasks in highly redundant robotic systems," Proc. Fifth International Conference on Advanced Robotics, 1211–1216, 1991, doi:10.1109/icar.1991.240390 — 서지만 확인.
- S. Chiaverini, "Singularity-robust task-priority redundancy resolution for real-time kinematic control of robot manipulators," IEEE Transactions on Robotics and Automation 13(3), 398–410, 1997, doi:10.1109/70.585902 — 서지만 확인.
- T. F. Chan, R. V. Dubey, "A weighted least-norm solution based scheme for avoiding joint limits for redundant joint manipulators," IEEE Transactions on Robotics and Automation 11(2), 286–292, 1995, doi:10.1109/70.370511 — 서지만 확인.
- P. Baerlocher, R. Boulic, "An inverse kinematics architecture enforcing an arbitrary number of strict priority levels," The Visual Computer 20(6), 402–417, 2004, doi:10.1007/s00371-004-0244-4 — 서지만 확인.
- T. Shamir, Y. Yomdin, "Repeatability of redundant manipulators: mathematical solution to the problem," IEEE Transactions on Automatic Control 33(11), 1004–1009, 1988 — Modern Robotics의 참고문헌 목록에서만 확인.
- numpy 2.5.4, SciPy 1.18.1(
null_space), Robotics Toolbox for Python 1.5.0(DH.Panda).
다음 장. 2.12는 정역학과 강성(힘 전달·순응 행렬·관절 강성에서 말단 강성으로)을 다룬다. 이 장의 영공간은 여유자유도 로봇에서 관절 토크가 엔드이펙터 힘을 만들지 않는 내부 힘의 방향과 쌍대 관계에 있다.