AEGLOSLAB 로봇공학 전서(全書)

제2부 기구학

2.4 순기구학 II: 지수곱(PoE) 공식

2.4.1 이 장에서 배우는 것 / 선수 지식 / 특히 중요한 독자

이 장은 개방 사슬의 순기구학을 지수곱(PoE, product of exponentials) 공식으로 나타내는 방법을 다룬다. 각 관절을 스크루 운동 하나로 보고 홈 자세의 엔드이펙터 변환 $M$과 관절 스크루 축 $S_i$만으로 $T(\theta)=e^{[S_1]\theta_1}\cdots e^{[S_n]\theta_n}M$을 구성하는 공간 형식, 스크루 축을 엔드이펙터 좌표로 옮긴 물체 형식, 지수의 닫힌 형식과 그 수치 정확도, 영점을 옮기는 방법, 앞 장의 DH 표와의 관계를 다룬다. 링크 좌표계를 배정하지 않으므로 2.3의 DH 규칙과 평행 축의 불안정이 없다. 이 장의 표기는 이후 자코비안(2.8)·동역학(3.1 이후)·보정(2.17)의 기본이다.

배우는 것:

  • 공간 형식 — 영 자세 $M$, 스크루 축 $S_i=(\omega_i,v_i)$, 가장 먼 관절부터 안쪽으로 이동하는 적용 순서.
  • 물체 형식 — $B_i=\mathrm{Ad}_{M^{-1}}S_i$, $T=Me^{[B_1]\theta_1}\cdots e^{[B_n]\theta_n}$.
  • 지수의 계산 — 회전·나사·직동 관절의 닫힌 형식(로드리게스 식), 테일러 급수와의 정확도 차이.
  • 영점 이동 — 영 자세를 바꿀 때 $S_i$와 $M$이 변하는 방식(보정의 영점 오프셋).
  • DH와의 관계 — 같은 기구에서 DH 표와 지수곱 입력 사이를 왕복하는 방법과 비용.

선수 지식: 1.6(동차변환), 1.7(지수·로그 사상), 1.10(스크루 축·수반 표현), 2.3(DH). 표기는 BK-05와 A.2을 따른다: 스크루 $(\omega,v)$.

특히 중요한 독자: 기구학·보정·동역학 라이브러리를 구현하는 엔지니어, 제조사 DH 표나 URDF를 지수곱 입력으로 변환하는 소프트웨어 개발자, 스크루 이론을 로봇에 적용하는 연구자.

출처 방침. 기준 시점은 2026-11-03이다. 직접 읽은 자료: ① Lynch·Park, Modern Robotics(Cambridge University Press, 2017; 사전 인쇄본 2017-05-03판)의 4.1절(공간 형식 식 (4.14), 물체 형식 식 (4.16), 예 4.2~4.7, 적용 순서에 관한 서술)과 4장 서두, ② Franka Research 3 공식 문서(robot_specifications, 조회 2026-11-03)의 DH 표(Craig 관례), ③ spatialmath-python 1.1.18의 Twist3 소스와 실행. 서지는 Crossref 응답으로 확인했다(Brockett, Park 1994, Murray·Li·Sastry). 읽지 못한 것: 위 세 서지의 본문. Brockett 논문의 연도는 Crossref에 등록되어 있지 않으며 1984(MTNS 논문집)로 알려져 있으나 (확인 필요). 수치는 모두 이 장의 순수 파이썬 계산이다.

2.4.2 개념 — 관절이 바깥쪽 링크 전체에 가하는 나사 운동

관절 $n$(가장 먼 관절)을 $\theta_n$만큼 움직이면 엔드이펙터 좌표계는 영 자세 $M$에서 그 관절 축의 나사 운동만큼 이동한다. 관절 $n-1$을 움직이면 그 바깥의 모든 링크(관절 $n$과 엔드이펙터를 포함)가 관절 $n-1$의 축 둘레로 한꺼번에 움직인다. Modern Robotics는 이를 "각 관절이 바깥쪽 링크에 스크루 운동을 가한다"고 서술한다. 이 서술에서 곱의 순서가 바로 나온다. 가장 안쪽 관절의 지수가 가장 왼쪽에 놓인다.

