고급 회전 변환행렬

13. 쿼터니언

13.1 쿼터니언의 역사와 동기

쿼터니언(Quaternion)은 1843년 아일랜드의 수학자 윌리엄 로완 해밀턴(William Rowan Hamilton)이 발견한 수 체계입니다[6]. 복소수를 3차원으로 확장하려는 시도에서 탄생했으며, 현대 로봇공학, 컴퓨터 그래픽스, 항공우주 분야에서 회전을 표현하는 가장 효율적인 방법 중 하나로 자리잡았습니다.

왜 쿼터니언을 사용하는가?

오일러 각의 문제점들을 해결하기 위해:

  • 짐벌 락 없음: 특이점이 존재하지 않음
  • 효율적인 보간: 매끄러운 회전 경로 생성 (SLERP)
  • 수치 안정성: 정규화만으로 유효성 유지
  • 계산 효율: 회전 합성이 빠름 (행렬보다 효율적)
  • 메모리 효율: 4개 파라미터 (vs 9개 행렬 원소)

13.2 쿼터니언의 정의

쿼터니언은 1개의 실수부와 3개의 허수부로 구성된 4차원 수입니다:

$$ \mathbf{q} = q_0 + q_1 i + q_2 j + q_3 k $$

또는 스칼라-벡터 형태로:

$$ \mathbf{q} = [q_0, \mathbf{q}_v] = [q_0, q_1, q_2, q_3] $$

여기서:

  • $q_0 \in \mathbb{R}$: 스칼라부(Scalar Part) 또는 실수부
  • $\mathbf{q}_v = \begin{bmatrix} q_1 & q_2 & q_3 \end{bmatrix}^T \in \mathbb{R}^3$: 벡터부(Vector Part) 또는 허수부
  • $i, j, k$: 허수 단위(Imaginary Units)

허수 단위의 성질: $$ \begin{align} i^2 &= j^2 = k^2 = ijk = -1 \\ ij &= k, \quad jk = i, \quad ki = j \\ ji &= -k, \quad kj = -i, \quad ik = -j \end{align} $$

이는 비가환(Non-commutative) 대수입니다: $ij \neq ji$

13.3 쿼터니언의 기본 연산
(1) 덧셈과 뺄셈
$$\mathbf{q}_{1} \pm{} \mathbf{q}_{2} = [q_{1,0} \pm q_{2,0}, \mathbf{q}_{1,v} \pm \mathbf{q}_{2,v}]$$
(2) 스칼라 곱셈

$$ \lambda \mathbf{q} = [\lambda q_0, \lambda \mathbf{q}_v] $$

(3) 쿼터니언 곱셈 (해밀턴 곱)

가장 중요한 연산으로, 회전의 합성에 사용됩니다:

$$ \mathbf{q}_1 \otimes \mathbf{q}_2 = [q_{1,0}, \mathbf{q}_{1,v}] \otimes [q_{2,0}, \mathbf{q}_{2,v}] $$

스칼라부:

$$ q_0 = q_{1,0} q_{2,0} – \mathbf{q}_{1,v} \cdot \mathbf{q}_{2,v} $$

벡터부:

$$ \mathbf{q}_v = q_{1,0} \mathbf{q}_{2,v} + q_{2,0} \mathbf{q}_{1,v} + \mathbf{q}_{1,v} \times \mathbf{q}_{2,v} $$

전체 형태:

$$ \mathbf{q}_1 \otimes \mathbf{q}_2 = \begin{bmatrix} q_{1,0} q_{2,0} – q_{1,1} q_{2,1} – q_{1,2} q_{2,2} – q_{1,3} q_{2,3} \\ q_{1,0} q_{2,1} + q_{1,1} q_{2,0} + q_{1,2} q_{2,3} – q_{1,3} q_{2,2} \\ q_{1,0} q_{2,2} – q_{1,1} q_{2,3} + q_{1,2} q_{2,0} + q_{1,3} q_{2,1} \\ q_{1,0} q_{2,3} + q_{1,1} q_{2,2} – q_{1,2} q_{2,1} + q_{1,3} q_{2,0} \end{bmatrix} $$

⚠️ 주의: $\mathbf{q}_1 \otimes \mathbf{q}_2 \neq \mathbf{q}_2 \otimes \mathbf{q}_1$ (비가환)

(4) 켤레(Conjugate)

