로봇 기구학을 위한 변환행렬 기초

권영석·2025년 6월 5일

이론

목록 보기
2/2
post-thumbnail

지난 포스트에서는 2차원 상에서의 2링크 기구학과 역기구학을 계산해보았다.

3차원 기구를 단순히 방정식으로 풀려면, 더 복잡하고 훨씬 긴 수식이 필요하고, 매우 비효율적이다.

실제 로봇팔 등에서 사용하는 계산에서는 방정식 대신에,
'Transformation Matrix (변환행렬)'을 사용한다.

그 수학적 증명을 천천히 따라가보자.

해당 내용을 이해하려면 먼저 선형대수학과 행렬에 대한 기본적인 이론적 기초가 필요하다.
모른다면 아래 내용을 참고하면 좋을 것이다.

선형대수학 참조
선형대수학의 본질 | 3Blue1Brown
공돌이의 수학정리 노트 - 선형대수 | 공돌이의 수학정리 노트

추천하는 로봇공학 강의
로봇제어공학 | 경희대학교 김동한 교수님

1. 3차원 공간에서 좌표계의 정의

표준적인 3차원 좌표계의 좌표축은 그림과 같이 x,y,zx, y, z 로 이루어진다.

zz 축의 방향은 x×y=zx\times y = z 로 정의된다.

공간 상에 여러개의 좌표계가 있고, A 좌표계, B 좌표계 등으로 정의를 한다.


이제 공간 상의 한 점 P를 A 좌표계, B 좌표계로 표현해볼 수 있다.

각각 AP=[ApxApyApz]{}_{}^{A}P = \begin{bmatrix} {}_{}^{A}p_x \\ {}_{}^{A}p_y \\ {}_{}^{A}p_z \end{bmatrix}

BP=[BpxBpyBpz]{}_{}^{B}P = \begin{bmatrix} {}_{}^{B}p_x \\ {}_{}^{B}p_y \\ {}_{}^{B}p_z \end{bmatrix} 로 표현된다.

왼쪽 위 첨자가, 기준이 되는 좌표계이다.

2. 행렬의 회전

2차원

그림은 2차원에서, xA,yAx_A,y_A 좌표축을 θ\theta 만큼 회전시킨 xB,yBx_B, y_B 좌표축이다.

x,yx,y 축의 변환을 따로 계산할 수도 있겠지만, 행렬로 표현해보자.
이에 대한 답은 잘 알려져있다시피,

BAR=[cosθsinθsinθcosθ]{}_{B}^{A}R=\begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix}

이를 유도해보자.

BAR=[AXB^AYB^]{}_{B}^{A}R = \begin{bmatrix} {}_{}^{A}\hat{X_B} & {}_{}^{A}\hat{Y_B} \end{bmatrix}

X,YX,Y는 원본 좌표계의 각 축을 A 에서 B로 회전시키는 열들이다. 각각 A 좌표계의 xx축, yy축을 회전시킨다. 또한 선형대수학의 관점에서 볼 때, 각 축의 회전 이후의 좌표라고도 볼 수 있다. 선형대수학의 새로운 관점 | 3Blue1Brown

BAR=[AXB^AYB^]=[XB^XA^YB^XA^XB^YA^YB^YA^]{}_{B}^{A}R = \begin{bmatrix} {}_{}^{A}\hat{X_B} & {}_{}^{A}\hat{Y_B} \end{bmatrix} = \begin{bmatrix} \hat{X_B}\cdot \hat{X_A} & \hat{Y_B}\cdot \hat{X_A} \\ \hat{X_B}\cdot \hat{Y_A} & \hat{Y_B}\cdot \hat{Y_A} \end{bmatrix}

예를 들어, 1열은 B 좌표계의 단위 xx벡터 XBX_B 를 A 좌표계의 단위벡터 XA^,YA^\hat{X_A},\hat{Y_A} 로 나타낸 값이다.

직관적으로는,