이 표현은 두 가지를 정하면 완성된다. 기저 좌표계 $\{s\}$에서 본 홈 자세(모든 관절 변수 0)의 엔드이펙터 변환 $M$과 홈 자세에서 $\{s\}$ 기준으로 쓴 관절 스크루 축 $S_1,\dots,S_n$이다. 링크마다 좌표계를 배정하지 않으며 규칙도 없다. 관절 축은 홈 자세의 직선일 뿐이므로 DH의 평행 축 불안정(2.3)이 없다.

결론부터 적으면 다음과 같다. 지수곱 공식은 DH와 같은 기구학을 나타내되 관절당 수가 많다($6n$개 대 $3n$개). 대신 좌표계 규칙이 없고 축 직선만 정하면 되며, 닫힌 형식의 지수로 계산이 정확하다. 이 장의 계산에서 지수곱의 순기구학은 DH 표(Franka Research 3의 수정 DH)와 $5.6\times10^{-16}$ 안에서 같았다.

2.4.3 원리

2.4.3.1 공간 형식

스크루 축 $S_i=(\omega_i,v_i)$는 홈 자세의 관절 $i$를 기저 좌표계로 적은 것이다. 회전 관절이면 $\omega_i$는 축 방향의 단위 벡터이고 $v_i=-\omega_i\times q_i$이다($q_i$는 축 위의 임의의 점). 직동 관절이면 $\omega_i=0$이고 $v_i$는 이동 방향의 단위 벡터이다. 관절 $n$만 변할 때 $T=e^{[S_n]\theta_n}M$이고, 관절 $n-1$도 변하면 $T=e^{[S_{n-1}]\theta_{n-1}}e^{[S_n]\theta_n}M$이므로 전체는 다음과 같다(Modern Robotics의 식 (4.14)).

$$T(\theta)=e^{[S_1]\theta_1}\,e^{[S_2]\theta_2}\cdots e^{[S_n]\theta_n}\,M.$$

공간 형식에서 $M$은 가장 먼 관절부터 안쪽 관절로 차례로 변환된다. 안쪽 관절의 스크루 축을 기저 좌표계로 적은 것은 바깥 관절의 변위에 영향을 받지 않으므로 스크루 축은 홈 자세에서만 구하면 된다. 그림 1은 평면 3R 팔($L=1$)에서 이 순서를 보인다.

q1 q2 q3 영 자세 M 관절 3만 적용 관절 3·2 적용 관절 3·2·1 적용 T(θ)
평면 3R 팔($L=1$)의 지수곱. 영 자세 $M$(회색)에서 관절 3의 회전, 이어서 관절 2, 마지막으로 관절 1의 회전을 적용해 최종 형상 $T(\theta)$를 얻는다.

2.4.3.2 스크루 축의 구성

관절$\omega$$v$비고
회전축 방향 단위 벡터$-\omega\times q$ ($q$는 축 위의 점)$\lVert\omega\rVert=1$, $\omega\cdot v=0$
직동$0$이동 방향 단위 벡터$\lVert v\rVert=1$
나사(피치 $h$)축 방향 단위 벡터$-\omega\times q+h\,\omega$$\omega\cdot v=h$

회전 관절의 스크루 $(\omega,v)$는 여섯 성분 가운데 독립이 네 개이다($\lVert\omega\rVert=1$과 $\omega\cdot v=0$ 두 조건). 축 직선의 매개변수 네 개(방향 2, 위치 2)와 같다. 지수곱 입력은 이 네 개에 $M$의 여섯 개를 더한 것이 독립 매개변수이고, DH에서 구조를 나타내는 수 $3n$(Modern Robotics의 서술)과 비교하면 최소 표현은 아니다. 대신 스크루 여섯 성분을 그대로 적으므로 계산이 단순하다.

2.4.3.3 물체 형식

공간 형식의 각 관절을 엔드이펙터 좌표계로 옮기면 $e^{M^{-1}[S]M\theta}=M^{-1}e^{[S]\theta}M$이므로 다음이 성립한다(Modern Robotics의 식 (4.16)).

