ORB SLAM3 Review (2) : Tracking

YUNJI·2024년 6월 12일

※ ORB SLAM과 ORB SLAM3 논문의 내용을 분석하였으며,
혹시 잘못된 부분이 있다면 지적해주시면 감사하겠습니다 🤗

Tracking

: Tracking Thread에서는

  1. Extract ORB / IMU integration

  2. Initial Pose Estimation from last frame, Relocalization or Map creation

  3. Track Local Map

  4. New KeyFrame Decision 과정이 수행된다.


1.1. Extract ORB

  • ORB (Oriented FAST and Rotated BRIEF)

    → 생성, 매칭 속도가 빠르며, 여러 각도에서 봐도 정확한 값을 가진다.

    • FAST

      : feature extractor로, 하나의 p 점을 기준으로 원 모양으로 주변 16개 픽셀에 대한 밝기 값을 비교하여 corner 여부를 판단한다. threshold 이상으로 밝거나 어두운 픽셀이 n개 이상 존재하면 코너로 판단한다. 빠른 연산을 위해 위 아래 쌍 하나와 왼쪽 오른쪽 쌍 하나, 총 4개의 점을 먼저 비교해 빠르게 후보를 줄여나가는 것이 특징이다.

    • Oriented FAST


      : FAST는 방향 정보가 없으므로, 밝기와 거리 값을 이용해 모멘텀을 구한 뒤 모멘텀을 기반으로 방향성을 계산한다.

    • BRIEF

      : feature descriptor로, keypoint 주변 정보를 담고 있다. keypoint 기준 랜덤한 두 점을 잡아 밝기 값을 비교하고 이진 값으로 표현한다. 이진화함으로써 hamming distance를 통해 descriptor 간 빠른 비교가 가능하다.

      • Steered BRIEF : 회전에 취약한 BRIEF의 단점을 보완하기 위해 descriptor 자체를 12도 간격으로 30번 회전시킨 뒤, Look Up Table 에 저장한다.
      • Rotated BRIEF : BRIEF와 Steered BRIEF는 분산이 작아(중요한 정보가 앞 쪽에 몰려있는 형태) 정보 효율이 떨어진다. 분산을 높이고 상관관계를 줄여 중요한 정보들을 골고루 담도록 하기 위해 rBRIEF를 사용한다. : Rotated BRIEF는 평균이 0.5에 가까운 순으로 정렬하고, 서로의 상관관계를 비교하여 threshold 이하이면 가져가는 방식이다.

1.2. IMU integration

[참조] https://alida.tistory.com/64

: 2개의 이미지 keyframe 사이에는 수십 개의 IMU 데이터가 존재하는데, 여러 개의 IMU 데이터를 하나의 factor로 변환하여 연산량을 줄이는 방법이다.


2. Initial Pose Estimation from last frame, Relocalization or Map creation

2.1. Initial Pose Estimation from last frame (Tracking Successful)

1. 등속 motion model을 가정하고 guided search 수행 → correspondence 생성

  • guided search

    : 이전 프레임에서 특징점 위치와 등속 모델이라는 가정을 활용하여 검색 범위를 줄이고 매칭을 위해 비교해야 할 특징점 후보를 줄인다.

2. 찾은 특징점 간 상관관계를 기반으로 SolvePnP 수행 → pose 추정

  • solvePnP

    → 기존 map points(3D world points)와 ORB feature(2D points), camera intrinsic matrix를 활용

    → 월드에서의 카메라 좌표(Xc, Yc, Zc)를 알 수 있음

3. 추정한 pose로 ORB feature triangulation → 3D point 위치 추정

  • Triangulation
       

4. reprojection error + IMU residuals를 cost로 포즈 최적화 (BA)

  • IMU residuals : monocular slam을 통해 얻은 pose 값(추정 값)과 IMU 센서를 통해 얻은 카메라의 가속도와 회전 값(측정 값) 사이 오차
      

2.2 Relocalization (Tracking lost)

: frame → bag of words → database에 쿼리 → 같은 bag 내에서 가장 유사한 keyframe을 찾음 → 찾은 keyframe 기반 solvePnP 수행 → 카메라 위치 추정 → 최적화

2.3 Map creation

  • automatic map initialization

    1) 초기 2개 frame에서 ORB feature 추출 → feature 매칭

    2-1) Homography 계산

    2-2) Fundamental matrix 계산 → Essential matrix로 변환

    → 2)의 결과로 R | t 얻을 수 있음

    3) Full BA

    4) Heuristic standard 로 평가해 둘 중 스코어가 더 높은 모델 선택

    : 일정 시간이 지나면 active map은 non-active map으로 넘어가고 새로운 active map이 initialize됨


3. Track Local Map

: 사전에 생성된 local map이 있는 경우, 더 많은 상관관계를 만들어 최적화하기 위한 과정

  • 사전에 생성된 local map을 frame에 투영

    : 현재 map points를 가진 keyframe K1과 covisibility graph에서 연결된 keyframe K2에 존재하는 모든 map points를 frame에 투영

    : 현재 keyframe의 BoW를 구하고, 데이터베이스로부터 가장 유사한 keyframe을 불러와 map points를 frame에 투영

    • covisibility graph : K1과 동일한 map points를 공유하는 연관된 keyframe 관계를 그린 그래프
  • pose optimization 수행

    • 투영된 map points와 frame 상의 ORB feature들과 매칭하여 상관관계를 만듦

    • 상관관계를 기반으로 SolvePnP 수행해 pose estimation

    • 추정한 pose에 대해 reprojection error와 IMU residual를 cost로 최적화 수행


4. New KeyFrame Decision

아래 4개 조건을 모두 만족하는 경우, 새 Keyframe으로 추가한다.

  • 마지막 global relocalization 이 후, 20 frame 이상 지나야 한다.

  • local mapping thread가 쉬고 있거나, 마지막 keyframe insertion 이 후 20 frame 이상이 지나야 한다.

  • 현재 frame에서 50개 이상의 포인트가 추적되고 있어야 한다.

  • 현재 frame이 참고하고 있는 frame(K_ref) 기준 새로운 map points가 10% 이상 존재해야 한다

    • K_ref : covisibility graph로 연결된 K2 frame set에서 가장 많은 map points를 공유하고 있는 frame

0개의 댓글