본문 바로가기
항공우주/동역학

방향코사인행렬 (DCM)

by 세인트 워터멜론 2021. 2. 6.

DCM은 Direction Cosine Matrix의 약자다. 방향코사인행렬 또는 회전행렬(rotation matrix)이라고 한다. 기호로는 \(C_b^a\) 라고 쓰고 위 첨자와 아래 첨자에 각각 좌표계를 표시한다. 그리고 좌표계 \(\{a\}\)에서 좌표계 \(\{b\}\)로의 DCM이라고 읽는다.

 

 

DCM은 \(3 \times 3\) 행렬이다. 그러면 9개의 행렬 성분(element)이 있는데, 각각은 다음과 같이 정의한다.

 

\[ C_b^a = \begin{bmatrix} \hat{a}_1 \cdot \hat{b}_1 & \hat{a}_1 \cdot \hat{b}_2 & \hat{a}_1 \cdot \hat{b}_3 \\ \hat{a}_2 \cdot \hat{b}_1 & \hat{a}_2 \cdot \hat{b}_2 & \hat{a}_2 \cdot \hat{b}_3 \\ \hat{a}_3 \cdot \hat{b}_1 & \hat{a}_3 \cdot \hat{b}_2 & \hat{a}_3 \cdot \hat{b}_3 \end{bmatrix} \]

 

정의에 의하면 DCM 행렬의 \(i\)번째 행과 \(j\)번째 열은 좌표계 \(\{a\}\)의 \(\hat{a}_i\)축과 좌표계 \(\{b\}\)의 \(\hat{b}_j\)축과의 내적이다. 두 축의 내적은

 

\[ \hat{a}_i \cdot \hat{b}_j = \cos⁡ \alpha \]

 

으로 주어지고 \(\alpha\)는 두 축사이의 사잇각이므로 '방향코사인' 이라는 이름이 붙었다.

좌표계 \(\{b\}\)에서 좌표계 \(\{a\}\)로의 DCM은 행렬 \(C\)의 위 첨자와 아래 첨자를 반대로 써서 \(C_a^b\)로 표현할 수 있다. \(C_b^a\)와 \(C_a^b\)는 서로 역변환 관계다.

 

 

DCM의 정의에 의해서 다음 3가지 성질이 파생된다.

먼저, 벡터 \(\vec{u}\)를 좌표계 \(\{a\}\)로 표현한 벡터 \(\mathbf{u}^a\)와 좌표계 \(\{b\}\)로 표현한 \(\mathbf{u}^b\)는 다음 관계가 있다.

 

\[ \mathbf{u}^a=C_b^a \mathbf{u}^b \]

 

위 식에 의하면 좌표계 \(\{a\}\)에서 좌표계 \(\{b\}\)로의 DCM \(C_b^a\)는 좌표계 \(\{b\}\)에서 표현한 벡터 \(\mathbf{u}^b\)를 좌표계 \(\{a\}\)에서 표현한 벡터 \(\mathbf{u}^a\)로 변환해 준다.

예제를 통해서 DCM을 계산해보고 좌표변환 관계식이 맞는지 확인해 보자.

다음과 같이 두 좌표계 \(\{a\}\)와 \(\{b\}\)가 있을 때 DCM 을 구하고, 길이가 2인 벡터 \(\vec{u}\)를 두 좌표계로 표현해 보자. \(\hat{a}_3\)와 \(\hat{b}_1\)은 화면에서 나오는 방향이다.

 

 

우선 \(\hat{a}_1\)과 \(\hat{b}_1\)은 직각이므로 사잇각이 90도이다. 따라서

 

\[ \hat{a}_1 \cdot \hat{b}_1 = \cos⁡ 90^o = 0 \]

 

이다. \(\hat{a}_1\)과 \(\hat{b}_2\)는 사잇각이 30도이다. 따라서

 

\[ \hat{a}_1 \cdot \hat{b}_2 = \cos⁡ 30^o = \frac{\sqrt{3}}{2} \]

 

이다. 이런 식으로 다 계산해 보면,

 

\[ C_b^a = \begin{bmatrix} 0 & \sqrt{3}/2 & -1/2 \\ 0 & 1/2 & \sqrt{3}/2 \\ 1 & 0 & 0 \end{bmatrix} \]

 

이 된다. 이제, 벡터 \(\vec{u}\)를 좌표계 \(\{a\}\)의 각 축으로 표현하면 다음과 같다.

 

\[ \mathbf{u}^a = \begin{bmatrix} 2 \cos 30^o \\ 2 \sin 30^o \\ 0 \end{bmatrix} = \begin{bmatrix} \sqrt{3} \\ 1 \\ 0 \end{bmatrix} \]

 

