로공입을 시작하기 앞서 가장 기본이자 중요한 질문을 하고 넘어가자. 위의 그림을 보면 돌이 하나 있다. A가 B에게 “어디에 돌이 있어? 그리고 그 돌은 어떤 자세로 있어?” 라고 물었다. B는 어떻게 대답해야할까?
정답은 알수 없다 이다. 정확하게는 질문에 오류가 있다.
- 어디를 기준으로 이야기하고 있는가?
- 대상의 어디를 묘사하고 있는가?
A는 위에 두가지를 말하지 않고 질문했기 때문이다. 이처럼 어떤 물체의 위치와 자세를 이야기할때는 어디를 기준으로 표현하는가 (기준 좌표계) 그리고 그 물체에 어디를 말하고자 하는가 (움직 좌표계)를 분명히 해야한다.
좌표계
왜 로봇 역학을 공부하는데 좌표계 이야기를 하는지 궁금해하는 분들이 많이 있을거라 생각한다. 하지만 대학교 때 동역학 공부를 해본 학생이라면 알겠지만 동역학을 공부함에 있어서 우리가 대상으로 하는 물체를 표현하는것은 굉장히 중요하다. 좌표계를 대충 공부하면 나중에 머리가 터질 수 있으므로 지금부터 개념을 잘 잡아놔야 한다.
우선, 기준 좌표계를 설정해보자. 어렵지 않다. 아무대나 설정하면 된다. 우리가 풀고자하는 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$$
멋지지 않은가? 근데 여기서 조금 더 깊게 생각해보면 위의 조건으로도 완벽하지 않음을 알 수 있다. 바로 아래와 같은 경우인데,
둘 다 모든 축들이 수직이지만 분명히 다른 상태이다. 일반적으로 우리는 오른손 법칙을 이용해서 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}\)
- \(R_{ab}R_{ba}=I\)