728x90
안녕하세요. 후니대디입니다.
SLAM 시리즈 첫번째로 SLAM의 개념부터 전체적인 pipeline을 포스팅하겠습니다.
정 의
SLAM은 Simultaneous Localization and Mapping 의 줄임말이고, SfM은 structure from motion의 줄임말입니다.
SLAM을 단어 그대로 해석해보면 위치추정 및 지도화를 동시에 한다? 라고 할 수 있습니다. 즉, 사전정보가 없는 공간에서 특정센서를 이용하여 위치를 tracking하고 주변 정보를 mapping하는 것을 의미합니다. 특별히 camera 센서를 이용한다면 visual SLAM이라고 명명하고 여기서는 visual SLAM을 중심으로 설명하겠습니다.
SfM은 camera센서를 통해 움직이면서 모은 frame들을 가지고 다시 reconstruction하는 것을 의미합니다.
차이점
SfM과 SLAM의 차이점을 이야기해본다면 공식적으로 차이점을 이야기한 Paper는 보지 못했으나 개인적인 경험으로 말씀드리겠습니다.
- Sequential
SLAM의 경우 frame들이 agent가 이동한 순서대로 처리됩니다(online). 이와 반대로 sfm은 피사체를 여러각도에서 사진을 찍고 한꺼번에 SfM알고리즘에 input으로 들어가게됩니다(offline). 그렇기 때문에 SfM 알고리즘에는 보통 feature corresponding을 통해 인접한 frame을 찾는 모듈이 있습니다. - Real-Time
사실 위의 sequential과 같은 맥락입니다. SLAM은 real-time을 SfM보다 강조되는 측면이 있습니다. - Rendering
SLAM은 Tracking을 위해 Mapping을 하는 측면이 있습니다. 즉, tracking최적화를 위해 mapping을 하는 경향이 있고 sparse map을 만드는 SLAM 알고리즘들을 보면 이를 느낄 수 있습니다. 이에 반해 SfM은 렌더링을 중요시합니다. reconstruction 이라는 말처럼 3D로 복원하려는 목적이 SLAM보다 강합니다.
camera 종류 및 특징
- mono camera
렌즈가 하나인 카메라로 최근에는 비교적 저렴하게 구입가능합니다.심지어 웹캠도 manual focus, 50fps 이상 저렴한 제품이 많습니다. 문제는 scale ambiguity가 발생합니다. 즉, 이미지에서의 크기만으로 실제로도 큰 물체인지 확신하기 어렵습니다. - stereo camera
mono camera와 달리 3차원 거리를 알 수 있습니다. 사람의 눈이 3차원 거리를 식별할 수 있는 것과 동일합니다. 하지만 depth(3차원 거리)를 알기 위해서는 computing resource가 많이 필요합니다. GPU or FPGA를 전용으로 둬 가속화하는 경우가 많습니다. - RGB-D
mono camera + ToF sensor입니다. 즉 mono camera sensor와 ToF(IR or Lidar..) 이 하나의 chip에 embedded된 센서입니다. ToF센서는 참고로 빛의 물체에 닿고 돌아오는 시간을 측정해서 depth를 추정하는 방식의 센서들을 통칭합니다. 아무튼 RGB-D 센서는 stereo camera와 다르게 센서단에서 depth를 알려주니 computing resource가 훨씬 적게 듭니다. 하지만 하나의 칩에 camera와 ToF센서를 이식해야하니 아무래도 ToF센서의 크기가 작아질 수 밖에 없습니다. 그렇기 때문에 depth range가 작습니다. 실제 경험해보면 spec에서는 12~14m라고 되어있어도 8m만 넘으면 매우 불안정한 데이터가 들어옵니다.
Classic SLAM pipeline
SLAM의 classic한 pipeline을 살펴보겠습니다.
- Front-end
odometry (pose라고 생각해도 무방합니만 pose는 어느 시점에서의 위치를 의미하고 odometry를 pose 궤적의 느낌으로 많이 사용합니다) 를 구하는 부분입니다. mono, stereo, RGB-D마다 구하는 방법이 다를 수 있으며 보통 SIFT, ORB 알고리즘을 통해 Feature를 뽑고 frame간의 corresponding matching과 camera geometry 의 수학적인 prior를 통해 odometry를 구하게됩니다. 최근에는 learning base로 많이 바뀌고 있습니다만 아직도 ORB SLAM이라는 오래된 method를 넘기에는 쉽지않습니다.. - Back-end
Loop closure와 Bundle Adjustment가 이 부분에 해당됩니다. front-end에서 추출한 odometry가 오차가 발생하면 시간이 지날수록 오차가 쌓이면서 GT와의 오차가 매우 커짐니다. 이 부분을 해결하기 위해 keyframe마다 BA를 적용하여 odometry를 최적화합니다. 구체적인 내용은 추후에 다루도록 하겠습니다. loop closure는 이미 지나간 위치를 또 다시 지나가면 BA처럼 전체적으로 optimization하는 method입니다. front-end의 방법론에 따라 loop closure가 없는 SLAM도 있습니다.
Reference
마지막으로 학습하기 좋은 material 을 reference에 첨부하겠습니다.
SLAM으로 유명한 airlab의 lecture note입니다.
sfm의 standard colmap paper입니다.
유명하신 Davide Scaramuzza교수님의 리뷰논문입니다.
중국 개발자, 학생들이 작업한 visual slam 학습 book입니다. 저의 커리큘럼도 해당 책을 따라 작성 할 예정입니다.