※ ORB SLAM과 ORB SLAM3 논문의 내용을 분석하였으며,
혹시 잘못된 부분이 있다면 지적해주시면 감사하겠습니다 🤗
A goal of visual SLAM
: use the sensors on-board a mobile agent to
1) build a map of the environment
2) compute in real time the pose of the agent in that map
: 카메라를 사용하는 Visual SLAM의 목적은 로봇에 대해 주변 환경에 대한 맵을 그리고 해당 맵에서 로봇의 위치를 실시간으로 추정하는 것이다.
ORB SLAM vs ORB SLAM2 vs ORB SLAM3
: ORB SLAM → monocular slam
: ORB SLAM2 → stereo, RGB-D slam (기존 단안 카메라에서 Stereo camera, RGB-Detph camera의 활용이 가능해졌다.)
: ORB SLAM3 → visual-inertial slam (IMU와의 fusion이 가능해졌다.)
ORB SLAM2
Stereo 카메라의 이점
Stereo 카메라는 epipolar line을 baseline과 동일하게 만드는 rectification 작업을 수행
좌, 우 이미지 feature가 동일한 선상에 그려지면서 feature matching의 효율이 올라감
epipolar plane system

: O와 O'에 각각 카메라가 위치하고, 동일한 점인 P 추정에 있어 feature matching의 효율이 향상된다.
RGB-D
왼쪽 이미지에서 ORB feature를 추출
Depth 이미지로부터 depth 추출 후 landmark 생성
가상의 우측 카메라를 생성하고, map point를 투영해 2D feature를 만듦
: 이를 통해 Stereo Camera를 활용할 때와 동일한 알고리즘을 적용할 수 있다.
Main novelties of ORB-SLAM3
1) A monocular and stereo visual–inertial SLAM system
2) Improved-recall place recognition
: 기존 SLAM → 3개의 연속 keyframe에서 매칭되는지 확인 → geometric consistency 확인
※ geometric consistency : pose, 3D position 추정 결과 검증
: ORB-SLAM3 → geometric consistency 확인 → 3개의 covisible keyframe에서 매칭되는지 확인
3) ORB-SLAM Atlas
: disconnected map을 여러 개 만들고, 모든 과정에 활용할 수 있음
: 다른 시간에서 만들어진 map을 합칠 수 있음
active map
tracking thread에서 들어오는 frame의 위치를 추정하고, 계속해서 최적화시킴
local mapping thread에서 새로운 keyframe을 추가하여 성장시킴
non-active map
4) An abstract camera representation
: pin-hole and fish-eye models 모두 적용 가능
A. Visual SLAM
ORB-SLAM
방향성과 회전 불변성을 갖는 ORB → short-term, mid-term DA
tracking과 mapping을 위해 covisibility graph 구축
DBoW2를 활용해 BoW 사용 → loop closing, relocalization → long-term DA
B. Visual-Inertial SLAM
: visual-Inertial sensors → poor texture, motion blur, occlusion(가려짐)에 robust + mono cam에서 IMU를 활용하여 makes scale
: ORB-SLAM-VI 기반에서 MAP estimation based fast initialization method 제안
Maximum-a-posteriori (MAP) estimation
실험적인 관찰을 통해 얻은 지식 + 사전에 알고 있는 정보를 기반으로 사후 데이터를 가장 잘 표현하는 확률 추정
Motion model : Proprioceptive sensing(odometry)의 수식
Observation model : Exteroceptive sensing(Camera, LiDAR)의 수식, landmark의 위치를 추정할 수 있게 함
※ 센서 데이터는 관측 후에 나타나는 사후 데이터
최대 사후 확률 추정 : 과거 데이터 확률 분포, 최적의 파라미터 값 등이 어떻게 되어야 현재 데이터가 가장 잘 표현되는지에 대한 최대 사후 확률을 구하는 문제
motion model과 observation model의 확률 분포를 찾고 그 확률 분포를 정확하게 표현하는 state 값을 찾는 것이 목표
motion model의 에러치^2 + observation model의 에러치^2 를 최소화하는 파라미터를 구함 (= joint optimization)