$$ \mathbf{q}^* = [q_0, -\mathbf{q}_v] = [q_0, -q_1, -q_2, -q_3] $$

성질:
– $(\mathbf{q}_1 \otimes \mathbf{q}_2)^* = \mathbf{q}_2^* \otimes \mathbf{q}_1^*$ (순서 바뀜!)
– $(\mathbf{q}^*)^* = \mathbf{q}$
(5) 노름(Norm)

$$ |\mathbf{q}| = \sqrt{q_0^2 + q_1^2 + q_2^2 + q_3^2} = \sqrt{\mathbf{q} \otimes \mathbf{q}^*} $$

(6) 정규화(Normalization)

$$ \hat{\mathbf{q}} = \frac{\mathbf{q}}{|\mathbf{q}|} $$

단위 쿼터니언(Unit Quaternion): $|\mathbf{q}| = 1$

회전을 표현하는 쿼터니언은 항상 단위 쿼터니언이어야 합니다.

(7) 역원(Inverse)

$$ \mathbf{q}^{-1} = \frac{\mathbf{q}^*}{|\mathbf{q}|^2} $$

단위 쿼터니언의 경우: $$ \mathbf{q}^{-1} = \mathbf{q}^* $$

검증: $\mathbf{q} \otimes \mathbf{q}^{-1} = \mathbf{q}^{-1} \otimes \mathbf{q} = [1, \mathbf{0}]$ (항등원)

13.4 회전 쿼터니언

축-각에서 쿼터니언으로

회전축 $\mathbf{u} = \begin{bmatrix} u_x & u_y & u_z \end{bmatrix}^T$ (단위 벡터, $|\mathbf{u}| = 1$)를 중심으로 각도 $\theta$만큼 회전하는 쿼터니언:

$$ \mathbf{q}(\mathbf{u}, \theta) = \begin{bmatrix} \cos\frac{\theta}{2} \\ u_x \sin\frac{\theta}{2} \\ u_y \sin\frac{\theta}{2} \\ u_z \sin\frac{\theta}{2} \end{bmatrix} = \left[\cos\frac{\theta}{2}, \mathbf{u} \sin\frac{\theta}{2}\right] $$

그림1

그림 15. 축-각 표현과 쿼터니언

중요한 특징:

  • 각도가 $\frac{\theta}{2}$인 이유: 쿼터니언 회전은 이중 커버링(Double Covering)
  • $\mathbf{q}$와 $-\mathbf{q}$는 같은 회전을 나타냄
  • $|\mathbf{q}| = \cos^2\frac{\theta}{2} + \sin^2\frac{\theta}{2}(\mathbf{u} \cdot \mathbf{u}) = 1$ ✓
특수한 회전 쿼터니언

항등 회전 (회전 없음): $$ \mathbf{q}_{identity} = [1, 0, 0, 0] $$

X축 중심 회전: $$ \mathbf{q}_x(\alpha) = \left[\cos\frac{\alpha}{2}, \sin\frac{\alpha}{2}, 0, 0\right] $$

Y축 중심 회전: $$ \mathbf{q}_y(\beta) = \left[\cos\frac{\beta}{2}, 0, \sin\frac{\beta}{2}, 0\right] $$

Z축 중심 회전: $$ \mathbf{q}_z(\gamma) = \left[\cos\frac{\gamma}{2}, 0, 0, \sin\frac{\gamma}{2}\right] $$

180° 회전: $$ \mathbf{q}(\mathbf{u}, \pi) = [0, u_x, u_y, u_z] $$

13.5 쿼터니언을 이용한 점의 회전

3D 점 $\mathbf{p} = \begin{bmatrix} x & y & z \end{bmatrix}^T$를 회전시키는 방법:

(1) 점을 순수 쿼터니언으로 변환

$$ \mathbf{p}_q = [0, \mathbf{p}] = [0, x, y, z] $$

(2) 샌드위치 곱(Sandwich Product) 적용

$$ \mathbf{p}_q’ = \mathbf{q} \otimes \mathbf{p}_q \otimes \mathbf{q}^* $$

여기서:

  • $\mathbf{q}$: 회전을 나타내는 단위 쿼터니언
  • $\mathbf{q}^*$: $\mathbf{q}$의 켤레
  • $\otimes$: 쿼터니언 곱셈
(3) 결과에서 벡터부 추출