$$T(\theta)=M\,e^{[B_1]\theta_1}\cdots e^{[B_n]\theta_n},\qquad B_i=\mathrm{Ad}_{M^{-1}}S_i.$$

물체 형식에서는 $M$이 가장 안쪽 관절부터 바깥으로 차례로 변환되며, 바깥 관절의 스크루 축을 엔드이펙터 좌표로 적은 것은 안쪽 관절의 변위에 영향을 받지 않는다. 두 형식은 같은 기구를 서로 다른 순서로 적을 뿐이다.

2.4.3.4 지수의 닫힌 형식

단위 $\omega$의 회전·나사 관절에서 $e^{[S]\theta}$는 로드리게스 식으로 계산한다.

$$e^{[S]\theta}=\begin{bmatrix}e^{[\omega]\theta}&G(\theta)\,v\\0&1\end{bmatrix},\quad e^{[\omega]\theta}=I+\sin\theta\,[\omega]+(1-\cos\theta)\,[\omega]^2,\quad G(\theta)=I\theta+(1-\cos\theta)[\omega]+(\theta-\sin\theta)[\omega]^2.$$

직동 관절은 $e^{[S]\theta}=\begin{bmatrix}I&v\theta\\0&1\end{bmatrix}$이다. 테일러 급수를 항 수를 고정해 계산하면 $\theta$가 클 때 급수가 수렴하지 않아 오차가 폭발하지만, 닫힌 형식은 사인·코사인의 정확도에만 의존한다(그림 3). 이 식은 $\lVert\omega\rVert=1$을 가정하므로 비단위 $\omega$를 넣으면 잘못된 변위가 나온다.

2.4.3.5 영점 이동과 DH와의 관계

영 자세를 $q_0$만큼 옮긴 새 표현 $(S',M')$은 다음과 같다. $P_i=e^{[S_1]q_{0,1}}\cdots e^{[S_{i-1}]q_{0,i-1}}$이라 하면 $S_i'=\mathrm{Ad}_{P_i}S_i$, $M'=P_{n+1}M$이고 $T'(q)=T(q+q_0)$이다. 기구 보정에서 관절 영점 오프셋을 이렇게 다룬다(2.17). 이 장은 이를 Franka Research 3에서 확인한다.

DH 표는 2.3의 방법으로 지수곱 입력으로 옮길 수 있다. 표준 DH는 $z_{i-1}$을, 수정 DH는 $z_i$를 관절 $i$의 축으로 읽는다. 반대로 관절 축에서 DH 표를 추출할 수도 있으나(2.3.4) 평행·교차 축에서는 공통 법선의 선택이 필요하다. 지수곱 입력은 그런 선택이 필요 없다.

2.4.4 알고리즘

  1. 기저 좌표계 $\{s\}$와 엔드이펙터 좌표계 $\{b\}$를 정하고, 모든 관절 변수가 0인 홈 자세를 정한다. 이때 각 관절의 양의 방향도 정한다.
  2. 홈 자세의 엔드이펙터 변환 $M$을 구한다.
  3. 관절 $i$마다 축 위의 한 점 $q_i$와 방향 $\omega_i$로 스크루 $S_i=(\omega_i,-\omega_i\times q_i)$를 만든다(직동 관절은 $(0,v_i)$).
  4. 공간 형식: $T\leftarrow I$에서 $T\leftarrow T\,e^{[S_i]\theta_i}$를 $i=1,\dots,n$ 순서로 곱하고 마지막에 $M$을 곱한다.
  5. 물체 형식이 필요하면 $B_i=\mathrm{Ad}_{M^{-1}}S_i$를 한 번 계산해 저장하고 $T\leftarrow M$에서 $T\leftarrow T\,e^{[B_i]\theta_i}$를 곱한다.
  6. 다른 영점이 필요하면 $P_i$를 차례로 곱하며 $S_i'$와 $M'$을 만든다.

2.4.5 풀이 예제 — Modern Robotics의 UR5·6R 예와 Franka Research 3