BAR=[BXAX사이각도BYAX사이각도BXAY사이각도BYAY사이각도]{}_{B}^{A}R = \begin{bmatrix} B의 X와 A의 X사이 각도 & B의 Y와 A의 X사이각도 \\ B의 X와 A의 Y사이 각도 & B의Y와 A의 Y사이각도 \end{bmatrix}

3차원

3차원으로 확장하면,

BAR=[X^BX^AY^BX^AZ^BX^AX^BY^AY^BY^AZ^BY^AX^BZ^AY^BZ^AZ^BZ^A]{}_{B}^{A}R = \begin{bmatrix} \hat{X}_B \cdot \hat{X}_A & \hat{Y}_B \cdot \hat{X}_A & \hat{Z}_B \cdot \hat{X}_A \\ \hat{X}_B \cdot \hat{Y}_A & \hat{Y}_B \cdot \hat{Y}_A & \hat{Z}_B \cdot \hat{Y}_A \\ \hat{X}_B \cdot \hat{Z}_A & \hat{Y}_B \cdot \hat{Z}_A & \hat{Z}_B \cdot \hat{Z}_A \end{bmatrix}

행렬을 보면, BART=ABR{}_B^AR^T = {}_A^BR 이라는 사실을 눈치챌 수 있다. 이는 A의 단위벡터를 B에서 나타내느냐, B의 단위벡터를 A에서 나타내느냐의 차이기 때문이다. 서로의 행이 그대로 열로 사용될 수 있다.

공간상 임의의 점 PP 를 A 좌표계에서 B 좌표계로 회전하면,
A 좌표계를 원점이동 없이 회전 -> AP=BAR×BP{}_{}^{A}P = {}_{B}^{A}R\times {}_{}^{B}P
역으로는, BP=BART×AP=ABR×AP{}_{}^{B}P={}_B^AR^T\times {}_{}^{A}P={}_{A}^{B}R\times {}_{}^{A}P

예시


그림은 검은색 좌표계인 A 좌표계를, x축 방향으로 30°30\degree만큼 회전시킨 좌표계 B이다.

BAR=[X^BX^AY^BX^AZ^BX^AX^BY^AY^BY^AZ^BY^AX^BZ^AY^BZ^AZ^BZ^A]{}_{B}^{A}R = \begin{bmatrix} \hat{X}_B \cdot \hat{X}_A & \hat{Y}_B \cdot \hat{X}_A & \hat{Z}_B \cdot \hat{X}_A \\ \hat{X}_B \cdot \hat{Y}_A & \hat{Y}_B \cdot \hat{Y}_A & \hat{Z}_B \cdot \hat{Y}_A \\ \hat{X}_B \cdot \hat{Z}_A & \hat{Y}_B \cdot \hat{Z}_A & \hat{Z}_B \cdot \hat{Z}_A \end{bmatrix}

단위벡터끼리의 내적은 결국 벡터사이 각도의 코사인 값인 것을 생각하자

예를 들어 X^BX^A\hat{X}_B \cdot \hat{X}_A 의 경우, 둘이 일치하므로, cos0=1cos0=1 이다.
Z^BY^A\hat{Z}_B \cdot \hat{Y}_A 의 경우, 사이 각도가 120°120\degree이므로, cos(120°)=sin(30°)=0.5cos(120\degree) = -sin(30\degree) = -0.5 이다.

BAR=[1000cos(30)sin(30)0sin(30)cos(30)]=[1000321201232]{}_{B}^{A}R = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos(30^\circ) & -\sin(30^\circ) \\ 0 & \sin(30^\circ) & \cos(30^\circ) \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \frac{\sqrt{3}}{2} & -\frac{1}{2} \\ 0 & \frac{1}{2} & \frac{\sqrt{3}}{2} \end{bmatrix}

이와 같이, 첫 번째 열은 XBX_B와 A 의 단위 벡터 세 개 각각의 코사인 값이고, 두 번째 열은 YBY_B 와 A 의 단위 벡터 세 개 각각의 코사인 값이다.