$$ \mathbf{p}’ = \mathbf{p}_q'[1:3] $$

예제: Z축 중심 90° 회전

$$ \mathbf{q} = \left[\cos 45°, 0, 0, \sin 45°\right] = \left[\frac{\sqrt{2}}{2}, 0, 0, \frac{\sqrt{2}}{2}\right] $$

점 $(1, 0, 0)$을 회전:

$$ \mathbf{p}_q = [0, 1, 0, 0] $$

$$ \mathbf{p}_q’ = \mathbf{q} \otimes \mathbf{p}_q \otimes \mathbf{q}^* = [0, 0, 1, 0] $$

결과: $(0, 1, 0)$ ✓

13.6 쿼터니언과 회전 행렬 변환

쿼터니언 → 회전 행렬

단위 쿼터니언 $\mathbf{q} = [q_0, q_1, q_2, q_3]$에 대응하는 회전 행렬:

$$ \mathbf{R}(\mathbf{q}) = \begin{bmatrix} 1 – 2(q_2^2 + q_3^2) & 2(q_1 q_2 – q_0 q_3) & 2(q_1 q_3 + q_0 q_2) \\\ 2(q_1 q_2 + q_0 q_3) & 1 – 2(q_1^2 + q_3^2) & 2(q_2 q_3 – q_0 q_1) \\\ 2(q_1 q_3 – q_0 q_2) & 2(q_2 q_3 + q_0 q_1) & 1 – 2(q_1^2 + q_2^2) \end{bmatrix} $$

간략 형태 (외적 행렬 사용):

$$ \mathbf{R}(\mathbf{q}) = (q_0^2 – \mathbf{q}_v^T \mathbf{q}_v) \mathbf{I} + 2 \mathbf{q}_v \mathbf{q}_v^T + 2 q_0 [\mathbf{q}_v]_\times $$
여기서 $[\mathbf{q}_v]_\times$는 $\mathbf{q}_v$의 **외적 행렬(Skew-symmetric Matrix)**:
$$ [\mathbf{q}_v]_\times = \begin{bmatrix} 0 & -q_3 & q_2 \\ q_3 & 0 & -q_1 \\ -q_2 & q_1 & 0 \end{bmatrix} $$
회전 행렬 → 쿼터니언

회전 행렬 $\mathbf{R}$에서 쿼터니언을 추출하는 방법 (Shepperd’s Method)[7]:

트레이스(Trace) 계산:

$$ \text{tr}(\mathbf{R}) = r_{11} + r_{22} + r_{33} $$
**Case 1**: $\text{tr}(\mathbf{R}) > 0$ $$ \begin{align} q_0 &= \frac{1}{2}\sqrt{1 + \text{tr}(\mathbf{R})} \\ q_1 &= \frac{r_{32} – r_{23}}{4q_0} \\ q_2 &= \frac{r_{13} – r_{31}}{4q_0} \\ q_3 &= \frac{r_{21} – r_{12}}{4q_0} \end{align} $$
**Case 2**: $r_{11} > r_{22}$ and $r_{11} > r_{33}$ $$ \begin{align} q_1 &= \frac{1}{2}\sqrt{1 + r_{11} – r_{22} – r_{33}} \\ q_0 &= \frac{r_{32} – r_{23}}{4q_1} \\ q_2 &= \frac{r_{12} + r_{21}}{4q_1} \\ q_3 &= \frac{r_{13} + r_{31}}{4q_1} \end{align} $$

(Case 3, 4도 유사하게 $q_2$ 또는 $q_3$를 먼저 계산)

13.7 쿼터니언과 오일러 각 변환

ZYX 오일러 각 → 쿼터니언

Roll($\phi$), Pitch($\theta$), Yaw($\psi$):

$$ \mathbf{q} = \mathbf{q}_x(\phi) \otimes \mathbf{q}_y(\theta) \otimes \mathbf{q}_z(\psi) $$

