[논문스터디] ORB-SLAM: a Versatile and Accurate Monocular SLAM System

Estelle Yoon·2025년 2월 15일

Study

목록 보기
1/8

Bibtex 인용

@ARTICLE{7219438,
  author={Mur-Artal, Raúl and Montiel, J. M. M. and Tardós, Juan D.},
  journal={IEEE Transactions on Robotics}, 
  title={ORB-SLAM: A Versatile and Accurate Monocular SLAM System}, 
  year={2015},
  volume={31},
  number={5},
  pages={1147-1163},
  keywords={Simultaneous localization and mapping;Cameras;Optimization;Feature extraction;Visualization;Real-time systems;Computational modeling;Lifelong mapping;localization;monocular vision;recognition;simultaneous localization and mapping (SLAM);Lifelong mapping;localization;monocular vision;recognition;simultaneous localization and mapping (SLAM)},
  doi={10.1109/TRO.2015.2463671}}

요약

  • 크고작은 실내외 환경에서 작동하는 실시간성이 있는 피쳐베이스 모노 카메라 slam 시스템을 제안함
  • 심한 움직임에 의한 잡음에도 불구하고 완전 자동 초기화와 더불어 광범위한 범위의 loop closing과 relocalization을 제공함
  • survival of fittest 전략을 통한 포인트 선정과 키프레임을 통한 재구성으로 강건성을 확보하고 scene content가 변했을떄만 맵을 확장하는 방식으로 life-long 작동을 구현함
  • popular한 데이터 셋의 27개 시퀀스로 테스트했을떄 SOTA를 달성했다.
  • 코드 공개 - ORB SLAM GIT

인트로

  • BA는 카메라 localization과 sparse geometrical 재구성을 제공함
  • 실시간 slam은 아래의 것들을 BA에 제공해야함
    1. 키프레임 하위 집합 간 scene feature observation
    2. 중복 없는 키프레임 선택
    3. 정확한 결과 도출을 위한 키프레임과 포인트들의 강력한 네트워크 구성
    4. 비선형 최적화를 위한 초기 키프레임 포즈 및 point 위치 추정
    5. 확장성을 달성하기 위해 최적화에 중점을 준 로컬 지도
    6. 실시간 loop closing 을 위한 빠른 전역 최적화 능력

기여

  • 모든 task(tracking, mapping, relocalization, loop closing)에 대해서 동일한 feature 사용
  • 전역 맵의 크기와 독립적인 local covisible area에 집중된 tracking과 mapping을 위한 covisibililty 그래프
  • pose 그래프 최적화 기반 실시간 loop closing
  • 시점과 조도와 무관한 실시간 카메라 relocalization
  • model selection에 기반한 새로운 automatic하고 robust한 초기화
  • survival of fittest 전략을 이용한 맵 point와 키프레임 선택

  • Place Recognition
  • Map Initialization
  • Monocular Simulraneous Localization and mapping

System overview

A. Feature Choice

  • mapping tracking, place recogniion에 동일한 feature를 사용해서 같은 frame rate에서 relocalization 과 looop closing을 수행
    • 기존과 다르게 feature에 depth정보를 interpolate할 필요가 없음
  • 멀티 스케일 FAST w.256bit descriptor의 ORB 특징을 사용함
    • 실시간성을 위해 특징 추출에 33ms 이상 걸리지 않아야 함 - SIFT, SURG, A-KAZE 제외
    • general한 place recognition을 윟 회전 불변성이 필요함 - BRIEF, LDB 제외

