Visual-SLAM vs VIO
모바일로 글을 보신다면 ‘데스크탑 버전으로 보기’를 누르시면 좀 더 보기 쉽습니다
예상 면접 질문
- Visual-SLAM과 VIO의 차이점이 무엇인가요?
- VIO는 왜 쓰나요? Visual-SLAM 만으로는 안되나요?
- 오픈소스로 공개된 VIO에는 어떤게 있을까요?
답
간단하게 이야기하면… 3D pose + 3D map point를 구하고 싶을 때,
- 카메라만 사용하면 Visual-SLAM
- 카메라 + IMU를 사용하면 Visual-inertial odometry (VIO)
Visual odometry가 아니라 Visual-SLAM이 되려면 global consistency가 유지되어야하는데 (i.e. 동네 한바퀴를 돌고와서 원점으로 왔을 때, 위치 정보와 scale이 정확하게 맞아떨어져야함), 이는 loop closure와 같은 기능으로 해결할 수 있어야한다. (Visual odometry만으로 위치정보와 scale이 정확하게 맞아떨어지면 그것도 SLAM이라고 할 수 있다. 하지만 실제로는 거의 불가능하기 때문에 학계에서는 잘 받아드려지지 않는 전제이다.)
Visual-SLAM과 VIO 모두 Monocular, Stereo, Multi-camera, RGB-D 형태를 가질 수 있다.
Visual-SLAM
- 카메라만 사용해서 3D pose + 3D map point를 구하는 방법
- 최근 연구는 주로 graph-optimisation 기반의 SLAM 백엔드를 사용함
- Total reprojection error를 최소화하는 방향
- 유명한 오픈소스 프로젝트
- Monocular: MonoSLAM, PTAM, ORB-SLAM, SVO, DSO
- Stereo: ORB-SLAM2, Stereo-DSO, ProSLAM
- RGB-D: KinectFusion, ElasticFusion, BundleFusion
- VIO 보다 적은 계산량
- 카메라만 있으면 작동할 수 있음
- 카메라가 잘 작동하지 않는 상황에서는 Visual-SLAM도 잘 작동하지 못함
- e.g. 하얀 벽을 바라보며 feature가 전혀 뽑히지 않을 때
- e.g. 반복되는 패턴이 연속적으로 나타나서 제대로 된 피쳐 매칭이 되지 않을 때
- e.g. 너무 어둡거나 너무 밝아서 아무것도 보이지 않을 때
Visual-inertial odometry (VIO)
- 카메라와 IMU를 사용해서 3D pose + 3D map point를 구하는 방법
- 최근 graph-optimisation 기반 백엔드가 유행하기 시작했으나, 시중 제품 중에는 아직 filter 기반의 소프트웨어가 많음 (e.g. Google ARCore, Apple ARKit)
- IMU pre-integration 연구 이후 가능해짐
- 이전에는 IMU 값을 보정 전/후로 state propagation을 두번 해야했지만, pre-integration 이후로 한번만 해도 되게 만들면서 동시에 수많은 센서 관측치를 단 하나의 관측치로 정리할 수 있게 됨.
- Graph-optimisation 기반의 방식이 발전하면서 loop closure 기능을 갖추게 됨
- 초창기의 loop closure가 없는 VIO와 구분하기 위해 VINS (Visual-Inertial System)라고 표현하는 방법도 생김 (하지만 정식 단어는 아님)
- IMU pre-integration 연구 이후 가능해짐
- 유명한 오픈소스 프로젝트
- Monocular: MSCKF, OKVIS, ROVIO, VINS-Mono, ORB-SLAM3
- Stereo: S-MSCKF, VI-DSO
- RGB-D: ElasticFusion+IMU
- 카메라와 IMU는 센서 특성상 서로의 단점을 보완함
- e.g. 어두운 곳에서 카메라가 아무것도 보지 못할 때, IMU 센서는 계속 pose 추정 가능 (VIO 설계에 따라 다름)
- Monocular의 경우 카메라만 사용했을 때는 얻어낼 수 없는 metric scale 정보를 IMU motion을 통해 추정 가능 (i.e. up-to-scale 맵이 아닌 실제 세상의 scale을 가질 수 있음)
- 더 많은 최적화 constraint로 얻어내는 높은 정확도
- 카메라 피쳐 트랙킹을 할 때 모션모델 가설 대신 IMU 센서로 얻은 모션 사용 가능
- 실제 센서 값을 사용함으로써 탐색 범위를 축소 가능
- 더 많은 최적화 constraint로 인한 많은 계산량
- 고성능 CPU를 요구할 수 있음
- 카메라-IMU 간의 정확한 캘리브레이션이 필요
- 양산을 할 경우 추가 공정 필요
- 두 센서 중 하나가 실패하면 전체가 실패함 (VIO 설계에 따라 다름)