직접 계산: $$ \begin{bmatrix} q_0 \\ q_1 \\ q_2 \\ q_3 \end{bmatrix} = \begin{bmatrix} \cos\frac{\phi}{2}\cos\frac{\theta}{2}\cos\frac{\psi}{2} + \sin\frac{\phi}{2}\sin\frac{\theta}{2}\sin\frac{\psi}{2} \\ \sin\frac{\phi}{2}\cos\frac{\theta}{2}\cos\frac{\psi}{2} – \cos\frac{\phi}{2}\sin\frac{\theta}{2}\sin\frac{\psi}{2} \\ \cos\frac{\phi}{2}\sin\frac{\theta}{2}\cos\frac{\psi}{2} + \sin\frac{\phi}{2}\cos\frac{\theta}{2}\sin\frac{\psi}{2} \\ \cos\frac{\phi}{2}\cos\frac{\theta}{2}\sin\frac{\psi}{2} – \sin\frac{\phi}{2}\sin\frac{\theta}{2}\cos\frac{\psi}{2} \end{bmatrix} $$

쿼터니언 → ZYX 오일러 각

$$ \begin{align} \phi &= \arctan2\left(2(q_0 q_1 + q_2 q_3), 1 – 2(q_1^2 + q_2^2)\right) \\ \theta &= \arcsin\left(2(q_0 q_2 – q_3 q_1)\right) \\ \psi &= \arctan2\left(2(q_0 q_3 + q_1 q_2), 1 – 2(q_2^2 + q_3^2)\right) \end{align} $$

13.8 쿼터니언 회전의 합성

두 회전 $\mathbf{q}_1$, $\mathbf{q}_2$를 연속 적용:

$$ \mathbf{q}_{total} = \mathbf{q}_2 \otimes \mathbf{q}_1 $$

⚠️ 순서 주의: 먼저 적용할 회전이 오른쪽!

예제: Z축 30° 회전 후 X축 45° 회전

$$ \mathbf{q}_1 = \mathbf{q}_z(30°), \quad \mathbf{q}_2 = \mathbf{q}_x(45°) $$

$$ \mathbf{q}_{total} = \mathbf{q}_x(45°) \otimes \mathbf{q}_z(30°) $$

장점:

  • 행렬 곱셈 (27번)보다 쿼터니언 곱셈 (16번)이 빠름
  • 자동으로 정규화 유지 가능

13.9 쿼터니언 보간 (SLERP)

SLERP (Spherical Linear Interpolation)는 두 쿼터니언 사이를 구면을 따라 균일하게 보간하는 방법입니다[8].

$$ \text{SLERP}(\mathbf{q}_1, \mathbf{q}_2, t) = \frac{\sin((1-t)\omega)}{\sin\omega} \mathbf{q}_1 + \frac{\sin(t\omega)}{\sin\omega} \mathbf{q}_2 $$

여기서:

  • $t \in [0, 1]$: 보간 파라미터 ($t=0$이면 $\mathbf{q}_1$, $t=1$이면 $\mathbf{q}_2$)

  • $\omega = \arccos(\mathbf{q}_1 \cdot \mathbf{q}_2)$: 두 쿼터니언 사이의 각도

  • 그림2

    그림 16. SLERP 보간

SLERP의 장점:

  • ✅ 일정한 각속도 유지
  • ✅ 최단 경로 회전
  • ✅ 짐벌 락 없음
  • ✅ 매끄러운 애니메이션

간소화된 알고리즘 ($\omega$가 작을 때):

def slerp(q1, q2, t):
    dot = q1.dot(q2)

    # 최단 경로 보장
    if dot < 0:
        q2 = -q2
        dot = -dot

    # 거의 같은 경우
    if dot > 0.9995:
        return normalize(q1 + t * (q2 - q1))

    # 일반적인 경우
    omega = arccos(dot)
    return (sin((1-t)*omega) * q1 + sin(t*omega) * q2) / sin(omega)

13.10 쿼터니언의 미분과 각속도

쿼터니언의 시간 미분은 각속도(Angular Velocity)와 관련됩니다:

$$ \dot{\mathbf{q}}(t) = \frac{1}{2} \boldsymbol{\omega}(t) \otimes \mathbf{q}(t) $$

여기서:

  • $\boldsymbol{\omega}(t) = [0, \omega_x, \omega_y, \omega_z]$: 각속도 쿼터니언 (순수 쿼터니언)
  • $\mathbf{q}(t)$: 시간에 따른 자세

각속도에서 쿼터니언 업데이트 (오일러 적분):

$$ \mathbf{q}(t + \Delta t) = \mathbf{q}(t) + \dot{\mathbf{q}}(t) \Delta t $$

정규화: $$ \mathbf{q}(t + \Delta t) \leftarrow \frac{\mathbf{q}(t + \Delta t)}{|\mathbf{q}(t + \Delta t)|} $$