Modern Robotics의 UR5(예 4.5)와 6R 사슬(예 4.3·4.6)의 값을 재현하고, 공개 DH 표(Franka Research 3, Craig 관례)에서 지수곱 입력을 만들어 공간·물체 형식과 영점 이동을 검증하며, 지수의 닫힌 형식과 테일러 급수의 정확도, 순기구학의 계산 시간을 측정한다. 결론부터 적으면 다음과 같다. ① UR5 예의 $T(\theta)$가 책의 값과 $1.1\times10^{-16}$ 안에서 일치하고 6R 예의 물체 스크루 축이 책의 표와 정확히 같다. ② Franka Research 3에서 지수곱의 공간·물체 형식은 수정 DH와 $5.6\times10^{-16}$ 안에서 같고 영점 이동은 $2.6\times10^{-15}$ 안에서 성립한다. ③ 닫힌 형식은 $\theta=100$ rad에서도 최대 절대 오차가 $5.3\times10^{-15}$이지만 테일러 10항은 $\theta=1$에서 $2.5\times10^{-7}$, $\theta=10$에서 $1.3\times10^{3}$이다. ④ 이 구현에서 지수곱의 순기구학은 같은 관절 수의 DH 곱보다 약 2배 오래 걸린다.

구현. exp_screw·adjoint·inv_T·screw_axis·fk_space·body_screws·fk_body·shift_zero. 테일러 급수와 Decimal 기준값, 시간 측정, 그림은 스크립트에 있다. 2.3의 DH 변환(chain·screws)을 불러와 사용했다.

항목값
입력 1Modern Robotics UR5: $L_1=0.425$, $L_2=0.392$, $W_1=0.109$, $W_2=0.082$, $H_1=0.089$, $H_2=0.095$ m, 관절 변수 $(0,-\pi/2,0,0,\pi/2,0)$
입력 2Modern Robotics 6R(예 4.3, $L=1$)의 공간 스크루 축과 $M$, 책의 물체 스크루 축 표(예 4.6)
입력 3Franka Research 3의 DH 표(Craig 관례): $a=(0,0,0,0.0825,-0.0825,0,0.088)$, $d=(0.333,0,0.316,0,0.384,0,0)$, $\alpha=(0,-\pi/2,\pi/2,\pi/2,-\pi/2,\pi/2,\pi/2)$, 플랜지 $d=0.107$. 관절 변수 1,000개($[-3,3]^7$, 시드 47)
입력 4지수의 정확도: 단위 축 임의, $v=(0.3,-0.2,0.5)$, $\theta=10^{-3}\sim10^{2}$ rad의 21점. 기준값은 Decimal 120자리·500항 테일러 급수
입력 5시간: 관절 수 $n=3\sim12$의 임의 표, 한 구성당 400회 호출을 3회 반복한 최솟값(한 번의 실행, 공유 기계)
from math import sin, cos

R3 = range(3)

def mul(A, B):
    n = range(len(A))
    return [[sum(A[i][k] * B[k][j] for k in n)
             for j in n] for i in n]

def mv(A, s):
    return [sum(a * b for a, b in zip(r, s)) for r in A]

def hat(w):
    a, b, c = w
    return [[0, -c, b], [c, 0, -a], [-b, a, 0]]

def join(R, p):
    """3x3 회전 R과 위치 p -> 4x4 동차 행렬"""
    return ([list(R[i]) + [p[i]] for i in R3]
            + [[0, 0, 0, 1.0]])

def eye4():
    return [[float(i == j) for j in range(4)]
            for i in range(4)]

def exp_screw(S, t):
    """e^{[S] t}: 회전·나사(|w|=1) 또는 직동(w=0, |v|=1)"""
    w, v = S[:3], S[3:]
    if not any(w):
        I3 = [r[:3] for r in eye4()[:3]]
        return join(I3, [x * t for x in v])
    K = hat(w)
    K2 = mul(K, K)
    s, c = sin(t), 1 - cos(t)
    R = [[(i == j) + s * K[i][j] + c * K2[i][j]
          for j in R3] for i in R3]
    G = [[(i == j) * t + c * K[i][j] + (t - s) * K2[i][j]
          for j in R3] for i in R3]
    return join(R, mv(G, v))

