[SLAM] 26. PTAM

happy_quokka·2023년 12월 3일
0

SLAM

목록 보기
27/28

Parallel Tracking and Mapping

0. Abstract

  • handled camera 사용
  • 작은 공간에서 AR를 위해 만든 것
  • thread를 나눠서 사용
    • tracking
    • 3D map
  • 이렇게 해서 batch optimization(BA) 사용 가능
  • 여러 landmark를 만들 수 있다

1. Introduction

  • AR은 사용자 환경에 대한 사전 정보가 필요
  • 센서에서 prior 정보를 보고 있을 때 센서의 한계가 있다
  • 센서와의 range로 인해 정확도가 바뀐다
  • extensible tracking
    • 처음에 알고있는 prior로 시작하여 점점 unknown으로 가면서 map을 이어가는 기술
  • prior map이 없이도 작동하면 좋다
    -> 본 논문은 calibration이 된 카메라를 사용하여 어떠한 모르는 환경에서도 pose를 추정하고 mapping할 수 있다
  • 빠르고 정확한 camera tracking이 필요 + map 정보도 정확 + 새로운 정보가 map에 적용되어야한다
  • 환경은 static, 공간은 small(사실은 한계)

2. Method

  • tracking과 mapping을 parallel thread로 분리
  • mapping은 keyframe에서만 한다. BA 사용
  • map은 stereo pair를 사용해서 초기화한다. (5 point 알고리즘)
  • 새 point를 만들 때는 epipolar search를 통한다
  • 많은 point를 그릴 수 있다
  • 로봇은 odometry 정보가 주어진다
  • 로봇은 느리게 움직인다
  • 하지만 hand-held camera는 그렇지 않다
  • tracking과 mapping 분리
  • mapping은 매 frame의 정보는 필요없다. 좋은 frame만 가지고 와서 사용


4. The Map

  • M : point feature
  • W : world coordinate frame
  • point feature는 locallu plannar textured patch를 가지고 있다
  • PjP_j : map에서 j번째 point
  • PjW=(xjwyjWzjW1)TP_{jW} = (x_{jw} y_{jW} z_{jW} 1)^T
  • unit patch normal njn_j : 카메라를 바라보는 방향
  • N개의 keyframe
  • K : keyframe
  • Ek,WE_{k,W}
  • 이미지 피라미드
  • 8비트 이미지 -> 흑백 이미지
  • 640x480 이미지를 반으로 줄여가면서 피라미드 -> 4개의 레벨
  • sourse keyframe : feature가 처음 발견된 곳

5. Tracking

  • 3D point가 이미 만들어졌다고 가정 (roatation과 translation을 활용하여 triangulation을 해서 3D point를 만든 상태)

pose tracking 순서

  1. motion model을 사용하여 pose의 초기값을 구한다
    • motion model : decaying velocity model
    • prior pose를 추정
  2. 정답에 근사한 prior pose 값을 가지고 map point를 image frame에 projection
  3. matching하기 좋은 50개의 feature 추출 (50개 충분)
  4. 이 feature를 활용하여 camera pose를 업데이트 (coarse match)
  5. 1000개도 해본다
  6. 1000개로 optimization -> 최종 pose 추정
  • 50개면 H matrix가 작아서 빨리 가능하지만 정확도는 조금 부족하다. 그래서 50개로 한 후에 1000개로 조금 느리지만 정확하게 한다. -> coarse fine approach

5-1. Image acquistion

  • 4 레벨의 이미지 피라미드
  • FAST 사용
  • decaying velocity model을 사용해서 prior pose estimation

5-2. camear pose and projection

  • map point를 이미지에 projection
  • p : j번에 point가 wordl
  • E : wordl에서 camera로

  • 그 후 카메라 projection 진행
  • camera motion M (4x4 -> SE(3))
  • SE(3)은 미분이 어렵다. 그래서 이걸 쉽게 하기 위해 변경
  • SE(3)를 six-vector μ\mu 로 만들 수 있다
  • 처음 3개는 translation, 나머지 3개는 rotation과 magnitude 표현
  • 옛날 기술
  • 요즘은 descriptor match로 바뀌었다

5-4. Pose update

  • correspondence가 생기면 이를 통해 camera pose를 update할 수 있다
  • eje_j : reprojection error

5-5. 2-stage coarse-to-fine tracking

  • pose를 coarse search한 후
  • 1000개로 더 정확하게 뽑는다

5-6. Tracking quality and failure recovery

  • tracking은 매 프레임마다 잘되고 있는지 확인할 수 있다
  • feature observation의 품질을 확인해서 안 좋은 경우 keyframe이 되지 않도록

6. Mapping

  • 5point 알고리즘을 통해 E, pose 구하기
  • 새로운 key framde이 들어올 때마다 확정되고 보정된다

6-1. Map initailisation

  • 5 point 알고리즘과 RANSAC 사용하여 E 구한다
  • BA 수행
  • mono에서는 scale을 구할 수 없는데 PTAM에서는 scale을 그냥 지정해준다
  • keyframe을 하려면 tracking quality가 좋아야한다
  • 적어도 20 frame은 떨어져있어야한다
  • 가장 가까운 key point와 거리가 있어야한다
  • keyframe이 추가되면 triangulation으로 point를 만들어야하는데 가장 가까운 frame을 사용해서 수행 (triangulation 하려면 2 view 필요)

6-3. Bundle adjustment

  • reprojection error가 최소화되는 최적의 pose와 landmark 위치를 구해야한다
  • tukey M-estimator 사용
  • optimization : Levenberg-Marquardt
  • local BA를 하면 속도가 빠르다
  • local BA에서는 5개의 keyframe만 사용한다

6-4. Data association refinement

6-5. General Implementation notes

  • 사용한 라이브러리 : libCVD, TooN -> 다 없어졌다

7. Results

  • pose 추정 : 19.2ms
  • local BA :170ms
  • global BA : 380ms
  • map의 keyframedl 100개가 넘어가면 global BA를 보기에는 너무 오래걸린다
  • PTAM은 6600개의 feature
  • EKF-SLAM은 114개
  • 같은 시간동안 PTAM이 더 많은 feature를 처리한다

8. Limitations and Future Work

  • motion blur, 조명 변환, stereo 초기화할 때 실패하는 경우가 있다

0개의 댓글