13.11 쿼터니언 실전 예제

예제 1: 축-각에서 쿼터니언 생성

문제: 벡터 $(1, 1, 1)$ 방향 축을 중심으로 120° 회전하는 쿼터니언은?

풀이:

회전축 정규화: $$ \mathbf{u} = \frac{1}{\sqrt{3}} \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} $$

쿼터니언: $$ \mathbf{q} = \left[\cos 60°, \frac{1}{\sqrt{3}}\sin 60°, \frac{1}{\sqrt{3}}\sin 60°, \frac{1}{\sqrt{3}}\sin 60°\right] $$

$$ = \left[0.5, \frac{\sqrt{3}/2}{\sqrt{3}}, \frac{\sqrt{3}/2}{\sqrt{3}}, \frac{\sqrt{3}/2}{\sqrt{3}}\right] = \begin{bmatrix} 0.5 \\ 0.5 \\ 0.5 \\ 0.5 \end{bmatrix} $$

검증: $|\mathbf{q}| = \sqrt{0.25 + 0.25 + 0.25 + 0.25} = 1$ ✓


예제 2: 쿼터니언 곱셈

문제: $\mathbf{q}_1 = [0.7071, 0.7071, 0, 0]$ (X축 90°)와 $\mathbf{q}_2 = [0.7071, 0, 0.7071, 0]$ (Y축 90°)의 곱은?

풀이:

$$ \mathbf{q} = \mathbf{q}_2 \otimes \mathbf{q}_1 $$

스칼라부: $$ q_0 = 0.7071 \times 0.7071 – (0.7071 \times 0 + 0.7071 \times 0 + 0 \times 0) = 0.5 $$

벡터부:

$$ \begin{align} q_1 &= 0.7071 \times 0.7071 + 0.7071 \times 0 + 0 – 0 = 0.5 \\\ q_2 &= 0.7071 \times 0 – 0 + 0.7071 \times 0.7071 + 0 = 0.5 \\\ q_3 &= 0.7071 \times 0 + 0 – 0 + 0.7071 \times 0.7071 = 0.5 \end{align} $$

: $\mathbf{q} = [0.5, 0.5, 0.5, 0.5]$ (위의 예제 1과 동일!)


예제 3: 쿼터니언으로 점 회전

문제: 쿼터니언 $\mathbf{q} = [0.7071, 0, 0, 0.7071]$ (Z축 90°)로 점 $(1, 0, 0)$ 회전

풀이:

$$ \mathbf{p}_q = [0, 1, 0, 0] $$

$$ \mathbf{q}^* = [0.7071, 0, 0, -0.7071] $$

$$ \mathbf{p}_q’ = \mathbf{q} \otimes \mathbf{p}_q \otimes \mathbf{q}^* $$

중간 계산: $$ \mathbf{q} \otimes \mathbf{p}_q = [0, 0.7071, 0.7071, 0.7071] $$

$$ \mathbf{p}_q’ = [0, 0.7071, 0.7071, 0.7071] \otimes [0.7071, 0, 0, -0.7071] = [0, 0, 1, 0] $$

: $(0, 1, 0)$ ✓


예제 4: 쿼터니언에서 회전 행렬

문제: $\mathbf{q} = [0.7071, 0.7071, 0, 0]$에 대응하는 회전 행렬은?

풀이:

$$ \mathbf{R} = \begin{bmatrix} 1 – 2(0^2 + 0^2) & 2(0.7071 \times 0 – 0.7071 \times 0) & 2(0.7071 \times 0 + 0.7071 \times 0) \\ 2(0.7071 \times 0 + 0.7071 \times 0) & 1 – 2(0.7071^2 + 0^2) & 2(0 \times 0 – 0.7071 \times 0.7071) \\ 2(0.7071 \times 0 – 0.7071 \times 0) & 2(0 \times 0 + 0.7071 \times 0.7071) & 1 – 2(0.7071^2 + 0^2) \end{bmatrix} $$

$$ = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 0 & -1 \\ 0 & 1 & 0 \end{bmatrix} $$

이는 X축 중심 90° 회전 행렬입니다. ✓


예제 5: SLERP 보간

문제: $\mathbf{q}_1 = [1, 0, 0, 0]$ (회전 없음)와 $\mathbf{q}_2 = [0.7071, 0, 0, 0.7071]$ (Z축 90°) 사이를 $t=0.5$로 보간