B. Three Threads: Tracking, Local Mapping, and Loop closing

  • 세개의 threads(tracking, local mapping, loop closing)은 parallel하게 작동함

  • Tracking

    • 이전 프레임과 feature 매칭을 수행, motion only BA를 이용하여 pose를 최적화
    • tracking에 실패시, place recognition 모듈을 사용해서 global relocalization을 수행
    • 카메라 포즈와 feature 매칭에 의한 초기 추정이 이루어질 시, key frame의 covisiblilty 그래프를 기반으로 local visible map을 계산
    • reprojection기반 local map point 선정 후, 해당 point전부에 대해 camera pose를 최적화
    • 새로운 키프레임으로 해당 프레임 삽입할지 결정
  • Local Mapping

    • 새로운 ket frame에서 matching되지 않는 feature들에 대해 covisible 그래프에서 연결된 key frame에 matching이 있는지 확인
    • 찾은 matching point들 기반으로 새로운 point 삼각측량
    • tracking에서 수집된 정보 기반 high quality point들만을 유지하는 culling 정책 사용
    • 중복된 key frame도 culling
    • local mapping 자세한 내용은 뒤에
    • 새 key frame마다 loop 탐지
    • 탐지 시, 축적된 drift를 similarity transformation을 통해 계산
    • 혁신점은 최적화를 Essential Graph: sparser subgraph of the covisibility graph를 사용함

C. Map Points, Keyframes, and their selection

  • 모든 map point는 아래의 정보를 포함함
    • 3D position in world 좌표계
    • viewing 방향의 평균 단위 벡터 - keyframe의 중점과 point를 잇는 방향
    • ORB descriptor, 연관된 모든 keyframe들에 있는 다른 descriptor들과 hamming거리가 최소인 것
    • point가 관측가능한 최대 최소 거리
  • 모든 keyframe은 아래의 정보를 포함함
    • world camer rigid body transformation을 위한 camera pose
    • camera intrinsics
    • 모든 frame에서 추출된 ORB feature
  • 모든 map point와 keyframe은 관대한 정책에 의해서 생성되고 이후에 엄격하게 culling 함

D. Covisibiity Graph and Essential Graph

  • Covisibility Graph
    • 방향성 없는 weighted graph로 나타냄
    • 각 노드는 keyframe
    • 동일한 map point에 대해 observation을 공유할 경우 엣지를 가짐
    • weight는 공유하는 map point의 개수
  • Essential Graph
    • Covisibility Graph를 모두 사용하면 너무 dense하니까 모든 노드(keyframe)은 포함하되 적은 edge를 포함하는 그래프
    • 새 keyframe 추가 시, 가장 많은 point observation을 공유하는 keyframe 쪽에 연결됨
    • 아래의 것들을 포함함
      • spanning tree - 초기 keyframe으로부터 점진적으로 구성됨
      • Covisibility graph의 edge의 subset - 높은 covisibility를 가진 edge만
      • loop closing 하는 edge들

E. Bags of Words Place Recognition

  • DBoW2 기반
  • loop detection이랑 relocalization에 사용
  • Visual words는 descriptor space의 discretization임
    • 사전에 추출힌 ORB descriptor로 오프라인 상에서 만들어짐
  • invert index로 해당 keyframe에 저장 - 효율적
  • 다른 keyframe에도 중첩될 수 있어서 unique하게 높은 점수를 갖는 keyframe이 존재하지 않을 수 있음
    • covisibillity graph로 연결된 keyframe들 그룹화해서 해결
  • 해당 vocabulary tree에서 동일한 level에 있는 node들만 고려
    • brute force - 이전 프레임의 모든 feature를 가져와서 다음 프레임의 모든 feature와 비교하는 방식 - feature matching 시에 이점이 있음
    • 삼각 측량, loop detection, relocalization에도 사용

Automatic Map Initialization

  • Automatic Map Initialization의 목표
    • 초기 맵 포인트 삼각측량을 위한 두 frame 간의 relative pose 계산
    • scene에 독립적으로 작동
    • 두 view를 선택하는 과정에서 사람의 개입 완전 배제
  • 두 개의 geometrical 모델을 병렬적으로 계산
  • 휴리스틱을 이용하여 두 모델 중 한 개 선택, 선택된 모델로 상대 pose 복구
  • 두 view의 configuration이 안정할 때만 initialization 수행
  • 낮은 parallax 상황이나 two-fold planer ambiguity를 감지해서 corrupted 맵 initialization을 방지

1. Initial correspondence 찾기

현재 frame에서 ORB feature 추출, reference frame에서 match 검색
충분한 match 없으면 reference frame 재설정

2. 두 모델 병렬 계산

