[로공입] 03. Rigid-Body Motions: Rotation Matrices (2)

이전 글에서는 회전 행렬 (rotation matrix) 의 정의와 성질에 대해서 알아봤다. 이번 글에서는 회전 행렬의 사용법과 자세 (orientation)의 여러 표현 방법에 대해서 알아보고자 한다.

Rotation Matrix

Use of Rotation Matrix \(SO(3)\)
  • Represent an orientation. 자세를 표현한다.
    Rotation matrix 를 정의하면서 유도했던 과정을 생각해보면 어떤 좌표계의 자세를 표현할때 회전행렬을 이용 할 수 있음을 배웠다. 앞에서도 말했듯이 무언가를 표현할때는 기준 frame 이 있어야 한다. Frame \(\{b\}\) 의 자세를 (움직 좌표계의 축들을) frame \(\{s\}\) 을 기준으로 (기준 좌표계의 축을 이용해서) 표현하면 \(R_{sb}\) 가 된다.
  • Change the reference frame in which a vector or a frame is represented. 어떤 frame 또는 vector 를 표현하는 기준 frame 을 바꾼다.
    Frame \(\{b\}\) 을 frame \(\{s\}\) 기준으로 orientation 을 표현하면 \(R_{sb}\)가 된다. 근데 만약에 frame \(\{s’\}\) 을 기준으로 표현하고 싶다면? 어떻게 하면 될까? 우리가 구해야하는 값은 \(R_{s’b}\) 가 된다. 즉, 구 기준 frame 이였던 frame \(\{s\}\) 과 신 기준 frame 인 frame \(\{s’\}\) 사이의 관계식 \(R_{s’s}\) 을 알고 있다면 \(R_{s’b}=R_{s’s}R_{sb}\) 를 이용해서 새로운 기준 frame 에서 frame \(\{b\}\) 를 표현 할 수 있게 된다. 이런 식으로 회전 행렬을 이용하면 기준 frame 을 바꿀 수 있다.
    vector 도 마찬가지이다. 아래 [그림 1]을 보자. \(\vec{v}\) 를 frame \(\{a\}\) 와 frame \(\{b\}\) 에서 각각 표현하면 다음과 같다.
    \(\begin{align}\vec{v} &=
    v_{ax}\hat{x}_a+v_{ay}\hat{y}_a+v_{az}\hat{y}_a=\left[\begin{array}{ccc}\hat{x}_a & \hat{y}_a & \hat{z}_a\end{array}\right]\left[\begin{array}{c}v_{ax} \\ v_{ay} \\ v_{az} \end{array}\right] \\ &= v_{bx}\hat{x}_b+v_{by}\hat{y}_b+v_{bz}\hat{y}_b=\left[\begin{array}{ccc}\hat{x}_b & \hat{y}_b & \hat{z}_b\end{array}\right]\left[\begin{array}{c}v_{bx} \\ v_{by} \\ v_{bz} \end{array}\right] \end{align} \)
    frame \(\{a\}\) 축을 이용해서  frame \(\{b\}\) 의 축을 표현하면
    \(\left[\begin{array}{ccc}\hat{x}_b & \hat{y}_b & \hat{z}_b \end{array}\right] = \left[\begin{array}{ccc}\hat{x}_a & \hat{y}_a & \hat{z}_a \end{array}\right]R_{ab}\)
    이므로 위의 식에 대입하면
    \(  \left[\begin{array}{ccc}\hat{x}_a & \hat{y}_a & \hat{z}_a\end{array}\right]\left[\begin{array}{c}v_{ax} \\ v_{ay} \\ v_{az} \end{array}\right] = 
    \left[\begin{array}{ccc}\hat{x}_a & \hat{y}_a & \hat{z}_a \end{array}\right]R_{ab}
    \left[\begin{array}{c}v_{bx} \\ v_{by} \\ v_{bz} \end{array}\right] \)
    즉, frame \(\{a\}\) 에서 본 \(\vec{v}=v_a\) 와 frame \(\{b\}\) 에서 본 \(\vec{v}=v_b\) 의 관계식은
    $$v_a = R_{ab}v_b$$
    이 됨을 알 수 있다.