풀이:

$$ \omega = \arccos(\mathbf{q}_1 \cdot \mathbf{q}_2) = \arccos(0.7071) = 45° = \frac{\pi}{4} $$

$$ \mathbf{q}(0.5) = \frac{\sin(22.5°)}{\sin(45°)} \mathbf{q}_1 + \frac{\sin(22.5°)}{\sin(45°)} \mathbf{q}_2 $$

$$ = \frac{0.3827}{0.7071} [1, 0, 0, 0] + \frac{0.3827}{0.7071} [0.7071, 0, 0, 0.7071] $$

$$ = [0.5412, 0, 0, 0] + [0.3827, 0, 0, 0.3827] = [0.9239, 0, 0, 0.3827] $$

검증: 이는 Z축 중심 약 45° 회전 (90°의 절반) ✓


13.12 쿼터니언 장단점 요약

장점:

  • ✅ 짐벌 락 없음
  • ✅ 효율적인 메모리 사용 (4개)
  • ✅ 빠른 회전 합성
  • ✅ 안정적인 수치 계산
  • ✅ 매끄러운 보간 (SLERP)
  • ✅ 각속도 적분 용이

단점:

  • ❌ 직관적이지 않음
  • ❌ 4개 파라미터, 1개 제약 (정규화 필요)
  • ❌ $\mathbf{q}$와 $-\mathbf{q}$ 중복성
  • ❌ 시각화 어려움
  • ❌ 학습 곡선 높음

14. 축-각 표현과 로드리게스 공식

14.1 축-각 표현(Axis-Angle Representation)

축-각 표현은 회전을 회전축 벡터회전 각도로 표현하는 가장 기하학적이고 직관적인 방법입니다[9].

표현 방식:

$$ \mathbf{r} = \theta \mathbf{u} $$

여기서:

  • $\mathbf{u} \in \mathbb{R}^3$: 단위 회전축 벡터 ($|\mathbf{u}| = 1$)
  • $\theta \in [0, \pi]$: 회전 각도
  • $\mathbf{r} \in \mathbb{R}^3$: 회전 벡터(Rotation Vector) 또는 축-각 벡터

기하학적 의미:

  • 벡터의 방향: 회전축
  • 벡터의 크기: 회전 각도
그림3

그림 17. 축-각 표현

14.2 로드리게스 공식(Rodrigues’ Formula)

로드리게스 공식은 축-각 표현에서 회전 행렬로 직접 변환하는 공식입니다[10].

단위 벡터 $\mathbf{u}$를 축으로 각도 $\theta$만큼 회전:

$$ \mathbf{R}(\mathbf{u}, \theta) = \mathbf{I} + \sin\theta [\mathbf{u}]_\times + (1 – \cos\theta) [\mathbf{u}]_\times^2 $$

여기서 $[\mathbf{u}]_\times$는 $\mathbf{u}$의 외적 행렬(Skew-symmetric Matrix):

$$ [\mathbf{u}]_\times = \begin{bmatrix} 0 & -u_z & u_y \\ u_z & 0 & -u_x \\ -u_y & u_x & 0 \end{bmatrix} $$

성질:

– $[\mathbf{u}]_\times \mathbf{v} = \mathbf{u} \times \mathbf{v}$ (외적과 동치)
– $[\mathbf{u}]_\times^T = -[\mathbf{u}]_\times$ (반대칭)
– $[\mathbf{u}]_\times^2 = \mathbf{u}\mathbf{u}^T – \mathbf{I}$ (Rodrigues 전개에 사용)

전개 형태:

$$ \mathbf{R}(\mathbf{u}, \theta) = \cos\theta \mathbf{I} + (1 – \cos\theta) \mathbf{u}\mathbf{u}^T + \sin\theta [\mathbf{u}]_\times $$

14.3 로드리게스 공식의 유도

테일러 급수 전개를 이용한 유도:

회전 행렬의 지수 표현:

$$ \mathbf{R} = e^{[\mathbf{r}]_\times} = e^{\theta [\mathbf{u}]_\times} $$

지수 함수의 테일러 급수:

$$ e^{\theta [\mathbf{u}]_\times} = \mathbf{I} + \theta [\mathbf{u}]_\times + \frac{\theta^2}{2!} [\mathbf{u}]_\times^2 + \frac{\theta^3}{3!} [\mathbf{u}]_\times^3 + \cdots $$

