Introduction 앞선 포스트에서는 회전을 직관적으로 표현할 수 있는 Euler Angle과 Axis-Angle Rotation에 대해 다뤘습니다. 하지만 직관적인 대신 Euler angle은 Gimbal lock, Axis-Angle rotation은 높은 연산량으로 인해 실시간이며 높은 정확도를 요구하는 SLAM에서는 실제 적용이 어렵습니다. 이런 문제를 해결하기 위해 벡터의 등장과 함께 거의 사장되었던 사원수(Quaternion)가 재조명되었는데, 이는 벡터의 등장 이전에 3차원을 표현하기 위해 제안된 방식이었습니다. 사원수의 성질 자체는 매우 간단하지만, 회전과 무슨 관계가 있길래 사용하는지 그 원리에 대한 이해는 꽤 어렵습니다. 하지만 이를 모르면 사원수는 단순히 회전을 표현하기 위해 끼워..
Introduction 앞선 포스트에서는 3차원 공간에 존재하는 어떠한 점(point)이나 벡터(vector)는 어떤 좌표계(coordinate system)에서 보는지에 따라 다른 좌표(coordinate)를 가지고 있음을 살펴보았습니다. 그리고 좌표계간 상관관계를 이용해 변환 행렬을 구해봤는데요. 이를 통해 획득한 $\mathbf{R}$(rotation matrix), $\mathbf{t}$(translation vector), 그리고 $\mathbf{T}$(transformation matrix)는 머리로는 이해되나 가슴으로는 잘 이해가 되지 않을 것입니다. 특히 회전과 관련된 성분들은 최종 결과물만 보고서 도대체 이 행렬은 얼마나 회전시키는 녀석인지, 아니면 이게 회전 행렬은 맞는지 한눈에 알아볼..
Introduction 이전 포스트에서 설명한 것처럼, 카메라는 움직임에 따라 크기와 모양이 달라지지 않는 강체(rigid body)입니다. 그래서 SLAM에서의 3D 변환은 회전(rotation)과 평행 이동(translation)만 고려합니다. 여기에 추가로 앞서 좌표계(coordinate system)에 대해서 다뤘습니다. 점(point)이나 벡터(vector)를 어느 좌표계에서 바라보는지에 따라 좌표(coordinate)가 달라지게 됩니다. SLAM에서 필수적으로 다루게 될 World coordinate과 Camera coordinate을 예시로 들어보겠습니다. 벡터 $\mathbf{p}$에 대해 World 좌표계에서 본 $\mathbf{p_w}$와 Camera 좌표계에서 본 $\mathbf{p_..
Introduction 우리가 흔히 보는 2D 영상 이미지에는 많은 변환 방법이 존재합니다. 강체 변환, 닮음 변환, Affine 변환 등 다양한 알고리즘이 존재하는데, 이는 본 포스트에서는 다루지 않을 예정입니다. SLAM에서 궁금한 부분은 3차원 공간에서 내가 어떻게 움직이고 있는지입니다. 즉, 3차원 공간에서 카메라가 어떻게 움직이고 있는지 구하는 게 최종 목표이며, 카메라는 크기가 변하거나 왜곡이 생기지 않습니다. 따라서 카메라를 하나의 강체(Rigid body)로 볼 수 있으며, 3D transform은 3D rigid body transform 문제로 요약됩니다. 이는 다른 말로 euclidean transform이라고 하며, 형태와 크기를 유지한 채로 위치(translation)와 회전(ro..