로드리게스 회전 (Rodrigues rotation)

축을 이용한 로드리게스 회전

2019년 03월 30일

로드리게스 회전에 대한 기하학적 이해

로드리게스 회전은 3차원 공간상의 물체의 회전을 회전축과 그 각도로 설명합니다. 아래 그림은 단위 벡터인 회전축 nn 과 벡터 vv, 그리고 vvnn 에 대해 θ\theta 만큼 회전한 벡터 vv' 를 보여주고 있습니다.

회전된 벡터 vv' 는 아래와 같이 두가지 성분으로 분해할 수 있습니다.

v=vn+vnv' = v'^{\parallel n} + v'^{\perp n} 에서 vnv'^{\parallel n} 는 회전하기 이전의 벡터 vvnn 에 대한 투영인 vnv^{\parallel n} 와 같습니다. 따라서 v=vn+vnv' = v^{\parallel n} + v'^{\perp n} 입니다.

vv'nn 에 대한 직교 투영인 vnv'^{\perp n} 을 구하기 위해 아래 그림을 살펴보겠습니다.

벡터 vnv'^{\perp n} 은 두가지 성분으로 분해할 수 있습니다. vn=vn\parallel v'^{\perp n} \parallel = \parallel v^{\perp n} \parallel 이고 vnv'^{\perp n} 의 가로 성분은 아래와 같이 쓸 수 있습니다.

vhorizontaln=vncosθvnvn=vncosθ\begin{aligned} v'^{\perp n}_{horizontal} & = \parallel v^{\perp n} \parallel cos\theta \cdot \frac{v^{\perp n}}{\parallel v^{\perp n} \parallel} \\ & = v^{\perp n} cos\theta \end{aligned}

세로 성분을 구하기 전에 n×vn \times v 를 생각해 보겠습니다. n×vn \times v 의 방향은 vnv^{\perp n} 에 수직이고 n×v=nvsinϕ=vsinϕ\parallel n \times v \parallel = \parallel n \parallel \parallel v \parallel sin \phi = \parallel v \parallel sin \phi 이므로 vnv^{\perp n} 와 크기가 같습니다.

vn=n×v\parallel v'^{\perp n} \parallel = \parallel n \times v \parallel 이고 세로 성분은 아래와 같이 쓸 수 있습니다.

vverticaln=n×vcos(90θ)n×vn×v=(n×v)sinθ\begin{aligned} v'^{\perp n}_{vertical} & = \parallel n \times v \parallel cos(90 - \theta) \cdot \frac{n \times v}{\parallel n \times v \parallel} \\ & = (n \times v) sin\theta \end{aligned}

vnv'^{\perp n} 의 가로와 세로 성분을 이용해 다음과 같이 쓸 수 있습니다.

vn=vncosθ+(n×v)sinθv'^{\perp n} = v^{\perp n} cos\theta + (n \times v) sin\theta

종합하면 v=vn+vncosθ+(n×v)sinθv' = v^{\parallel n} + v^{\perp n} cos\theta + (n \times v) sin\theta 이고 이를 다음과 같이 정리할 수 있습니다.

v=vn+vncosθ+(n×v)sinθ=vn+(vvn)cosθ+(n×v)sinθ=(1cosθ)vn+vcosθ+(n×v)sinθ=(1cosθ)vnnnn+vcosθ+(n×v)sinθ=(1cosθ)(vn)n+vcosθ+(n×v)sinθ\begin{aligned} v' & = v^{\parallel n} + v^{\perp n} cos\theta + (n \times v) sin\theta \\ & = v^{\parallel n} + (v - v^{\parallel n}) cos\theta + (n \times v) sin\theta \\ & = (1 - cos\theta)v^{\parallel n} + v cos\theta + (n \times v) sin\theta \\ & = (1 - cos\theta)\frac{v \cdot n}{n \cdot n}n + v cos\theta + (n \times v) sin\theta \\ & = (1 - cos\theta)(v \cdot n)n + v cos\theta + (n \times v) sin\theta \\ \end{aligned}





로드리게스 회전 행렬

