[로공입] 02. Rigid-Body Motions: Rotation Matrices (1)

[그림 1] 돌이 어디있나요?

로공입을 시작하기 앞서 가장 기본이자 중요한 질문을 하고 넘어가자.  위의 그림을 보면 돌이 하나 있다. A가 B에게 “어디에 돌이 있어? 그리고 그 돌은 어떤 자세로 있어?” 라고 물었다. B는 어떻게 대답해야할까?

정답은 알수 없다 이다. 정확하게는 질문에 오류가 있다.

  1. 어디를 기준으로 이야기하고 있는가?
  2. 대상의 어디를 묘사하고 있는가?

A는 위에 두가지를 말하지 않고 질문했기 때문이다. 이처럼 어떤 물체의 위치와 자세를 이야기할때는 어디를 기준으로 표현하는가 (기준 좌표계) 그리고 그 물체에 어디를 말하고자 하는가 (움직 좌표계)를 분명히 해야한다.

좌표계

왜 로봇 역학을 공부하는데 좌표계 이야기를 하는지 궁금해하는 분들이 많이 있을거라 생각한다. 하지만 대학교 때 동역학 공부를 해본 학생이라면 알겠지만 동역학을 공부함에 있어서 우리가 대상으로 하는 물체를 표현하는것은 굉장히 중요하다. 좌표계를 대충 공부하면 나중에 머리가 터질 수 있으므로 지금부터 개념을 잘 잡아놔야 한다.


[그림 2] 일반적으로 기준이 되는 좌표계 \(\{s\}\) frame 을 우리는 fixed frame 또는 space frame 이라고 부른다. 그리고 물체를 대표하는 좌표계 \(\{b\}\) frame 을 우리는 moving frame 또는 body frame 이라고 부른다.

우선, 기준 좌표계를 설정해보자. 어렵지 않다. 아무대나 설정하면 된다. 우리가 풀고자하는 system (쉽게 말해서, 문제)에서 움직이지 않는 곳으로 보통 설정한다. 그 다음, 물체를 대표하는 좌표계를 설정해보자. 단단한 물체 (rigid body) 라면 하나의 좌표계만으로도 물체를 표현할 수 있다. 쉽게 말하면 물체와 함께 움직이는 좌표계를 하나 상상하고 물체를 움직이든 좌표계를 움직이든 둘 중에 하나를 움직이면 다른 하나는 자동으로 결정된다. 나중에 다시 이야기하겠지만 로봇은 대부분 단단한 물체로 이루어져있다고 가정할 수 있고 우리는 움직이는 모든 파트에 좌표계를 설정하여 동역학을 풀 것이다.

Rotation Matrix

자, 좌표계를 다 설정했으니 fixed frame 을 기준으로 moving frame 을 표현해보자. fixed frame 을 기준으로 moving frame을 표현하자는 뜻은 moving frame의 원점의 위치(\(P\))와 축(\(\hat{x}, \hat{y}, \hat{z}\))을 fixed frame의 원점을 기준으로 fixed frame의 축인 \(\hat{X}, \hat{Y}, \hat{Z}\)을 이용하여 표현하는 걸 말한다.

moving frame 의 원점의 위치를 표현하면,

\(\vec{P}=P_1\hat{X}+P_2\hat{Y}+P_3\hat{Z}\)

과 같으며, moving frame 의 축을 표현하면,

\(\hat{x}=r_{11}\hat{X}+r_{21}\hat{Y}+r_{31}\hat{Z}\\\hat{y}=r_{12}\hat{X}+r_{22}\hat{Y}+r_{32}\hat{Z}\\\hat{z}=r_{13}\hat{X}+r_{23}\hat{Y}+r_{33}\hat{Z}\)

처럼 된다.

Definition

$$P=\left[\begin{array}{c}P1\\P2\\P3\end{array}\right], R=\left[\begin{array}{ccc}r_{11}&r_{12}&r_{13}\\r_{21}&r_{22}&r_{23}\\r_{31}&r_{32}&r_{33}\end{array}\right].$$

위 정의를 이용해서 식을 정리하면 \(\vec{P}=\left[\begin{array}{ccc}\hat{X} & \hat{Y} & \hat{Z} \end{array}\right]P\), \(\left[\begin{array}{ccc}\hat{x} & \hat{y} & \hat{z} \end{array}\right]=\left[\begin{array}{ccc}\hat{X} & \hat{Y} & \hat{Z} \end{array}\right]R\) 이 됨을 알 수 있다.