[그림 1] frame \(\{a\}\)과 frame \(\{b\}\) 에서 바라본 \(\vec{v}\)
  • Rotate a vector or a frame. vector 또는 frame 을 회전한다.
    아래 [그림 2]를 보자. frame \(\{a\}\) 에 사람 A가 서있고 frame \(\{a\}\) 는 천천히 frame \(\{b\}\) 으로 회전하는 상황이다. 이때 사람 A가 봤을 때 \(\vec{v}\) 는 회전하는 것 처럼 느껴질 것이다. 사람 A 입장에서 회전하기 전 \(\vec{v}\) 를 \(v\) 라고 하고 회전 후에 \(\vec{v}\) 를 \(v’\) 이라고 하면 이 둘의 관계식은
    $$v’ = Rv$$
    이 되며 여기서 \(R\) 은 \(R_{ab}\) 이면서 사람 A 입장에서 \(\vec{v}\) 가 회전한 회전 행렬이라고 말할 수 있다.
[그림 2] 회전하는 \(\vec{v}\)

정리하면,

$$v’=Rv$$

를 보고 우리는 두가지로 해석 할 수 있다.

  • vector \(v\) 를 회전 행렬 \(R\) 을 이용해 회전했구나.
  • vector \(v\) 를 표현하는 기준 frame 이 달라졌으며, 회전하기 전 frame 에서 회전한 후 frame 을 표현하면 \(R\) 이구나.

두가지 모두 가능하며 식을 보고 상황에 따라서 이해하기 편한쪽으로 생각하면 식에 숨겨진 의미를 좀 더 파악하기 쉬워진다.

Euler Angle

[그림 3] 손목 (wrist) 구조

위의 그림은 회전 행렬을 설명할때 많이 등장하는 wrist 구조이다. 자주 등장하고 중요한 구조이므로 이번에 잘 익히고 넘어가도록 하자. Wrist 구조에는 3개의 회전 축이 존재한다. 그림상에서 \(\alpha, \beta, \gamma\) 라고 표현한 부분이다.
여기서 중요한건 회전 축이 그 전 회전에 의해 돌아간다는 것이다. 다시 말해서 \(\beta\) 로 회전하는 회전 축은 \(\alpha\)에 의해서 돌아가고 \(\gamma\) 로 회전하는 회전 축은 \(\alpha\) 와 \(\beta\) 에 의해서 돌아간다. 그리고 \(\alpha\) 회전 축은 frame \(\{0\}\) 의 \(z\) 축과 \(\beta\) 회전 축은 frame \(\{1\}\) 의 \(y\) 축과
\(\gamma\) 회전 축은 frame \(\{2\}\) 의 \(x\) 축과 항상 같다. 이러한 wrist 구조에는 두가지 특징이 있다.

  • Wrist center is always fixed. 손목 구조의 끝은 항상 고정되어 있다.
    이 구조가 회전 행렬에 적합한 이유는 손목의 끝이 이동을 하지 않고 자세만 변하기 때문이다.
  • Any rotation/orientation can be expressed \(\left(\alpha,\beta,\gamma\right)\). 손목 끝의 자세는 \(\alpha, \beta, \gamma\) 로 표현이 가능하다.

이제 frame \(\{0\}\) 에서 표현한 손목 끝의 자세 frame \(\{3\}\) 를 구해보자.

$$R_{03} \left(\alpha,\beta,\gamma\right) = R_{01}\left(\alpha\right)R_{12}\left(\beta\right)R_{13}\left(\gamma\right) \\
\begin{align}\text{where, } 
R_{01}\left(\alpha\right) &= \text{Rot}\left(\hat{z},\alpha\right) = \left[\begin{array}{ccc} \cos{\alpha} & -\sin{\alpha} & 0 \\ \sin{\alpha} & \cos{\alpha} & 0 \\ 0 & 0 & 1 \end{array}\right] \\ 
R_{12}\left(\beta\right) &=
\text{Rot}\left(\hat{y},\beta\right) = \left[\begin{array}{ccc} \cos{\beta} & 0 & \sin{\beta}
 \\ 0 &1 & 0 \\ -\sin{\beta} & 0 &
\cos{\beta} \end{array}\right] \\ 
R_{23}\left(\gamma\right) &=
\text{Rot}\left(\hat{x},\gamma \right) = \left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & \cos{\gamma } & -\sin{\gamma } \\ 0 & \sin{\gamma } & \cos{\gamma } \end{array}\right] \end{align} $$

정리해보면

$$R_{03} \left(\alpha,\beta,\gamma\right) = \text{Rot}\left(\hat{z},\alpha\right)
\text{Rot}\left(\hat{y},\beta\right)\text{Rot}\left(\hat{x},\gamma\right)$$