3. 좌표계의 평행이동

좌표계의 평행이동은 매우 단순하다.

좌표계 A의 원점을 (0,0,0)(0, 0, 0) 로 하는 글로벌 좌표계가 있다.

좌표계 B의 원점은 글로벌 좌표계 기준 (1,2,3)(1, 2, 3) 이다.

B 좌표계는 A 좌표계를 회전 없이 평행 이동한 결과이다.

아주 당연하게도, A 의 원점에서 B 의 원점까지의 벡터만큼 움직이면 된다.

이러한 벡터를 그림과 같이 정의할 수 있다.

A좌표계의 기준으로, B 좌표계의 원점까지의 벡터: APBORG=PBORGPAORG{}_{}^{A}P_{BORG} = P_{BORG}-P_{AORG}


이제 공간상 임의의 점 PP 에 대해 B 좌표계 기준 좌표값을 A 좌표계 기준 좌표값으로 나타낼 수 있다.

AP=APBORG+BP{}_{}^{A}P ={}_{}^{A}P_{BORG} + {}_{}^{B}P

4. Transformation Matrix, 변환행렬

이제 좌표계의 회전과 평행이동을 동시에 수식으로 나타낼 수 있다.

A 좌표계에서 B 좌표계의 원점으로 평행이동을 한 후, 좌표계가 틀어진 만큼 회전하면,

AP=BAR×BP+APBORG{}_{}^{A}P={}_{B}^{A}R\times {}_{}^{B}P+{}_{}^{A}P_{BORG}
A 좌표계 기준 P = B 좌표계 기준 P 를 A 좌표계와 평행하도록 회전 + A 원점에서 B 원점

위 수식을 행렬곱 하나로 나타낼 수 있다!

[ab01][c1]=[ac+b1]\begin{bmatrix} a & b \\ 0 & 1 \end{bmatrix} \begin{bmatrix} c \\ 1 \end{bmatrix} =\begin{bmatrix} ac+b \\ 1 \end{bmatrix}

이 행렬 수식을 이용하면, 회전과 평행이동을 하나의 행렬, [ab01]\begin{bmatrix} a & b \\ 0 & 1 \end{bmatrix} 로 나타낼 수 있다.

[AP1]=[BARAPBORG01][BP1]=[BAR×BP+APBORG1]\begin{bmatrix} {}_{}^{A}P \\ 1 \end{bmatrix} =\begin{bmatrix} {}_{B}^{A}R & {}_{}^{A}P_{BORG} \\ 0 & 1 \end{bmatrix} \begin{bmatrix} {}_{}^{B}P \\ 1 \end{bmatrix} =\begin{bmatrix} {}_{B}^{A}R\times {}_{}^{B}P+{}_{}^{A}P_{BORG} \\ 1 \end{bmatrix}

이렇게 만든 [BARAPBORG01]\begin{bmatrix} {}_{B}^{A}R & {}_{}^{A}P_{BORG} \\ 0 & 1 \end{bmatrix} 형태의 행렬을 TransformationTransformation, 변환행렬이라 하고,

BAT{}_{B}^{A}T 로 표기한다.

AP=BAT×BP{}_{}^{A}P={}_{B}^{A}T\times {}_{}^{B}P

예시

(0,0,0)(0,0,0) 을 원점으로 하는 좌표계 A,
(2,1,3)(2,1,3) 을 원점으로 하는 좌표계 B 가 있다.
좌표계 B는 A 에서 z축 방향으로 30°30\degree 만큼 회전하였다.

BP=[111]{}_{}^{B}P = \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix}

APBORG=[213]{}_{}^{A}P_{BORG} = \begin{bmatrix} 2 \\ 1 \\ 3 \end{bmatrix}

BAR=[cos(30°)sin(30°)0sin(30°)cos(30°)0001]{}_{B}^{A}R=\begin{bmatrix} \cos(30\degree) & -\sin(30\degree) & 0 \\ \sin(30\degree) & \cos(30\degree) & 0 \\0 & 0 & 1 \end{bmatrix}