좌표계 \(\{b\}\)의 경우는 다행히 벡터 \(\vec{u}\)가 \(\hat{b}_2\) 방향과 일치하므로,

 

\[ \mathbf{u}^a = \begin{bmatrix} 2 \cos 30^o \\ 2 \sin 30^o \\ 0 \end{bmatrix} = \begin{bmatrix} \sqrt{3} \\ 1 \\ 0 \end{bmatrix} \]

 

이다. DCM \(C_b^a\)와 \(\mathbf{u}^b\)를 이용하여 \(\mathbf{u}^a\)를 계산하면 다음과 같다.

 

\[ \begin{align} \mathbf{u}^a &= C^a_b \mathbf{u}^b \\ \\ &= \begin{bmatrix} 0 & \sqrt{3}/2 & -1/2 \\ 0 & 1/2 & \sqrt{3}/2 \\ 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} 0 \\ 2 \\ 0 \end{bmatrix} \\ \\ &= \begin{bmatrix} \sqrt{3} \\ 1 \\ 0 \end{bmatrix} \end{align} \]

 

그런데 만약 \(\mathbf{u}^a\)를 이용하여 \(\mathbf{u}^b\)를 계산하려면 어떻게 해야할까. 다음과 같이 역행렬(inverse matrix)을 이용하면 될 것 같다.

 

\[ \mathbf{u}^b= \left( C_b^a \right)^{-1} \mathbf{u}^a \]

 

그런데 보통 \(3 \times 3\)행렬(행과 열이 각각 3개인 행렬)의 역행렬은 구하기가 어렵다.

 

 

이것을 해결해 줄 DCM의 두번째 성질이 있다. DCM \(C_b^a\)의 역행렬은 전치(transpose) 행렬과같다는 것이다. 즉

 

\[ \left( C_b^a \right)^{-1} = \left( C_b^a \right)^T \]

 

전치 행렬은 행렬의 행과 열을 서로 뒤바꾸는 놓은 것이기 때문에 계산이 매우 쉽다. 그러면 \(\mathbf{u}^a\)를 이용하여 \(\mathbf{u}^b\)를 계산해 보자.

 

\[ \begin{align} \mathbf{u}^b &= \left( C_b^a \right)^{-1} \mathbf{u}^a = \left( C_b^a \right)^T \mathbf{u}^a \\ \\ &= \begin{bmatrix} 0 & 0 & 1 \\ \sqrt{3}/2 & 1/2 & 0 \\ -1/2 & \sqrt{3}/2 & 0 \end{bmatrix} \begin{bmatrix} \sqrt{3} \\ 1 \\ 0 \end{bmatrix} \\ \\ &= \begin{bmatrix} 0 \\ 2 \\ 0 \end{bmatrix} \end{align} \]

 

이제 DCM \(C_b^a\)로 좌표계 \(\{a\}\)에서 표현한 벡터 \(\mathbf{u}^a\)를 좌표계 \(\{b\}\)에서 표현한 벡터 \(\mathbf{u}^b\)로 변환하든가 그 반대로 쉽게 변환할 수 있다.

DCM의 세번째 성질은 연쇄법칙이 성립한다는 것이다. 연쇄법칙은 다음과 같은 것이다.

 

\[ C_c^a = C_b^a C_c^b \]

 

좌표계 \(\{a\}\)에서 좌표계 \(\{c\}\)로의 DCM을 직접 계산할 수도 있지만 중간 단계의 좌표계 \(\{b\}\)를 두고 각각의 DCM을 계산해서 구할 수도 있다는 이야기다. 즉 \(\{a\}\)에서 \(\{c\}\)로 가는 것은 \(\{a\}\)에서 \(\{b\}\)로, 다시 \(\{b\}\)에서 \(\{c\}\)로 가는 것과 같다는 뜻이다. DCM을 직접 구하기 어려운 경우 매우 유용하다.

 

 

 

 

방향코사인행렬, 오일러각, 그리고 쿼터니언

<b>“좌표계간의 상호 변환관계를 말하다”</b> <b>“물체의 자세 변화를 수학적으로 표현하고 싶은 개발자를 위한 책”</b> 이 책은 방향코사인행렬, 오일러각, 쿼터니언과 이들의 시간 변화율에

digital.kyobobook.co.kr

 

'항공우주 > 동역학' 카테고리의 다른 글

짐벌락 (Gimbal Lock)  (0) 2021.02.07
오일러각 (Euler Angles)  (0) 2021.02.07
벡터를 직교 좌표계로 표현하기  (0) 2021.02.05
직교 좌표계  (0) 2021.02.05
자이로스코프 효과  (1) 2021.01.10

댓글