핵심 성질:

$[\mathbf{u}]_\times^3 = -[\mathbf{u}]_\times$ (단위 벡터에 대해)

이를 이용하여 정리하면:

짝수 항:

$$ \mathbf{I} + \frac{\theta^2}{2!} [\mathbf{u}]_\times^2 + \frac{\theta^4}{4!} [\mathbf{u}]_\times^4 + \cdots = \mathbf{I} + (1 – \cos\theta) [\mathbf{u}]_\times^2 $$

홀수 항:

$$ \theta [\mathbf{u}]_\times + \frac{\theta^3}{3!} [\mathbf{u}]_\times^3 + \cdots = \sin\theta [\mathbf{u}]_\times $$

따라서:

$$ \mathbf{R} = \mathbf{I} + \sin\theta [\mathbf{u}]_\times + (1 – \cos\theta) [\mathbf{u}]_\times^2 $$

14.4 회전 행렬에서 축-각 추출

회전 행렬 $\mathbf{R}$에서 축-각을 추출:

(1) 회전 각도

트레이스 이용: $$ \theta = \arccos\left(\frac{\text{tr}(\mathbf{R}) – 1}{2}\right) $$

유도: $$ \text{tr}(\mathbf{R}) = 1 + 2\cos\theta $$

(2) 회전축

$\theta \neq 0, \pi$일 때:

$$ \mathbf{u} = \frac{1}{2\sin\theta} \begin{bmatrix} r_{32} – r_{23} \\ r_{13} – r_{31} \\ r_{21} – r_{12} \end{bmatrix} $$

특수한 경우:

$\theta = 0$ (항등 회전):

  • 회전축 임의 (보통 $(0, 0, 1)$ 선택)

$\theta = \pi$ (180° 회전):

  • $\mathbf{u}$는 $\mathbf{R} + \mathbf{I}$의 고유벡터 (고유값 2)
  • 실용적 방법: 대각 원소가 최대인 행/열에서 추출
$$ u_i = \frac{1}{\sqrt{2(1 + r_{ii})}} \sqrt{1 + r_{ii}} $$
그림2

14.5 축-각과 쿼터니언 관계

축-각 $(\mathbf{u}, \theta)$와 쿼터니언의 관계는 앞에서 다루었습니다:

$$ \mathbf{q} = \left[\cos\frac{\theta}{2}, \mathbf{u}\sin\frac{\theta}{2}\right] $$

역변환: $$ \theta = 2\arccos(q_0), \quad \mathbf{u} = \frac{\mathbf{q}_v}{|\mathbf{q}_v|} = \frac{\mathbf{q}_v}{\sin\frac{\theta}{2}} $$

14.6 축-각 실전 예제

예제 1: 로드리게스 공식 적용

문제: Z축 $(0, 0, 1)$을 중심으로 90° 회전하는 회전 행렬을 로드리게스 공식으로 구하라.

풀이:

$$ \mathbf{u} = \begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix}, \quad \theta = 90° = \frac{\pi}{2} $$

$$ [\mathbf{u}]_\times = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix} $$