[AP1]=[BARAPBORG01][BP1]\begin{bmatrix} {}_{}^{A}P \\ 1 \end{bmatrix} =\begin{bmatrix} {}_{B}^{A}R & {}_{}^{A}P_{BORG} \\ 0 & 1 \end{bmatrix} \begin{bmatrix} {}_{}^{B}P \\ 1 \end{bmatrix}
=[cos(30°)sin(30°)02sin(30°)cos(30°)0100130001][1111]=\begin{bmatrix} \cos(30\degree) & -\sin(30\degree) & 0 & 2 \\ \sin(30\degree) & \cos(30\degree) & 0 &1\\ 0 & 0 & 1 & 3\\ 0& 0& 0 & 1 \end{bmatrix} \begin{bmatrix} 1\\ 1\\ 1\\ 1 \end{bmatrix}
=[2.3662.36641],AP=[2.3662.3664]=\begin{bmatrix} 2.366 \\ 2.366 \\ 4\\ 1 \end{bmatrix}, \therefore {}_{}^{A}P = \begin{bmatrix}2.366\\2.366\\4 \end{bmatrix}

5. 다중 링크의 정기구학

위에서 굳이 변환행렬의 형태로 행렬 하나로 정리한 이유는 다중 링크의 경우에서 계산을 매우 쉽게 하기 위해서이다.

좌표계를 연속적으로 연결할 경우, 단순히 변환행렬을 연속으로 곱해주면 된다.

A->B

AP=BAT×BP{}_{}^{A}P={}_{B}^{A}T\times {}_{}^{B}P

A->B->C

AP=BAT×CBT×CP{}_{}^{A}P={}_{B}^{A}T\times {}_{C}^{B}T\times {}_{}^{C}P

2링크 변환행렬의 결과는 알아두면 좋다. 아래와 같다.

CAT=[BARCBRBARBPCORG+APBORG01]{}_{C}^{A}T = \begin{bmatrix} {}_{B}^{A}R \cdot {}_{C}^{B}R & {}_{B}^{A}R \cdot {}^{B}{P}_{CORG} + {}^{A}{P}_{BORG} \\ 0 & 1 \end{bmatrix}

6. 역방향 계산

지금까지는 말단 좌표계의 좌표를 글로벌 좌표계로 나타내었다.

이번에는 글로벌 좌표계 기준 좌표를 말단 좌표계 기준으로 구해보자.

아래의 식으로부터,

AP=BAT×BP{}_{}^{A}P={}_{B}^{A}T\times {}_{}^{B}P

다음 식을 유도할 수 있다.

BP=BAT1×AP{}_{}^{B}P={{}_{B}^{A}T}^{-1}\times {}_{}^{A}P

이 때 변환행렬의 역행렬은 다음과 같다.

ABT=BAT1=[BARBARAPBORG01]{}_{A}^{B}T = {{}_{B}^{A}T}^{-1} = \begin{bmatrix} {{}_{B}^{A}R}^\top & -{{}_{B}^{A}R}^\top \cdot {}^{A}P_{BORG} \\ 0 & 1 \end{bmatrix}

정기구학 다중 링크의 경우,

AP=BAT×CBT×CP,{}_{}^{A}P={}_{B}^{A}T\times {}_{C}^{B}T\times {}_{}^{C}P,

CBT1×BAT1×AP=CP{{}_{C}^{B}T}^{-1}\times {{}_{B}^{A}T}^{-1}\times {}_{}^{A}P={}_{}^{C}P

-> CP=BCT×ABT×AP,{}_{}^{C}P={{}_{B}^{C}T}\times {{}_{A}^{B}T}\times {}_{}^{A}P,

이런 식으로 계산하면 된다.

profile
생활속에 로봇이 있는 것이 당연한 미래를 꿈꿉니다

0개의 댓글