def adjoint(T):
    """Ad_T = [[R, 0], [[p]R, R]], 성분 순서 (w, v)"""
    R = [r[:3] for r in T[:3]]
    pR = mul(hat([T[i][3] for i in R3]), R)
    return ([R[i] + [0.0] * 3 for i in R3]
            + [pR[i] + R[i] for i in R3])

def inv_T(T):
    R = [[T[j][i] for j in R3] for i in R3]
    return join(R, [-x for x in mv(R, [T[i][3] for i in R3])])

def screw_axis(w, q, h=0.0):
    """회전(h=0)·나사 관절: (w, -w x q + h w), |w| = 1"""
    c = [w[1] * q[2] - w[2] * q[1],
         w[2] * q[0] - w[0] * q[2],
         w[0] * q[1] - w[1] * q[0]]
    return list(w) + [h * a - b for a, b in zip(w, c)]

def fk_space(S, M, q):
    """T = e^{[S1] q1} ... e^{[Sn] qn} M"""
    T = eye4()
    for s, x in zip(S, q):
        T = mul(T, exp_screw(s, x))
    return mul(T, M)

def body_screws(S, M):
    """B_i = Ad_{M^-1} S_i"""
    A = adjoint(inv_T(M))
    return [mv(A, s) for s in S]

def fk_body(B, M, q):
    """T = M e^{[B1] q1} ... e^{[Bn] qn}"""
    T = M
    for b, x in zip(B, q):
        T = mul(T, exp_screw(b, x))
    return T

def shift_zero(S, M, q0):
    """영점을 q0만큼 옮긴 (S', M'): T'(q) = T(q + q0)"""
    S2, P = [], eye4()
    for s, x in zip(S, q0):
        S2.append(mv(adjoint(P), s))
        P = mul(P, exp_screw(s, x))
    return S2, mul(P, M)

① 책의 값 재현. Modern Robotics의 UR5 예는 $\theta_2=-\pi/2$, $\theta_5=\pi/2$에서 $T(\theta)$의 위치를 $(0.095,0.109,0.988)$ m로 적는다. 6R 예 4.3의 스크루 축에서 $B_i=\mathrm{Ad}_{M^{-1}}S_i$를 계산해 예 4.6의 표와 비교했다.

항목값
계산한 $T(\theta)$의 위치0.095000, 0.109000, 0.988000
책의 값(0.095, 0.109, 0.988)과 $T$ 전체의 최대 차이1.1e-16
6R 예제의 $B_i=\mathrm{Ad}_{M^{-1}}S_i$와 책의 표의 최대 차이0.0e+00

계산한 $T(\theta)$는 책의 값과 같고(차이 $1.1\times10^{-16}$), 6R 예제의 물체 스크루 축은 표와 정확히 같다.

② Franka Research 3. 수정 DH 표(2.3의 screws·chain)에서 스크루 축과 홈 자세 $M$을 만들었다. 홈 자세의 플랜지는 위치 $(0.088,\ 0,\ 0.926)$ m이고 회전은 $\mathrm{diag}(1,-1,-1)$(플랜지 $z$축이 아래를 향함)이다(계산값).

비교(관절 변수 1,000개)FR3의 수정 DH 표 대
지수곱 공간 형식5.6e-16
지수곱 물체 형식5.6e-16
영점을 옮긴 $(S',M')$에서 $T'(q)$ 대 $T(q+q_0)$2.6e-15

공간 형식과 물체 형식 모두 수정 DH와 $5.6\times10^{-16}$ 안에서 같다. 영점을 임의의 $q_0$만큼 옮긴 $(S',M')$으로 $T'(q)=T(q+q_0)$가 $2.6\times10^{-15}$ 안에서 성립한다.

③ 지수의 정확도. 단위 축과 $v=(0.3,-0.2,0.5)$에 대해 닫힌 형식과 항 수를 고정한 테일러 급수의 최대 절대 오차이다.

