이 글은 Tranform Matix의 전부를 설명하지는 않습니다. Transform Matrix의 의미를 자주 까먹어 정리하기 위한 용도의 글이며, 기초적인 내용을 서술하고 있지 않습니다. 다양한 분야에서 Transform Matrix를 사용하지만, 이 글에서는 SLAM에서 Pose로 Transform Matrix를 사용할 때의 내용을 담고 있습니다.
Transform Matrix()의 에 해당하는 Translation의 의미는 local coordinate Origin 의 위치다.
즉, 이 Global Coordinate Origin 으로 부터 ()만큼 떨어져 있다면 의 마지막 열은 다음과 같다.
여기서, 의 축은 Global Coordinate Axis이다.
이 글에서의 회전은 가장 회전을 직관적으로 이해할 수 있는 Euler Angle로 표현합니다. 회전을 표현할 수 있는 다른 방식인 Querternion과 Axis Angle도 있지만 결국 Transform Matrix의 Rotation term으로 가져왔을 때의 local coordinate의 회전을 표현한다는 의미는 같습니다.
오일러 앵글은 Roll(), Pitch(), Yaw()를 가지고 회전을 표현하는 방법이다.
가장 보편적으로 Z축 → Y축 → X축 순으로 회전하며, 각 회전축은 Global Axis가 아닌 Local Axis를 기준으로 회전한다.
def euler_to_rotation_matrix(roll, pitch, yaw):
roll, pitch, yaw = np.deg2rad(roll), np.deg2rad(pitch), np.deg2rad(yaw)
R_z = np.array([[np.cos(yaw), -np.sin(yaw), 0],
[np.sin(yaw), np.cos(yaw), 0],
[0, 0, 1]])
R_y = np.array([[np.cos(pitch), 0, np.sin(pitch)],
[0, 1, 0],
[-np.sin(pitch), 0, np.cos(pitch)]])
R_x = np.array([[1, 0, 0],
[0, np.cos(roll), -np.sin(roll)],
[0, np.sin(roll), np.cos(roll)]])
R1_0 = R_z @ R_y @ R_x
return R1_0
위 함수로 생성된 Matrix는 회전한 좌표계에서 바라본 점의 좌표()를 변환되기 전 좌표계에서 바라본 점()으로 변환하게 된다
즉, 회전 매트릭스는 2가지 의미를 내포하고 있다.
1. 현재 Local Coordinate이 Global Coordinate기준 어떤 Rotation Pose를 가지고 있는지
2. Local Coordinate의 점을 Global Coordinate으로 변환하는 매트릭스