로드리게스 회전 식 v=(1cosθ)(vn)n+vcosθ+(n×v)sinθv' = (1 - cos\theta)(v \cdot n)n + v cos\theta + (n \times v) sin\theta 을 이용해 회전 행렬을 구해보겠습니다. 회전 식은 아래와 같이 다시 쓸 수 있습니다.

v=(1cosθ)nnTv+cosθ v+sinθ (n×v)v' = (1 - cos\theta)nn^Tv + cos\theta \text{ }v + sin\theta \text{ }(n \times v)

먼저 n×vn \times v 을 행렬-벡터 곱셈으로서 표현해 보겠습니다.

n×v=[nyvznzvynzvxnxvznxvynyvx]=[0nznynz0nxnynx0][vxvyvz]n \times v = \begin{bmatrix} n_y v_z - n_z v_y \\ n_z v_x - n_x v_z \\ n_x v_y - n_y v_x \end{bmatrix} = \begin{bmatrix} 0 & -n_z & n_y \\ n_z & 0 & -n_x \\ -n_y & n_x & 0 \end{bmatrix} \begin{bmatrix} v_x \\ v_y \\ v_z \end{bmatrix}

위 식에서 행렬 [0nznynz0nxnynx0]\begin{bmatrix} 0 & -n_z & n_y \\ n_z & 0 & -n_x \\ -n_y & n_x & 0 \end{bmatrix}KK 라 하고 K2K^2 을 구해보겠습니다.

K2=[0nznynz0nxnynx0][0nznynz0nxnynx0]=[nz2ny2nxnynznxnxnynz2nx2nynznxnznynznx2ny2]K^2 = \begin{bmatrix} 0 & -n_z & n_y \\ n_z & 0 & -n_x \\ -n_y & n_x & 0 \end{bmatrix} \begin{bmatrix} 0 & -n_z & n_y \\ n_z & 0 & -n_x \\ -n_y & n_x & 0 \end{bmatrix} = \begin{bmatrix} -n_z^2 - n_y^2 & n_x n_y & n_z n_x \\ n_x n_y & -n_z^2 - n_x^2 & n_y n_z \\ n_x n_z & n_y n_z & -n_x^2 - n_y^2 \end{bmatrix}

K2K^2 의 형태를 자세히 보면 다음과 같이 다시 쓸 수 있습니다.

K2=[nx21nxnynznxnxnyny21nynznxnznynznz21]=nnTI(nx2+ny2+nz2=1)\begin{aligned} K^2 = \begin{bmatrix} n_x^2 - 1 & n_x n_y & n_z n_x \\ n_x n_y & n_y^2 - 1 & n_y n_z \\ n_x n_z & n_y n_z & n_z^2 - 1 \end{bmatrix} = nn^T - I \\ \\ (\because n_x^2 + n_y^2 + n_z^2 = 1) \end{aligned}

위 식에 의하면 nnT=K2+Inn^T = K^2 + I 입니다.

nnT=K2+Inn^T = K^2 + In×v=Kvn \times v = Kv 을 이용해 v=(1cosθ)nnTv+cosθ v+sinθ (n×v)v' = (1 - cos\theta)nn^Tv + cos\theta \text{ }v + sin\theta \text{ }(n \times v) 을 다시 정리해보겠습니다.

v=(1cosθ)nnTv+cosθ v+sinθ (n×v)=((1cosθ)(K2+I)+cosθ I+sinθ K)v\begin{aligned} v' & = (1 - cos\theta)nn^Tv + cos\theta \text{ }v + sin\theta \text{ }(n \times v) \\ & = ((1 - cos\theta)(K^2 + I) + cos\theta \text{ }I + sin\theta \text{ }K)v \end{aligned}

따라서 vv 를 회전축 nn 에 대해 θ\theta 만큼 회전시키는 것은 vv 에 아래 행렬을 곱하는 것과 같습니다.

(1cosθ)(K2+I)+cosθ I+sinθ K=I+(1cosθ)K2+sinθ K\begin{aligned} (1 - cos\theta)(K^2 + I) + cos\theta \text{ }I + sin\theta \text{ }K \\ = I + (1 - cos\theta)K^2 + sin\theta \text{ }K \end{aligned}





참고