10−3 10−2 10−1 100 101 102 10−16 10−10 10−4 102 108 관절 변수 θ (rad) e[S]θ의 최대 절대 오차 닫힌 형식 테일러 10항 테일러 20항
$e^{[S]\theta}$의 최대 절대 오차(계산값, 기준은 Decimal 120자리). 닫힌 형식은 $\theta=100$ rad까지 $10^{-14}$ 이하이고 항 수를 고정한 테일러 급수는 $\theta$가 커지면 발산한다. $10^{-17}$ 미만의 값은 하한에 겹쳐 그렸다.

닫힌 형식의 오차는 $\theta=10^{-3}$에서 $4.3\times10^{-18}$, $\theta=100$에서 $5.3\times10^{-15}$이다(오차가 커지는 원인은 축 성분을 부동소수점으로 정규화한 값의 단위 길이 반올림 오차가 $\theta$에 비례해 반영되는 것이거나 사인·코사인의 인수 처리일 수 있으며 (추정), 분리하지 않았다). 테일러 10항은 $\theta=1$에서 $2.5\times10^{-7}$, 20항은 $\theta=1$에서 $2.2\times10^{-16}$이지만 $\theta=10$에서 각각 $1.3\times10^{3}$과 $30$이다.

④ 계산 시간. 한 번의 실행이며 공유 기계에서 측정한 값이므로 상대 비교로만 읽는다.

순기구학 한 번의 시간(μs, 한 번의 실행)$n=6$$n=7$
표준 DH 곱53.561.7
수정 DH 곱53.581.5
지수곱 공간 형식105.3164.8
지수곱 물체 형식95.9152.9
3 4 5 6 7 8 9 10 11 12 0 100 200 300 400 관절 수 n 순기구학 한 번의 시간 (μs) 표준 DH 수정 DH 지수곱 공간 지수곱 물체
순기구학 한 번의 시간(μs). 임의의 DH 표에서 표준·수정 DH 곱과 같은 기구의 지수곱 공간·물체 형식을 비교했다(한 번의 실행, 공유 기계).

이 구현에서 지수곱은 DH 곱의 약 2배 시간이 걸린다. DH는 행마다 닫힌 형식의 4×4 행렬 하나를 만들어 곱하지만 지수곱은 관절마다 로드리게스 식으로 지수를 계산한 뒤 곱하기 때문이다. 두 방식 모두 관절 수에 선형으로 늘어난다. 이 비교는 순수 파이썬 구현의 값이며 컴파일된 라이브러리에서는 달라질 수 있다.

⑤ 라이브러리 대조(실행 2026-11-03). modern_robotics 1.1.1의 FKinSpace·FKinBody와 Pinocchio 4.1.0의 forwardKinematics(축을 세계 좌표에 정렬하지 않은 회전 관절 JointModelRevoluteUnaligned의 사슬)로 같은 입력의 순기구학을 500개 관절 변수에서 비교했다. 스크립트는 robotics/fig-src/2.4-libcheck.py, 출력은 robotics/fig-src/data/2.4-libcheck-output.txt에 있다.

입력FKinSpace와 공간 형식FKinBody와 물체 형식Pinocchio와 공간 형식
Modern Robotics의 UR5(6R)8.3e-167.2e-166.1e-16
Franka Research 3(7R, DH에서 환산)7.8e-164.2e-167.8e-16

spatialmath-python 1.1.18의 Twist3도 비교했다(2.4-libcheck-sm.py). Twist3.UnitRevolute(w, q).S는 선속도 성분을 앞 세 개, 각속도 성분을 뒤 세 개로 저장해 이 책의 $(\omega,v)$와 순서가 반대이다(예: UnitRevolute([0,0,1],[1,0,0]).S는 $[0,-1,0,\ 0,0,1]$). 성분을 바꾸면 스크루가 $3.3\times10^{-16}$ 안에서 일치하고 회전 관절의 지수는 $1.4\times10^{-15}$, 직동 관절의 지수는 $6.7\times10^{-16}$ 안에서 일치했다. 외부 라이브러리의 스크루를 가져올 때는 성분 순서를 확인해야 한다(1.10).

