lastnamesong

[Transformation Matrices] Homogeneous Transformation 본문

Robotics/Geometry

[Transformation Matrices] Homogeneous Transformation

응솩이 2023. 10. 15. 22:22
반응형

 

 

Rotation의 경우 rotation matrix, Euler angle를 이용해 표현하는 방법에 대해 공부했다. 좌표계에서의 변환에서는 rotation (회전) 뿐만 아니라 translation (평행이동) 또한 존재한다. 이번 글에서는 이 둘을 모두 포함하는 변환의 표현 방법과 수학적인 의미에 대해 공부해본다.


- Homogeneous Transformation

벡터나 회전을 표현하는 방법이 다양하기 때문에, 자료마다 표현하는 방식이 조금씩 다를 수 있다.

여기서 정의한 표현 방식 (e.g., \( r^{0}_{1} \)과 \( R^{0}_{1} \))은 블로그의 로봇 관련 글에서 계속 쓰일 수 있으니 참고하면 좋을 것 같다.

Rotation matrix와 vector의 쌍으로 rigid body의 configuration을 설명하거나, 벡터를 원하는 좌표계에서 표현할 수 있다.

Rotation matrix를 설명 (아래 링크 참고)할 때 좌표계의 변환에 대해서는 설명을 했으니 바로 homogeneous transformaiton matrix에 대해서 알아보자.

 

[Coordinate] 회전, 회전변환행렬 (Rotation, Rotation Matrix)

로봇의 움직임을 분석하고, 제어할 때 가장 기본이 되는 것이 "좌표계"에 대한 개념이다. 이는 로봇공학 뿐만 아니라 항공, 인체 동작 분석 등에서도 매우 중요한 개념이다. 예를 들어서 보행 로

lastnamesong.tistory.com

- Homogeneous Transformation Matrix

위의 그림에서 \( \{1\} \)에서 표현되어 있는 벡터 \( p \)를  \( \{0\} \)에서 표현하고자 할 때에는 두 좌표계 사이의 거리 벡터 (translation)와 좌표계의 orientation을 변환 (rotation matrix)할 필요가 있다. \( p^{0} \)는 벡터의 합과 rotation을 통해 어렵지 않게 계산할 수 있다.

$$ p^{0} = r^{0}_{1} + R^{0}_{1} p^{1} $$

이 식은 행렬과 벡터의 곱셈과 벡터의 덧셈을 함께 필요로 한다. 이를 행렬과 벡터의 곱으로만 표현하기 위해 homogeneous coordinates를 도입한다. 3차원 벡터인 \( p \)에 1을 추가해줌으로써 완성되며, 위의 식을 아래와 같이 새로 쓸 수 있다.

$$ T^{0}_{1}\begin{bmatrix}p^{1} \\ 1 \end{bmatrix} = \begin{bmatrix} R^{0}_{1} & r^{0}_{1} \\ 0 & 1 \end{bmatrix} \begin{bmatrix}p^{1} \\ 1 \end{bmatrix} = \begin{bmatrix} R^{0}_{1} p^{1} + r^{0}_{1} \\ 1 \end{bmatrix} = \begin{bmatrix}p^{0} \\ 1 \end{bmatrix} $$

여기서 \( T^{0}_{1} = \begin{bmatrix} R^{0}_{1} & r^{0}_{1} \\ 0 & 1 \end{bmatrix} \)을 homogeneous transformation matrix라고 하며, 마지막 행은 0으로 이루어진 \( 1 \times 3 \)의 크기를 갖는 벡터 (i.e., \( \begin{bmatrix} 0 & 0 & 0 \end{bmatrix} \) )이다.

이 homogeneous transformation matrix로 이루어진 집합을 special Euclidian group (\( SE(n) \))이라고 한다.

기본적인 homogeneous transformation matrix. 이로써 rotation과 translation을 하나의 행렬로 표현 가능하다.

3차원에서의 homogeneous matrix는 \( SE(3) \)의 원소이며, 이 \( SE(3) \)는 앞서 공부했던 \( SO(3) \)와 같이 몇 가지 특징을 갖는다.

- Properties of \( SE(3) \)

\( T_{1}, T_{2}, T_{3} \in SE(3) \)에 대해, 

  • \( T^{-1} = \begin{bmatrix} R & r \\ 0 & 1 \end{bmatrix}^{-1} = \begin{bmatrix} R^{-1} & -R^{-1}r \\ 0 & 1 \end{bmatrix} \in SE(3) \) : inverse element
  • \( T_{1}T_{2} \in SE(3) \) : closed under multiplication
  • \( T_{1}(T_{2}T_{3}) = (T_{1}T_{2})T_{3} \) : associativity
  • \( T_{1}T_{2} \neq T_{2}T_{1} \) : not commutative

곱셈에 대해 닫혀있고, 교환법칙이 성립하지 않는다는 점에서 \( SO(3) \)와 매우 유사한는 것을 확인할 수 있다. 그 중에서 inverse에 대해 조금 더 들어가보면, rotation matrix의 inverse는 그 transpose와 같은 값을 가졌다. 하지만 homogeneous transformation matrix는 성립하지 않는다.

$$ T^{-1} \neq T^{T} $$

Rotation matrix에서는 transpose와 inverse가 같은 값을 가졌기 때문에 실제 쓰일 때 (i.e., \( R^{0}_{1} \)과 \( R^{1}_{0} \)과 같이 reference frame을 뒤집는 변환) 둘 중 어떤 것을 쓰더라도 차이가 없었다. 하지만 homogeneous transformation에서는 그 둘이 다르다는 것을 명심하고 사용하도록 하자.

Homogeneous transformation의 역행렬에 대한 고찰

위에 그림으로 표현했듯, \( R^{1}_{0}(-r^{0}_{1}) = r^{1}_{0} \)이다. 따라서 역행렬의 사용이 필요하다 (transpose는 어떤 의미를 갖지는 않는다.)

$$ [T^{0}_{1}]^{-1} = T^{1}_{0} $$

- Consecutive Homogeneous Transformation Matrix

위 그림에서, \( \{1\} \)을 거쳐서 \( \{2\} \)로 가는 것과 바로 가는 것의 차이가 없음을 정리했던 것이다. Reference frame과 objective에 대한 notation이 헷갈릴 때 직접 적으면서 정리하고자 했었다. 참고용으로 읽어만 보시길..

- MATLAB Examples

많이 사용하지는 않았던 것으로 기억하지만, rotation matrix를 homogeneous transformation matrix로 변환해주는 MATLAB 함수가 존재한다. 바로 rotm2tform이다.

MATLAB rotm2tform

R2022b 버전부터는 조금 더 범용적으로 사용할 수 있는 내장함수가 나온 듯 하다. 아래 링크를 참고하면 연구와 공부에 도움이 될 수 있을 것이다. 아니면 MATLAB 명령창에서 help se3를 통해 정보를 얻을 수 있을 것이다.

 

SE(3) homogeneous transformation - MATLAB - MathWorks 한국

SE(3) homogeneous transformation since R2022b

kr.mathworks.com


Homogeneous transformation을 통해 다양한 위치와 자세 변환을 간단하게 표현할 수 있으며, 다른 변환을 결합하여 복잡한 작업을 수행할 수 있다. 로봇 분야 외에도, 그래픽 디자인 및 항공 우주 공학 분야에서 homogeneous transformation은 정확성과 효율성을 제공하며, 다차원 공간에서 물체의 상태를 관리하는 핵심 도구이다. MATLAB에 새로운 함수로 사용하기도 수월 할 것으로 생각된다.

반응형