이때! \(R\)을 \(R_{sb}\) 라 표기한다. \(\{s\}\) frame 에서 바라본 \(\{b\}\) frame 의 자세를 표현한 것이다.

총 12개의 변수를 이용해서 움직 좌표계를 기준 좌표계를 기준으로 표현한 것을 볼 수 있다. 응? 이상하지 않은가. 흔히 우리는 공중에 떠 있는 물체는 자유도 6을 갖는다고 말한다. 다시 말하면 6개의 변수를 이용하면 위치와 자세를 표현할 수 있다는 것이다. 우리의 기본 지식을 바탕으로 생각해보면 12개의 변수가 모두 독립적으로 움직일 수 있는게 아니라 독립적으로는 6개만을 정할 수 있고 나머지는 결정된다는 것을 알 수 있다. 어떤 조건이 숨어 있는 걸까?

첫번째로 움직 좌표계에 있는 축들은 단위벡터라는 조건이다.

\( \begin{array}{ll}
\text{(i) } & \left | \hat{x} \right |^2 = 1: r_{11}^2+r_{21}^2+r_{31}^2=1 \\ 
\text{(ii) } & \left | \hat{y} \right |^2 = 1: r_{12}^2+r_{22}^2+r_{32}^2=1 \\ 
\text{(iii) } & \left | \hat{z} \right |^2 = 1: r_{13}^2+r_{23}^2+r_{33}^2=1 \end{array} \)

두번째로 움직 좌표계에 있는 축들은 서로 수직하다는 조건이다.

\( \begin{array}{ll}
\text{(iv) } & \hat{x} \perp \hat{y} : r_{11}r_{12}+r_{21}r_{22}+r_{31}r_{32}=0 \\  
\text{(v) } & \hat{x} \perp \hat{z} : r_{11}r_{13}+r_{21}r_{23}+r_{31}r_{33}=0 \\  
\text{(vi) } & \hat{y} \perp \hat{z} : r_{12}r_{13}+r_{22}r_{23}+r_{32}r_{33}=0 \end{array} \)

위의 총 6개의 조건 때문에 12개의 변수들이 모두 독립이 아니라 6개만 독립이 됨을 알 수 있다. 위의 조건 \(\text{(i)}…\text{(vi)}\)을 정리하면 아래와 같이 한번에 쓸 수 있다!

$$R^\text{T}R=I$$

멋지지 않은가? 근데 여기서 조금 더 깊게 생각해보면 위의 조건으로도 완벽하지 않음을 알 수 있다. 바로 아래와 같은 경우인데,

[그림 3] 왼쪽 좌표계는 left-handed, 오른쪽 좌표계는 right-handed.

둘 다 모든 축들이 수직이지만 분명히 다른 상태이다. 일반적으로 우리는 오른손 법칙을 이용해서 frame 을 잡는다. 이 조건을 표현하는 방법은 아래와 같다.

\(\text{(vii) det}R=1 \Leftrightarrow \hat{x} \times \hat{y} = \hat{z}\)

이로서 모든 조건들을 구했다.

Definition

Any \(R\in\mathbb{R}^{3\times3}\) that satisfies \(R^\text{T}R=I\) and \(\text{det}R=1\) is a rotation matrix. The set of all rotation matrices is called Special Orthogonal Group in \(\mathbb{R}^{3\times3}\), \(SO(3)\)

Properties of Rotation Matrix \(SO(3)\)
  • \(R^{-1}=R^\text{T}\)
    \(\left(R^\text{T}R=R^{-1}R=RR^{-1}=RR^\text{T}=I\right)\)
  • If \(R_1, R_2 \in SO(3)\), then \(R_3=R_1R_2\) is also a rotation matrix.
    (check \(R_3^\text{T}R_3=(R_1R_2)^\text{T}(R_1R_2)=R_2^\text{T}R_1^\text{T}R_1R_2=I\). Also, \(\text{det}R_3=\text{det}(R_1R_2)=\text{det}R_1\cdot\text{det}R_2=1\))
  • If \(x\in\mathbb{R}^3\) and \(R \in SO(3)\), \(y=Rx\) then \(\left\|x\right\|=\left\|y\right\|\)
    (check  \(\left\|y\right\|^2=y^\text{T}y=x^\text{T}R^\text{T}Rx=\left\|x\right\|^2\))
  • \(R_{ab}R_{bc}=R_{ac}\)
[그림 4]  \(R_{ab}R_{bc}=R_{ac}\)
  • \(R_{ab}R_{ba}=I\)