호모그래피, fundamental 행렬 병렬 스레드 계산
xc=Hcrxr, xcTFcrxr=0x_c = H_{cr} x_r ,~x_c ^T F_{cr} x_r = 0 이용, 각각 DLT/8point 알고리즘 사용, RANSAC 방식 적용
두 모델의 procedure 통일을 위해 사용 point 수와 iteration 수 동일하게 고정
매 iteration마다 두 모델에 대해 score 계산

SM=[ρM(dcr2(xci,xri,M))+ρM(drc2(xci,xri,M))]S_M = \sum [ \rho _M (d^2_{cr} (x_c^i , x_r ^i , M)) + \rho _M (d^2 _{rc} (x_c ^i , x_r ^i , M ))]
ρM(d2)={Γd2if d2<TM0if d2TM\rho _M (d^2 ) = \begin{cases} \Gamma - d^2 & if ~ d^2 < T_M \\ 0 & if ~ d^2 \geq T_M \end{cases}
d2d^2: 두 프레임 간 대칭 전이 오차
TMT_M: 95% 신뢰 수준의 χ2\chi ^2 기반 이상치 제거

가장 점수 높은 호모그래피/기본행렬 사용
인라이어 충분하지 않으면 1.로 돌아가서 다시 시작

3. 모델 선택

평면적, parallax가 작으면 호모그래피 사용
fundamental matrix 사용시 pose recovery가 잘 되지 않음

비평면적, parallax가 크면 fundamental 매트릭스 사용
호모그래피로는 평면 위나 낮은 parallax인 match들에 대해 부분적으로 활용 가능

선택에 사용되는 휴리스틱은 RH=SHSH+SΓR_H= {S_H \over {S_H + S_\Gamma }} 사용 0.45보다 크면 호모그래피 선택

4. motion recovery에서 모션과 structure

호모그래피의 경우 Faugeras and Lustman 방법 사용해서 8개 모션 가설 수립
8개의 직접 삼각측량하고 match들이 모두 카메라 앞에 위치하고 작은reprojection error를 가지는 가설이 있는지 확인
명확한 가설이 없다면 1로 돌아감 - 모호성 해결로 robustness 확보

fundamental matrix의 경우 캘리브레이션을 통해서 essential matrix로 변환
특이값 분해 방법 이용 4개의 가설 수립 후, 동일하게 삼각측량부터 진행

5. Bundle adjustment

full BA 진행


Tracking

A. ORB feature 추출

  • 8개의 스케일 레벨에서 FAST 코너 추출
  • 해상도 512 × 384에서 752 × 480 픽셀까지는 1000개의 코너, KITTI 데이터셋과 유사한 해상도는 2000픽셀
  • 균등하게 feature extracting 하기 위해 각 스케일 레벨을 그리드로 나눠서 각 셀별 최소 5개 코너 추출
    • 셀 내에서 코너가 충분히 안나오면 detector threshold를 조정
    • low texture/contrast면 코너 수를 조정
  • 추출된 FAST corner 기반 orientation, ORB descriptor 생성

B. Initial Pose estimation from previous Frame

  • Traking 성공 시
  • constant velocity motion model 이용 카메라 포즈 추정 및 맵 point 탐지
  • 충분한 Match 없을 경우, 이전 frame 위치 기준 더 넓은 범위 탐색
  • 찾은 match 기반 pose 최적화

C. Initial Pose Estimation via global relocalization

  • Tracking 실패 시
  • Frame을 Bag of word형태로변환
  • global relocalization을 위해 데이터베이스에 keyframe 쿼리함
  • 각 키프레임에서 맵 point와 관련된 ORB feature 사용 correspondences 계산
  • 각 key frame에 대해 RANSAC 수행, PnP 알고리즘 사용해서 Pose 추정
  • 충분한 inlier 확보시, pose 최적화 진행

D. Track Local Map

  • 큰 맵의 complexity 제한을 위해 local map만을 project함
  • Local Map 구성 요소
    • 현재 프레임과 map point를 공유하는 keyframe 세트 K1\mathcal{K}_1
    • K1\mathcal{K}_1과 이웃한 key frame 세트 K2\mathcal{K}_2
    • 현재 frame과 가장 많은 map point를 공유하는 reference frame
  • map point search process
    1. 현재 frame에서 map point projection 계산, 이미지 범위 외부 점 제외
    2. 현재 viewing ray vv 와 map point의 평군 viewing direction nn 사이 각도 계산, vv<cos(60)v \cdot v < cos (60 ^\circ )면 제외
    3. 카메라 중심 부터 map point 거리 계산, [scale invariance 영역 [dmin, dmax][d_{min},~ d_{max}]] 밖에 존재하면 제외
    4. 프레임 내의 스케일을 d/dmind/d_{min}비율로 계산
    5. map point descriptor의 예측된 스케일과 위치 근처에서 아직 매칭되지 않은 feature 들과 비교, 최적의 match 탐색

E. New Keyframe Decision

  • key frame culling 기능이 있으므로 추가는 관대하게
    • 카메라의 급격한 움직임이나 회전에서 강건성을 확보가능
  • 새 key frame 삽입 조건
    • 마지막 global relocalization 이후 최소 20 frame 이후 - relocalization 성능 보장
    • local mapping이 idle 상태
    • 마지막 key frame 삽입 후 최소 20 frame 이후
    • 현재 frame이 최소 50 point track해야함 - track 성능 보장
    • 현재 frame이 reference frame의 90% 미만 point를 track 중
  • local mapping이 바쁠 경우, local BA 중지 신호와 함께 new key frame insert

Local Mapping

매 새 key frame 마다 진행

A. keyframe insertion

  • covisibility graph 업데이트
  • 새로운 key frame에 대한 노드 추가 및 엣지 업데이트
  • 가장 많은 point를 공유하는 keyframe과 연결하여 spanning tree 업데이트
  • bag of words 계산

B. Recent Map Point Culling

  • Point 생성 후 보존을 위해서는, 이후 3개의 keyframe에 대해 아래의 조건을 만족해야함
    • 관측가능할 것으로 예측된 frame의 25% 이상에서 보여야함
    • point 생성 이후 1개의 keyframe을 지나치면, 최소 3개의 key frame에서 관측되어야함
  • 위의 조건을 만족하면, 3개의 key frame이하로 관측됐을때만 culling
  • track 가능하게 하고 삼각측량 오류를 방지함

C. New Map Point Creation

  • covisibility graph에 의해 연결된 key frame 에서 ORB feature를 삼각측량하여 생성
  • Unmatched는 다른 연결된 keyframe에서 매칭 시도
  • 매칭은 앞에서 설명한 방식으로 수행되고, epipolar constraint 만족해야함
  • 두 카메라로부터 positive depth, parallax, reprojection error, scale consistency를 만족해야함

D. Local Bundle Adjustment

  • local BA의 대상
    • 현재 처리중인 keyframe
    • covisibility graph에서 연결된 모든 keyframe
    • 위의 keyframe 들에서 관측된 모든 map point
  • 현재 처리중인 keyframe과 연결되지 않았지만 point를 공유하는 key frame들은 최적화에 포함되어 계산되지만, 고정된 상태로 유지
  • 이상치는 최적화 중간과 끝에 제거
  • 자세한 내용은 부록에

E. Local Keyframe Culling

  • Compact reconstruction 유지를 위해 중복되는 keyframe 삭제
  • 90% 이상의 map point가 다른 세 개 이상의 keyframe에서 같거나 더 조밀한 scale로 관측될 경우 제거

Loop Closing

A. Loop Candidates Detection

  • bag of words와 covisibility graph 상 모든 이웃 key frame 간의 유사도 계산, 가장 낮은 점수 smins_{min} 저장
  • recognition database를 쿼리해서 smins_{min}보다 낮은 key frame, 직접 연결된 key frame 제외 - DBoW2에서 사용하는 것과 유사하지만 covisibility graph 추가됨
  • loop candidate를 accept하기 위해서는 연속된 세개의 루프 후보가 필요
  • 여러개가 accept될 수 있음

B. Compute similarity Transformation

  • 현재 keyframe과 accept된 loop 후보 frame 사이의 ORB correspondence를 계산
  • 각 후보들에 대해 RANSAC을 반복 수행하여 Horn 방법으로 유사도 변환 계산
  • 충분한 inlier 있으면, 유사도 변환에 기반해서 추가 대응점 찾아 최적화
  • 유사도 변환이 충분한 inlier에 의해 적용가능하다면, loop closing accept

C. Loop Fusion

  • 중복된(matching 된) map point들을 합치고, loop closing을 할 새로운 covisibility graph edge 추가
  • 현재 key frame을 앞서 구한 유사도 변환에 따라 보정, 연결된 keyframe에도 전파하여 정렬
  • loop key frame과 연결된 key frame들의 map point들의 matching여부 확인
  • matching된 point들도 유사도 변환에 의거 보정하여 합침
  • 보정된 모든 keyframe들 고려 covisibility graph edge 업데이트

D. Essential Graph Optimization

  • Essential graph에 대해 pose optimization 수행해서 loop closing error를 그래프에 적절히 분배
  • 오차 항목과 cost function은 부록에

Experiment

  • 데이터
    • NewCollege 로봇 데이터 - 일반적 성능 평가
    • TUM RGB-D 벤치마크 일부 실내 핸드헬드 데이터 - localization accuracy, relocalization, lifelong capability 평가
    • KITTI 데이터 실외 자동차 일부 시퀀스 - 실시간성, pose graph 최적화 효율 평가
  • 성능
    • Intel i7-4700MQ, 8GB RAM 에서 실시간

A. System Performance in the NewCollege Dataset

  • 야외, 20fps, resolution 512*382, 회전 포함
  • 루프 검출

  • loop closing


  • key frame 수의 증가율에 비해 loop detection 소요시간 증가율이 낮음 - bag of words로 일부 이미지만 고려하여서 나온 결과

B. Localization Accuracy in the TUM RGB-D Benchmark

  • TUM RGB-D depth값 GT제공으로 camera localization평가에 적합
  • Absolute Trajectory Error를 측정해서 비교

  • 측정되지 않은 sequence는 평면 장면으로 initialization이 되지 않아 측정 불가
  • ORB SLAM이 대형 loop에서 더 좋은 정확도를 기록함
  • pose graph 최적화를 사용하여 map 최적화를 줄인 방법이 정확도를 올림

C. Relocalization in the TUM RGB-D Benchmark

  • 초기 30초로 mapping하고, 이후 모든 frame에 대해서 global relocalization을 수행하여 성능 평가

  • Keyframe 근처에서만 잘 relocalization되는 PTAM과 다르게, ORB SLAM은 두 배정도 더 잘함

image.png

  • Experimentally얻어진 결과

D. Lifelong Experiment in the TUM RGB-D Benchmark

  • PTAM과 다르게 정적인 시나리오에서 keyframe 늘어나지 않음

  • 객체가 동적인 시나리오에서 동적 변화가 일어나는 객체들에 대해 새롭게 keyframe이 생성됨
  • culling 되면서 마지막까지 남는 keyframe은 초기 맵생성을 위한 keyframe과 마지막 동적 객체로 인한 변화를 저장한 keyframe이 대부분을 차지함
  • 갑작스러운 움직임이나, 동적 객체가 있는 공간에서도 유연하게 작용함

E. Large-scale and Large Loop Closing in the KITTI Dataset

  • KITTI 데이터 셋은 GPS, Lidar를 포함
  • 빠른 회전, 잎사귀와 같은 데이터 연관이 어려운 지역, 높은 속도를 포함
  • 10fps임

  • 01은 고속도로로 추적할 물체가 없음, 이외에는 잘 작동
  • Global BA를 추가하였을 때, loop가 없는 궤적에서는 영향이 미미함을 통해 시스템 자체의 출력이 상당히 정확함을 시사

  • 다른거랑 비교하면 큰 loop도 잘 close함

ORB SLAM 정리
WIP ORB SLAM2 정리
WIP ORB SLAM3 정리

profile
Studying

0개의 댓글