Intro
위성 혹은 비행체의 자세를 표현하라고 하면 어떻게 표현할 수 있을까. 30도 회전되어 있다..? 어디로부터..? 자세를 표현하기가 생각보다 쉽지 않을 수 있다. 자세를 표현하기 위해선 기준점이 필요하고, 기준으로부터 얼마나 회전되어 있는지 정보도 필요하다. 앞서 배운 Direction Cosine Matrix, Euler angle, quaternion은 이러한 자세를 표현하기 충분하다. 일반적으로 위성의 자세라고 하면 DCM 혹은 quaternion을 의미한다. 이는 기준점이 존재하고, 그로부터 얼마나 회전되어있는지 명확한 정보를 담고 있기 때문이다.
그럼 이제 문제는, 위성의 자세, DCM 혹은 quaternion을 어떻게 찾는가 이다. 분명한 것은 센서값 혹은 어떠한 데이터로부터 이들을 찾을 수 있을 것이다. 이번 글에서는 위성의 자세를 결정하는 방법에 대해 다룰 것이다.
사실 위성의 자세는 Unique 하므로 DCM, Euler angle, quaternion은 모두 동일한 정보를 담고 있으며 서로 변환이 가능해야 한다. 이와 관련된 내용도 이번 글에서 다루어 보려고 한다.
Attitude Sensor
일반적으로 위성의 자세를 찾기 위해서는 벡터 측정이 필요하다. 위성에서 본 태양의 위치 혹은 지구의 위치, 별의 위치 등이 이러한 벡터가 될 수 있다. 지구에서 본 태양, 별의 위치와 위성에서 본 태양, 별의 위치를 비교함으로써 위성의 자세를 추정할 수 있다.
이러한 센서의 출력값은 벡터가 된다. 이 글에서는 센서로부터 벡터 값을 측정했다고 생각한다.
Bacis algorithm : 3 basis of the frame to DCM
센서값을 이용하기에 앞서, 우선적으로 frame간 DCM을 찾는 기본적인 방법을 알아보자. 만약 어떤 좌표계 (r-frame) 에서 표현된 다른 좌표계(b-frame)의 basis의 벡터를 알고 있다면, DCM을 찾을 수 있을 것이다.
r-frame에서 표현된 $\vec{v}|_r$과 b-frame에서 표현된 $\vec{v}|_b$가 있다고 하자. $\vec{v}|_b$의 x,y,z 성분은 b-frame의 basis와 벡터$\vec{v}$의 내적으로 구할 수 있다.
$$\vec{v}_x|_b=\hat{x}_b|_r \cdot \vec{v}|_r$$
$$\vec{v}_y|_b =\hat{y}_b |_r \cdot \vec{v}|_r$$
$$\vec{v}_z|_b =\hat{z}_b |_r \cdot \vec{v}|_r$$
$$\downarrow$$
$$\vec{v}|_b=\begin{bmatrix} \hat{x}_b|_r^T \\ \hat{y}_b |_r^T \\ \hat{z}_b |_r^T \end{bmatrix} \vec{v}|_r$$
$$\vec{v}|_b = {}^{b}T_r\vec{v}|_r$$
그러므로 r-frame에서 b-frame으로의 DCM은
$$ {}^{b}T_r=\begin{bmatrix} \hat{x}_b|_r^T \\ \hat{y}_b |_r^T \\ \hat{z}_b |_r^T \end{bmatrix}=
\begin{bmatrix}
\hat{x}_{b,x}|_r & \hat{x}_{b,y}|_r & \hat{x}_{b,z}|_r \\
\hat{y}_{b,x}|_r & \hat{y}_{b,y}|_r & \hat{y}_{b,z}|_r \\
\hat{z}_{b,x}|_r & \hat{z}_{b,y}|_r & \hat{z}_{b,z}|_r \end{bmatrix}$$
$$=\begin{bmatrix}
\hat{x}_b|_r\cdot\hat{x}_r|_r & \hat{x}_b|_r\cdot\hat{y}_r|_r & \hat{x}_b|_r\cdot\hat{z}_r|_r \\
\hat{y}_b|_r\cdot\hat{x}_r|_r & \hat{y}_b|_r\cdot\hat{y}_r|_r & \hat{y}_b|_r\cdot\hat{z}_r|_r \\
\hat{z}_b|_r\cdot\hat{x}_r|_r & \hat{z}_b|_r\cdot\hat{y}_r|_r & \hat{z}_b|_r\cdot\hat{z}_r|_r
\end{bmatrix} = \begin{bmatrix} \hat{x}_b|_r^T \\ \hat{y}_b|_r^T \\ \hat{z}_b|_r^T \end{bmatrix} \cdot \begin{bmatrix} \hat{x}_r|_r & \hat{y}_r|_r & \hat{z}_r|_r \end{bmatrix}$$
따라서 r-frame의 basis $\hat{x}_r|_r, \hat{y}_r|_r, \hat{z}_r|_r$ 와, r-frame에서 표현된 b-frame의 basis $\hat{x}_b|_r, \hat{y}_b|_r, \hat{z}_b|_r$ 를 알고 있다면 DCM을 쉽게 구할 수 있다.
TRIAD algorithm
위의 Basic algorithm은 3개의 basis를 이용해 frame간 DCM을 찾아냈다. 총 6개의 벡터를 이용해 frame간의 회전 변환 행렬을 찾아낸 것이다. 그러나 하나의 frame을 표현하는데에 있어서 2개의 basis만 있어도 충분하다. 각 basis가 수직인 것을 이용하면, 3번 째 basis는 2 개의 basis의 외적과 동일하기 때문이다.
TRIAD algorithm은 기준 좌표계 basis 2개와 b-frame의 basis 2개를 측정하여 b-frame의 DCM을 찾아내는 알고리즘이다.
지구에서 관측한 두 별의 위치 벡터를 $\vec{u}_r,\vec{v}_r$이라 하고 위성에서 관측한 두 별의 위치벡터를 $\vec{u}_b, \vec{v}_b$ 라고 하자. 그럼 다음과 같이 두 개의 frame을 만들어 낼 수 있다.
- Reference frame
$$\vec{l}_r=\frac{\vec{u}_r}{|\vec{u}_r|}$$
$$\vec{m}_r=\frac{\vec{u}_r \times \vec{v}_r}{|\vec{u}_r \times \vec{v}_r|}$$
$$\vec{n}_r = \frac{\vec{l}_r \times \vec{n}_r}{|\vec{l}_r \times \vec{n}_r|}$$
- b-frame
$$\vec{l}_b=\frac{\vec{u}_b}{|\vec{u}_b|}$$
$$\vec{m}_b=\frac{\vec{u}_b \times \vec{v}_b}{|\vec{u}_b \times \vec{v}_b|}$$
$$\vec{n}_b = \frac{\vec{l}_b \times \vec{n}_b}{|\vec{l}_b \times \vec{n}_b|}$$
- DCM
DCM을 구하기 위해 $\vec{l},\vec{m},\vec{n}$을 basis로 하는 frame이 있다고 하자.
$${}^{lmn}T_{b}=\begin{bmatrix} \vec{l}_b^T \\ \vec{m}_b^T \\ \vec{n}_b^T \end{bmatrix},\quad {}^{lmn}T_{r}=\begin{bmatrix} \vec{l}_r^T \\ \vec{m}_r^T \\ \vec{n}_r^T \end{bmatrix}$$
$$\therefore {}^{b}T_r = {}^{b}T_{lmn} {}^{lmn}T_{r} =
\begin{bmatrix} \vec{l}_b & \vec{m}_b & \vec{n}_b \end{bmatrix}
\begin{bmatrix} \vec{l}_r^T \\ \vec{m}_r^T \\ \vec{n}_r^T \end{bmatrix} $$
DCM to quaternion
$$\bar{q} = \begin{bmatrix} \vec{q} & q_4\end{bmatrix}^T$$
$$q_4 = \pm\sqrt{1+T_{11}+T_{22}+T_{33}}$$
$$q_1 = 0.25(T_{23}-T_{32})/q_4$$
$$q_2 = 0.25(T_{31}-T_{13})/q_4$$
$$q_3 = 0.25(T_{12}-T_{21})/q_4$$
- This may be numerically unstable for a very small $q_4$
- There can be two quaternion solutions for one DCM (Singularity, $\bar{q}=-\bar{q}$)
- quaternion invserse
$$\bar{q}^{-1}=\bar{q}^*= \begin{bmatrix} -\vec{q} & q_4 \end{bmatrix}$$
This is corresponding to the $T^{-1}$
Quaternion product
$$\bar{r}=\bar{p} \otimes \bar{q} = \begin{bmatrix}
p_4 & p_3 & -p_2 & p_1 \\
-p_3 & p_4 & p_1 & p_2 \\
p_2 & -p_1 & p_4 & p_3 \\
-p_1 & -p_2 & p_3 & p_4
\end{bmatrix} \begin{bmatrix} q_1 \\ q_2 \\ q_3 \\ q_4 \end{bmatrix}$$
This quaternion product is corresponding to the DCM product
$$T_r = T_pT_q$$
쿼터니안 곱의 순서와 DCM 곱의 순서를 주의하기 바란다. 쿼터니안 곱을 어떻게 정의하는지에 따라 DCM 곱의 순서가 달라질 수 있다. 특정 서적에서는 쿼터니안 곱을 $\bar{q}\otimes\bar{p}$로 정의하고 이에 대응하는 DCM 곱을 $T_r = T_pT_q$로 정의한 경우도 있다.
** Be careful with the order of the rotations. The notation of this product is depends on reference books, note and so on.