C. Multimap SLAM
: ORB SLAM3의 Atlas system → DBoW2를 기반으로
1) 새로운 place recognition 기술
2) local BA 기반 map merging
: ORB-SLAM3 = ORB-SLAM2 + ORB-SLAM-VI
1) Atlas : disconnected map set으로 구성된 multimap representation
active map
tracking thread에서 들어오는 frame의 위치를 추정하고, 계속해서 최적화시킴
local mapping thread에서 새로운 keyframe을 추가하여 성장시킴
non-active map
2) Tracking thread
센서 정보 처리
active map 기준 현재 프레임의 pose를 실시간으로 계산
reprojection error 최소화
현재 frame을 keyframe으로 넣을지 판단
visual-inertial mode에서는 최적화 cost에 inertial residuals(관성 잔차)를 포함시켜서 본체 속도와 IMU 편향을 추정
tracking을 놓치면, Atlas map 에서 현재 프레임을 relocalize
일정 시간이 지나면 active map은 non-active map으로 넘어가고 새로운 active map이 initialize됨
3) Local mapping thread
active map에 keyframes와 map points 추가 혹은 제거
Local BA(현재 프레임과 가까운 최근 N개 keyframe을 이용)를 통한 map 보정
inertial case에서, MAP estimation을 통해 IMU 파라미터 초기화 및 보정
4) Loop and map merging thread
active map과 Atlas 전체에서 공통 지역(A라고 하자)을 검출
A 지역이 active map 내에서 검출되면 loop correction 수행
A 지역이 Atlas 내 disconnected map 중 하나에서 검출되면, active map과 merge
loop correction 이후, 독립 스레드에서 full BA로 맵 보정 (실시간 성능에 영향 X)
: 기존의 SLAM이 Pin-hole 카메라 모델을 주로 사용했으나, 이번 ORB SLAM3에서는 fish eye model이 추가됨
: fish eye model은 180도 이상의 Field of View 를 가져 정규화가 불가능하고 이미지 영역마다 reprojection error가 다르기 때문에 Pin-hole 카메라와 동일하게 처리할 수 없음
A. Relocalization
: projection rays를 입력으로 사용하는 maximum likelihood perspective-n-point algorithm 사용
: 기존 solvePnP 방법 → ORB feature와 3D world map point 정보를 활용해 카메라 위치 추정
: maximum likelihood perspective n point algorithm → 최대 우도(확률) 원리를 사용, 2D-3D 포인트 사이의 카메라 위치를 추정하고 추정한 위치를 재투영하여 재투영 오차를 기반으로 최대 우도를 계산해 최적화하는 과정을 거친다.
B. Nonrectified Stereo SLAM
: 대부분의 스테레오 카메라에도 정규화를 사용하나, 스테레오 fisheye 카메라는 정규화를 적용하면 잘리는 부분이 많으므로 사용이 어려움
: 스테레오 카메라를 둘 사이 일정한 변환 관계가 유지되며, 동일한 영역을 보고 있는 두 개의 단안 카메라로 가정
→ 이러한 가정을 기반으로 BA 최적화에서 맵 규모를 효과적으로 추정하고, 실제 크기의 랜드마크를 triangulate 할 수 있음
A. Fundamentals
estimated state in visual SLAM → current camera pose
estimated state in visual-inertial SLAM → {body pose, velocity, gyroscope biases, accelerometer biases}
estimated state 내 변수들을 활용하여 IMU의 잔차를 정의
→ IMU 잔차(좌항)와 reprojection error(우항)를 활용하여 visual-inertial 최적화 문제를 아래와 같이 정의할 수 있다.
B. IMU intialization
1) monocular SLAM에서 매우 정확한 initial map을 제공하지만, scale을 알 수 없음
2) scale은 BA 대신 최적화 변수로 둘 때 더 빠르게 수렴
3) IMU initialization동안 센서의 불확실성은 무시
센서 불확실성을 고려하기 위해서 IMU initialization을 MAP estimation problem으로 생각하고 아래 3 단계로 나눈다.
1) Vision-only MAP estimation
: pure monocular SLAM을 2초동안 진행하고 4Hz의 keyframe을 추가한다. 이 기간(2초) 후에 최대 10개의 카메라 pose와 몇백개의 points를 BA를 통해 얻는다. 이 값들은 body reference로 변환되어 trajectory를 얻을 수 있다.
2) Inertial-only MAP estimation
Inertial 측정값과 T_k에 대한 keyframe을 통해 MAP estimation 수행 → IMU 변수(속도, 중력 방향, IMU 편향) 초기값을 얻음
3) Visual-Inertial MAP estimation
D. Robustness to Tracking Loss
1) Short-term lost
: IMU를 통해 body pose를 얻고, map points를 pose 기반으로 투영하여 large image window에서 매칭을 찾는다.
: 매칭된 결과는 visual-inertial optimization된다.
2) Long-term lost
: 새로운 visual-inertial map이 생성되고 active map이 된다.
1) Atlas 내 keyframes와 새 keyframe을 지속적으로 matching → 매칭되면 loop closure 수행
2) 새 keyframe과 matching map 간 상대적 pose를 추정 → local window라고 정의
KeyFrame
: 두 frame 사이의 상대적 포즈를 추정할 때 주변 환경의 기하학적 특성을 잘 묘사할 수 있는 feature가 풍부한 frame
Bag of Words (BoW)
: feature 정보를 k-means clustering 기법으로 분류해서 여러 개의 visual vocabulary로 만들고 이미지를 이 vocab으로 표현하는 방식
: visual vocabulary는 사전에 offline에서 만들어진다.
Bundle Adjustment
→ BA의 목표는 camera pose와 3D position 최적화이다.
: 3D point를 카메라 포즈 기반으로 투영하고, 실제 2D point와의 reprojection error를 계산한다.
: least squares optimization을 수행 → 2D reprojection error의 제곱이 최소 값을 갖는 pose와 3D position 해를 구한다.
(이 때, noise 분포가 gaussian 분포를 따른다는 가정을 한다 → MLE 문제로 수렴)
(MLE 문제는 정답이 통계적으로 optimal 함을 수식적으로 보장)