이 게시글은 장형기님의 SLAM 기술 면접 질문 100선에 대한 제 나름대로의 답을 정리한 것입니다.
이것에 답을 하려면 graph slam에 대해 설명을 다시 할 수 밖에 없습니다.
graph slam은 node(pose) 와 Edge(constraint)으로 이루어져 있습니다.
이러한 Edge를 만족하도록 node를 최적화하는 것이 graph slam의 기본입니다.
Loop를 찾았다는 것은 현재의 장소와 아까 지나왔던 장소가 같다는 강력한 Constraint가 생기는 것입니다.
이러한 constraint를 기본으로 node를 최적화해야합니다.
모든 edge를 통해 추정된 상대 Pose와 우리가 얻은 Pose를 빼서 나오는 residual이 최소화 되도록 최적화를 진행합니다. 우리가 가진 edge (IMU,scan matching, loop closing) 이 많다면 최적화를 통해 더욱 정확한 현재 pose를 계산할 수 있습니다. 이것을 계산하는 과정에서 비선형 최적화가 필요한데 그것을 해주는 Tool이 g2o,GTSAM,ceres-solver 등 여러가지가 있습니다.
Graph optimization은 전역적으로 일관된 경로를 보장하는데 중점을 두고 여러 센서로 부터 얻은 Constraint를 활용합니다. 반면 bundle adjustment는 보통 한 장면이나 일정 범위 프레임에 대해 적용되어 정밀한 3D reconstruction에 사용됩니다. 그리고 graph optimization은 node만 최적화하는 반면 bundle adjustment는 pose와 point를 동시에 최적화하는 차이점이 있습니다.
저도 예전에 edge도 node로 계산된건데 optimization하면 똑같아 지지 않나라는 의문이 있었었는데 그것은 edge가 한가지로 고정되었을 때고 graph는 edge로 다양한 센서의 값과 loop closing factor를 받기 때문에 최적화가 가능한 것을 이해하고 조금 더 직관적으로 이해할 수 있었습니다. 항상 공부하기 전엔 이해하기 어려운데 공부하면 이걸 왜 이해못했지라는 생각이 드는 것 같습니다.