이 된다. 우리는 어떤 회전 행렬 \(R\) 을 3개의 독립 변수 \(\alpha, \beta, \gamma\) 로 표현했고 그때 회전 행렬은 위와 같음은 유도했다. 이처럼 회전 행렬을 표현하는 방식을 Euler angle ZYX 라고 부른다. ZYX 인 이유는 앞에서 부터 \(z\) 축, \(y\) 축, \(x\) 축 순으로 회전시키기 때문이다. 당연하게도 XYZ, ZXZ 등… Euler angle 에는 여러가지 방식이 있다. 다양한 표현 방법에 대해서는 wiki 를 참고하자.

Roll-Pitch-Yaw

[그림 4] 고정되어있는 frame 을 기준으로 회전시키기

Euler angle ZYX 에서 보면 \(R_{03}\) 을 만들때 회전 한 frame 을 기준으로 그 다음 frame 을 표현하는 식으로 유도해갔다. 예를 들어 \(R_{12}\) 는 frame \(\{1\}\) 기준으로 \(y\) 축 \(\beta\) 회전 이므로 \(\text{Rot}\left(\hat{y}, \beta\right)\) 이 되었다. 

이번에 표현 방법은 고정된 frame 에서 표현해가는 방식이다. 위에서 회전 행렬은 vector 또는 frame 을 회전시킬때도 사용한다고 배웠다. [그림 4] 를 보자. 고정된 frame 을 기준으로 \(\hat{x}\), \(\hat{y}\), \(\hat{z}\)을 순서대로 \(\hat{X}\) 축으로 \(\gamma\), \(\hat{Y}\) 축으로 \(\beta\), \(\hat{Z}\) 축으로 \(\alpha\) 만큼 회전시켰다.

\(\begin{align}
\left[\begin{array}{ccc}\hat{x}^{\prime} & \hat{y}^{\prime} & \hat{z}^{\prime} \end{array}\right] &= \text{Rot}\left(\hat{X}, \gamma\right)\left[\begin{array}{ccc}\hat{x} & \hat{y} & \hat{z}\end{array}\right] \\
\left[\begin{array}{ccc}\hat{x}^{\prime\prime} & \hat{y}^{\prime\prime } & \hat{z}^{\prime\prime } \end{array}\right] &= \text{Rot}\left(\hat{Y}, \beta\right)\left[\begin{array}{ccc}\hat{x}^{\prime} & \hat{y}^{\prime} & \hat{z}^{\prime} \end{array}\right] \\
\left[\begin{array}{ccc}\hat{x}^{\prime\prime\prime} & \hat{y}^{\prime\prime\prime } & \hat{z}^{\prime\prime\prime } \end{array}\right] &= \text{Rot}\left(\hat{Z}, \alpha\right)\left[\begin{array}{ccc}\hat{x}^{\prime\prime} & \hat{y}^{\prime\prime} & \hat{z}^{\prime\prime} \end{array}\right] \end{align} \)

관계식을 갖는다. 이를 정리하면

$$
\left[\begin{array}{ccc}\hat{x}^{\prime\prime\prime} & \hat{y}^{\prime\prime\prime } & \hat{z}^{\prime\prime\prime } \end{array}\right] = 
\text{Rot}\left(\hat{Z},\alpha\right)
\text{Rot}\left(\hat{Y},\beta\right)\text{Rot}\left(\hat{X},\gamma\right)
\left[\begin{array}{ccc}\hat{x} & \hat{y} & \hat{z}\end{array}\right]$$

이 됨을 알 수 있다. 즉 고정된 frame 기준 \(\hat{X}\), \(\hat{Y}\), \(\hat{Z}\) 으로 \(\gamma\), \(\beta\), \(\alpha\) 회전 시킨 회전 행렬은

$$ \text{Rot}\left(\hat{Z},\alpha\right)
\text{Rot}\left(\hat{Y},\beta\right)\text{Rot}\left(\hat{X},\gamma\right)$$

이 된다. 이와 같이 \(\gamma, \beta, \alpha\)으로 표현하는 방식을 roll-pitch-yaw 라고 부른다. Roll은 \(x\) 축, pitch 는 \(y\), yaw 는 \(z\) 축을 말한다.

재밌는 사실은 Euler angle ZYX \(\left(\alpha, \beta, \gamma\right)\)와 roll-pitch-yaw \(\left(\gamma, \beta, \alpha\right)\) 의 각도를 쓰는 순서는 반대이지만 실제는 같은 회전을 표현한다는 것이다.