Visual-SLAM vs VIO

모바일로 글을 보신다면 ‘데스크탑 버전으로 보기’를 누르시면 좀 더 보기 쉽습니다

예상 면접 질문

  1. Visual-SLAM과 VIO의 차이점이 무엇인가요?
  2. VIO는 왜 쓰나요? Visual-SLAM 만으로는 안되나요?
  3. 오픈소스로 공개된 VIO에는 어떤게 있을까요?

 


간단하게 이야기하면… 3D pose + 3D map point를 구하고 싶을 때,

  1. 카메라만 사용하면 Visual-SLAM
  2. 카메라 + 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)라고 표현하는 방법도 생김 (하지만 정식 단어는 아님)
  • 유명한 오픈소스 프로젝트
    • 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 설계에 따라 다름)