한계. 수치는 합성 입력과 공개 DH 표이다. 시간 측정은 한 번의 실행이다. 정확도 측정에서 축 성분이 부동소수점이라 단위 길이 오차가 $10^{-16}$ 수준으로 포함된다. 구면·유니버설 관절처럼 자유도가 여럿인 관절은 한 자유도 관절의 직렬로 분해해야 한다. 폐루프 기구에는 이 공식을 그대로 적용할 수 없다(2.1).

견해: 새 코드 베이스의 기구학 모델은 지수곱의 공간 형식(필요하면 물체 형식)을 내부 표현으로 두고 DH·URDF는 입출력 변환 계층에 두는 것을 기본으로 둔다고 본다. 근거는 이 장의 계산에서 DH 표와 지수곱 입력이 $10^{-15}$ 수준으로 왕복했고, 좌표계 규칙과 평행 축의 불안정이 변환 계층에 국한되며, 닫힌 형식의 지수가 큰 $\theta$에서도 정확하다는 점이다. 순수 파이썬에서의 계산 비용이 2배라는 점은 컴파일된 구현에서는 달라질 수 있다.

2.4.6 설계 트레이드오프 — 순기구학의 입력 표현

공개 문헌에서 확인되는 표현은 네 가지이다.

  • ① 지수곱 공간 형식. 기저 좌표의 스크루 축과 홈 자세. 자코비안의 공간 형식(2.8)과 대응한다.
  • ② 지수곱 물체 형식. 엔드이펙터 좌표의 스크루 축. 말단 힘·속도를 다루는 제어에 편하다.
  • ③ DH. 표준·수정 DH 표(2.3). 제조사 문서와 교재에서 흔하다.
  • ④ URDF 관절 원점. origin과 axis로 관절을 직접 적는다(4.15·15.8).
표현입력장점한계알맞은 경우
① 공간 형식$S_i$, $M$ (6수/관절)좌표계 규칙 없음, 영점 이동이 간단, 자코비안과 대응최소 표현 아님보정·최적화·동역학 라이브러리
② 물체 형식$B_i$, $M$말단 좌표의 속도·힘과 대응기저 변경 시 재계산말단 제어
③ DH표(4수/관절)최소 표현, 제조사 표규칙, 관례 혼동, 평행 축 불안정제조사 표의 구현
④ URDForigin·axis도구 생태계일반 6수, 폐루프 제한 (확인 필요)시뮬레이션·ROS

견해: 지수곱의 두 형식은 둘 다 두지 않고 하나를 내부 표현으로 정하고 나머지는 필요할 때 $\mathrm{Ad}_{M^{-1}}$로 만드는 것이 낫다고 본다. 근거는 이 장의 계산에서 두 형식이 $10^{-16}$ 수준으로 같고 변환이 한 번의 6×6 곱이라는 점이다.

2.4.7 응용 축 비교

응용 축지수곱이 맡는 일요구관련 장
산업·제조제조사 DH·URDF를 지수곱으로 옮긴 순기구학, 영점 오프셋 보정정확도, 개체별 보정2.17, 28.2
물류·이동이동 매니퓰레이터 팔의 순기구학기저 좌표 변환2.15
도로 주행해당하는 고유 요구 없음——
서비스가정용 팔의 기구학·자코비안계산 효율7.3
의료·헬스케어수술 도구 끝의 순기구학정밀도, 보정2.17, 32.14
휴머노이드·범용다자유도 사슬의 순기구학과 동역학계산 효율3.6, 7.18
필드해당하는 고유 요구 없음(이동·휴머노이드 행과 같음)——
국방·안보원리 수준에서 해당하는 고유 요구 없음——

이 표는 이 책의 정리이며 장별 요구는 다르다.

2.4.8 관련 규격·프로토콜

문서발행무엇을 정하나상세 장
Modern Robotics 코드 라이브러리GitHub NxRLab/ModernRobotics(MIT)FKinSpace·FKinBody: 공간·물체 형식, 성분 순서 $(\omega,v)$2.7
Pinocchiostack-of-tasks/pinocchio관절 모델 트리(JointModelRevoluteUnaligned 등)와 forwardKinematics, 스크루 성분 $(v,\omega)$ 순서3.6
spatialmath-python Twist3PyPI 패키지 1.1.18(저장소는 확인하지 못했다 (확인 필요))스크루 성분 $(v,w)$ 순서, exp2.7
URDF jointROSorigin·axis로 쓴 관절(2.3의 환산)4.15, 15.8
수학 표기·기호표이 책스크루 $(\omega,v)$A.2