$$ [\mathbf{u}]_\times^2 = \begin{bmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 0 \end{bmatrix} $$

$$ \mathbf{R} = \mathbf{I} + \sin 90° [\mathbf{u}]_\times + (1 – \cos 90°) [\mathbf{u}]_\times^2 $$

$$ = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} + \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 0 \end{bmatrix} + \begin{bmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 0 \end{bmatrix} $$

$$ = \begin{bmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix} $$

이는 $\mathbf{R}_z(90°)$와 일치합니다. ✓


예제 2: 임의 축 회전

문제: 벡터 $(1, 1, 0)$ 방향 축을 중심으로 60° 회전

풀이:

단위 벡터: $$ \mathbf{u} = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 \\ 1 \\ 0 \end{bmatrix} $$

$$ [\mathbf{u}]_\times = \frac{1}{\sqrt{2}} \begin{bmatrix} 0 & 0 & 1 \\ 0 & 0 & -1 \\ -1 & 1 & 0 \end{bmatrix} $$

로드리게스 공식 적용 (계산 생략):

$$ \mathbf{R} \approx \begin{bmatrix} 0.75 & -0.433 & 0.5 \\ 0.433 & 0.75 & -0.5 \\ -0.5 & 0.5 & 0.866 \end{bmatrix} $$


15. 회전 표현 방법 비교

15.1 종합 비교표

특성 회전 행렬 오일러 각 축-각 쿼터니언
파라미터 수 9 (6 제약) 3 4 (1 제약) 4 (1 제약)
자유도 3 3 3 3
중복성 없음 있음 (12종류) 있음 ($\pm\mathbf{r}$) 있음 ($\pm\mathbf{q}$)
특이점 없음 있음 (짐벌 락) 없음 없음
직관성 낮음 높음 중간 낮음
계산 효율 낮음 (27곱) 높음 중간 높음 (16곱)
메모리 36 bytes 12 bytes 16 bytes 16 bytes
보간 어려움 어려움 가능 우수 (SLERP)
합성 행렬 곱 복잡 복잡 쿼터니언 곱
정규화 재직교화 필요 불필요 불필요 간단
역변환 전치 부호 반전 부호/축 반전 켤레

15.2 응용 분야별 추천

컴퓨터 그래픽스 & 게임
  • 추천: 쿼터니언
  • 이유: SLERP, 계산 효율, 짐벌 락 없음
로봇 제어
  • 추천: 회전 행렬 또는 쿼터니언
  • 이유: 안정성, 선형 대수 활용
항공우주
  • 추천: 쿼터니언 (주) + 오일러 각 (보조)
  • 이유: 짐벌 락 회피, 인간 이해를 위한 오일러 각 변환
컴퓨터 비전
  • 추천: 회전 행렬 또는 축-각 (로드리게스)
  • 이유: 카메라 보정, 최적화에 적합
교육용
  • 추천: 오일러 각 → 회전 행렬 → 쿼터니언 순서
  • 이유: 점진적 난이도 상승

15.3 변환 요약 다이어그램

     Euler Angles
          ↕
    Rotation Matrix ←→ Quaternion
          ↕               ↕
      Axis-Angle  ←  →  

모든 표현은 상호 변환 가능하며, 각각의 장단점이 있습니다.

15.4 실무 권장사항

  1. 내부 계산: 쿼터니언 또는 회전 행렬
  2. 사용자 인터페이스: 오일러 각
  3. 데이터 저장: 쿼터니언 (메모리 효율)
  4. 애니메이션: 쿼터니언 (SLERP)
  5. 수학적 분석: 축-각 또는 회전 행렬

Similar Posts

  • 평면 변환 행렬

    로봇공학을 위한 평면의 변환 행렬(Transformation Matrix) 로봇공학에서 물체의 위치와 자세를 표현하고 조작하는 것은 가장 기본적이면서도 중요한 작업입니다. 본 문서는 2차원 평면과 3차원 공간에서의 변환 행렬을 체계적으로 설명하며, 회전(Rotation), 병진(Translation), 그리고 이들의 조합을 수학적으로 엄밀하게 다룹니다. 목차 Part I: 2D 변환 좌표계와 기본 개념 2D 병진 변환 2D 회전 변환 동차 좌표계 2D 강체 변환 변환의…

  • 공간에서의 변환행렬

    로봇공학을 위한 공간의 변환 행렬(Transformation Matrix) 로봇공학에서 물체의 위치와 자세를 표현하고 조작하는 것은 가장 기본적이면서도 중요한 작업입니다. 본 문서는 2차원 평면과 3차원 공간에서의 변환 행렬을 체계적으로 설명하며, 회전(Rotation), 병진(Translation), 그리고 이들의 조합을 수학적으로 엄밀하게 다룹니다. Part II: 3D 변환 3D 좌표계와 회전 3D 회전 행렬 오일러 각 3D 강체 변환 3D 실전 예제 Part II:…

  • 로봇공학의 역사

    로봇공학의 역사 로봇은 인류의 오랜 꿈이자 현대 산업의 핵심 기술로, 그 역사는 문학적 상상에서 시작하여 실용적인 산업 기술로 발전해왔습니다. 본 글에서는 로봇의 개념적 기원부터 현대 협동로봇에 이르기까지의 역사적 발전 과정을 살펴봅니다. 목차 로봇의 정의와 어원 로봇의 개념적 기원 산업용 로봇의 탄생과 발전 협동로봇의 등장 한국 로봇 산업의 역사 1. 로봇의 정의와 어원 1.1 로봇의 정의…