※ ORB SLAM과 ORB SLAM3 논문의 내용을 분석하였으며,
혹시 잘못된 부분이 있다면 지적해주시면 감사하겠습니다 🤗
: Local Mapping Thread에서는 아래의 과정이 수행됩니다.
KeyFrame insertion
Recent Map Points culling
New points creation
IMU intialization
Local KeyFrames culling
IMU Scale Refinement
※ new keyframe을 K_i로 정의
K_i에 대한 노드를 covisibility graph에 추가하고, spanning tree를 업데이트한다.
(a) keyframes (b) covisibility graph (c) spanning tree (d) essential graph
keyframe의 bags of words를 계산한다.
: Map points로 유지되기 위해서는 3개의 keyframe 동안 아래 조건을 만족해야 한다.
해당 map point가 있다고 추측되는 frame의 25% 이상에서 추적되어야 한다.
map point가 생성된 후, 최소 3개 keyframes에서 관찰되어야 한다.
K_i의 ORB feature와 covisibility graph K_c에 있는 ORB feature 간 triangulation을 통해 map point 위치를 추정
K_i의 feature 중 매치되지 않은 feature에 대해서는 동일한 bag of words에 속한 keyframes의 map point와 매칭
Local BA
: K_i와 K_c, 그리고 K_i와 K_c에 존재하는 모든 map points를 최적화
→ outlier로 생각되는 map points는 제거
: IMU 변수(속도, 중력 방향, IMU 편향)에 대한 좋은 초기값을 얻는 과정
visual-only MAP estimation
: Monocular SLAM을 통해 pose 값(T_k)을 얻음
Intertial-only MAP estimation
: Inertial 측정 값을 기반으로 사전에 정의된 모델을 사용하여 시스템의 초기 pose, 속도, 편향과 중력 방향을 추정
visual-inertial MAP estimation
→ inertial and visual 파라미터를 얻고 나면, reprojection error(우항)와 IMU residuals(좌항)를 cost로 joint visual-inertial optimization 수행
: keyframe 내 90% 이상의 map points가 다른 3개 이상의 keyframe에서 보이면 해당 keyframe은 제거
느린 운동을 하고 있을 때, 충분한 센서 값이 제공되지 못하면서 IMU 초기화가 수렴하지 못한다.
이 때, 초기화 변수에서 IMU 편향 값을 이전에 추정된 값으로 고정하고, 스케일과 중력 방향만 추정
→ 편향 값을 고정하면 노이즈 영향과 계산 복잡도 감소