2.4.9 관련 규제·인증 요구와의 연결

지수곱 표현 자체를 규정하는 법령·인증 요건은 확인하지 못했다. 기구학 모델의 정확도는 안전 기능의 위치·속도 제한과 보정(2.17)의 입력이다. 산업 로봇의 안전 요건은 27.10이 다룬다. 이 장은 규정의 조항을 확인하지 않았다 (확인 필요).

2.4.10 한계·유의점·미해결

  • 성분 순서. 스크루의 성분 순서는 라이브러리마다 다르다. 이 장의 대조에서 spatialmath는 $(v,w)$, 이 책과 Modern Robotics는 $(\omega,v)$이다.
  • 단위 축. 닫힌 형식은 $\lVert\omega\rVert=1$을 가정한다. 비단위 $\omega$는 먼저 정규화해야 한다.
  • 다자유도 관절. 구면·유니버설 관절은 직렬 1자유도 관절로 분해하며, 특이한 분해(짐벌)는 1.4·2.9에서 다룬다.
  • 폐루프. 폐루프에는 구속 조건이 따로 필요하다(2.1·2.13).
  • 영점 오프셋. 제조사의 영점 정의가 이 장의 홈 자세와 다를 수 있다(2.17).
  • 계산 비용. 순수 파이썬에서는 DH보다 느렸다. 컴파일된 구현에서의 비교는 하지 않았다.

2.4.11 체크포인트·연구 질문·출처

체크포인트:

  1. 공간 형식에서 가장 먼 관절의 지수가 오른쪽에 놓이는 이유를 "관절이 바깥쪽 링크에 가하는 나사 운동"으로 설명하라.
  2. $B_i=\mathrm{Ad}_{M^{-1}}S_i$를 $e^{M^{-1}[S]M\theta}=M^{-1}e^{[S]\theta}M$에서 유도하라.
  3. 회전 관절 스크루의 여섯 성분 가운데 독립 성분이 네 개인 이유는 무엇인가?
  4. 영점을 $q_0$만큼 옮길 때 $S_i'$가 $\mathrm{Ad}_{P_i}S_i$로 바뀌는 이유를 $e^{S_i(q_i+q_{0,i})}$의 분해로 설명하라.

연구 질문:

  • 지수곱 표현에서 영점 오프셋과 축 방향 오차를 함께 식별할 때 식별 가능성(관측 가능성)의 조건은 무엇인가(2.17)?
  • 컴파일된 구현에서 지수곱과 DH 곱의 계산 비용 차이는 얼마인가?

1차 출처(조회 2026-11-03).

  • K. M. Lynch, F. C. Park, Modern Robotics: Mechanics, Planning, and Control, Cambridge University Press, 2017(ISBN 9781107156302). 사전 인쇄본 2017-05-03판의 4.1절과 4장 서두를 읽었다.
  • R. W. Brockett, "Robotic manipulators and the product of exponentials formula," in Mathematical Theory of Networks and Systems, Lecture Notes in Control and Information Sciences, pp. 120–129, doi:10.1007/bfb0031048 — 서지만 확인(연도는 Crossref에 없다).
  • F. C. Park, "Computational aspects of the product-of-exponentials formula for robot kinematics," IEEE Transactions on Automatic Control 39(3), 643–647, 1994, doi:10.1109/9.280779 — 서지만 확인.
  • R. M. Murray, Z. Li, S. S. Sastry, A Mathematical Introduction to Robotic Manipulation, CRC Press, 2017(재출판, doi:10.1201/9781315136370) — 서지만 확인.
  • Franka Research 3 공식 문서 robot_specifications의 DH 표, spatialmath-python 1.1.18, modern_robotics 1.1.1, Pinocchio 4.1.0.

다음 장. 2.5은 역기구학의 해석적 해를 다룬다. 이 장의 순기구학이 손목 중심 분리와 파이퍼 해법의 출발점이다.