[SLAM] 22. Direct SLAM의 역사

happy_quokka·2023년 11월 29일
0

SLAM

목록 보기
23/28

1. Feature-based SLAM vs Direct SLAM

Feature-based SLAM의 특징

  • local feature를 뽑는데 많은 시간과 자원을 사용한다
    • corner와 같은 local feature를 뽑고 이를 기반으로 camera pose와 map point(landmark)를 연산
    • 반대로 생각해보면 무조건 local feature를 뽑아야지만 camera pose와 map point(landmark)를 계산할 수 있다
    • local feature를 뽑는게 불필요한 과정일지도..?
  • map이 항상 sparse하게 나타난다
    • corner와 같이 point feature를 뽑게 되는 경우
    • map에서 충분한 정보를 얻을 수 없다
  • keyframe에서만 mapping을 할 수 있다
    • 매 프레임마다 keypoint를 찾고 triangulation하고 BA하는데 너무 많은 시간이 걸리기 때문에 keyframe에서만 mapping을 수행
    • Feature-based SLAM의 한계점
  • feature-less인 환경에서는 작동할 수 없다
    • feature가 없는 곳? 코너가 없는 곳, 하얀 곳, 복도, 바다 위 등
  • feature-based SLAM에는 한계점이 분명하다

hopes and dreams of robotics field

  • faster camera localization and mapping
    • feature-based SLAM는 충분히 빠르지 않다
    • 실시간 드론 제어 : perception이 빨라야한다
    • AR : 빠른 tracking이 요구되는 분야
  • denser map이 필요
    • 벽의 구조에 대해 알아야하는 경우가 필요하다
  • feature-less environment
    • office 복도, 공장 바닥 등의 경우에서도 작동하는 SLAM이 필요하다
  • ~2010년의 HW
    • CPU clock 증가
    • RAM 용량 증가
    • video camer sensor 품질이 좋아졌다
    • GPGPU(GPU를 활용한 프로그램) 등장
  • feature를 뽑은 이유가 이미지 전체를 계산하기에는 데이터가 너무 많아서 실시간이 힘들겠다고 생각했기 때문이다.
  • 하지만 HW의 발전으로인해 굳이 feature를 뽑아야하는가에 대해 의문
  • feature를 뽑지 않고 이미지 데이터 자체(entire image)를 활용하자는 연구 시작

Feature-based SLAM vs Direct SLAM

feature-based

  1. 2개의 이미지 input (t-1 시점, t 시점)
  2. feature 추출 & 매칭 (SIFT / SURF / ORB)
  3. track
    • map point를 reprojection한 후 reprojection error를 최소화하는 camera pose와 landmark를 구한다
  4. map
    • matching된 feature를 가지고 triangular를 만들어내서 map point 보정

Direct

  1. 2개의 이미지 (feature안 뽑고 바로 사용)
  2. track
    • (조명이 같다는 전제하에) 두 이미지 사이의 relative motion(R, t)이 어떻게 되어야 밝기값이 그대로 mapping되는가를 계산
    • 이것을 photometric error라고 한다
    • photo(빛) + metric(측량)
  3. map
    • relative motion을 구하면 픽셀들의 depth를 구할 수 있다
    • depth map을 만들 수 있다
    • 이미지 전체를 사용하면 전체에 대한 depth map이 나오고 line만 추출해서 사용하면 semi-dense depth map이 나온다

Direct SLAM

  • direct method == direct photometric method
  • 특징
    • feature map 방식보다 정확하고 robust (속도는 느릴 수 있다)
      • 이미지 전체를 사용하면 feature만 사용하는 것보다 사용하는 pixel의 정보가 많기 때문
    • 카메라간의 relative motion(camera baseline) 작을수록 알고리즘이 빠르게 convergence(수렴)
      • 따라서 카메라 fps가 높을수록 더 빠르게 작동한다
      • 2010년 이후부터 카메라 fps가 빨라졌다

2. Direct SLAMs

DTAM

  • Dense Tracking and Mapping in real-time
  • PTAM의 프레임워크를 사용하되 feature를 뽑지 않고 전체 이미지를 사용하는 방식으로 바꾼 것
  • keyframe의 전체 이미지에 대해 최적화
    • dense map이 생성된다
    • tracking은 매 frame마다
    • mapping은 keyframe에서만
  • feature-less 환경에서도 작동
    • 이미지 전체를 사용하고 이미지 밝기값을 사용하기 때문
  • motion blur에 강인
    • 전체 이미지를 사용하기 때문 (데이터가 많아서 일부는 무시할 수 있다)
  • GPU 사용 필요
  • dense map이 유용하다 + depth도 최적화에 활용가능하면 매우 유용
    • dense map이 중요하지 이미지 전체를 사용하는 것이 중요한게 아니다
    • RGB-D 카메라를 사용하여 dense depth map을 얻어서 사용하기 시작

LSD-SLAM

  • first large-scale VSLAM
  • Line Segment Detector
    • 이미지에서 edge, line을 찾는 방법
    • line을 특징으로 사용하지 않고 line 주변의 픽셀들을 가지고 카메라 pose 최적화 진행
    • 이때 similarity transform(7DoF)을 구한다 -> large-scale 가능
    • scale factor까지 최적화하기 때문에 scale drift가 나타나지 않기 때문
  • semi-dense mapping으로 GPU가 아닌 CPU 사용
  • 단점 : 조명의 변화에 not robust
    • direct 방식이 빛의 밝기값을 가지고 최적화하는데 전제 조건이 두 프레임 간의 밝기값이 동일하다이기 때문에 급작스러운 밝기 변화가 발생하면 tracking 실패
  • direct 방식은 loop closure를 어떻게? 최근까지 해결되지 못했다
    • feature을 뽑아서 loop closure 수행

SVO

  • Semi-direct monocular Visual Odometry
  • feature, direct 방식 둘다 사용
  • FAST corner feature 추출 + feature의 patch를 direct 방식으로 tracking하여 pose 추정
  • keyframe에 sliding window BA 적용 -> map point, pose 보정
  • SLAM이 아니기 때문에 global optimization, loop closure는 없다
  • 빠르다
    • i7에서 400fps까지
    • ORB의 경우 i7에서 30FPS였다
  • 드론을 위한 방식
    • 바닥을 보고 있는 카메라로 드론 위치 추정
    • 바닥이 평평하다는 전제로 homography 기반으로 위치 추정

SVO2

  • monocular / multi camera / fisheye camera 지원
  • depth 추정 알고리즘 개선
  • loop closure나 BA가 없다

DSO

  • Direct Sparse Odometry
  • feature 방식 완전히 제거
  • sliding widow photometric BA 방식 소개
    • 7개의 keyframe을 가지고 photometric error를 기반으로 sliding window BA
  • loop closure 사용하지 않는다 -> odometry
  • 하지만 ORB SLAM보다 정확하게 결과가 나온다
  • point를 direct 방식으로 추출, gradient 변화가 큰 곳들을 기반으로 픽셀들에 대해 sparse하게 photometric opimization
  • drift가 없다면 쓰레기통이 일치해야하지만 drift가 존재
  • drift가 있지만 굉장히 큰 거리를 돌았고 z축에도 error가 생겼을 수 있는데 drift가 매우 적다

  • LSD-SLAM과 ORB-SLAM은 rotation drift가 커서 90도로 꺾어야하는데 더 많이 꺾었다.
  • ORB-SLAM의 경우 drift가 커서 원점으로 도착했음에도 반밖에 안왔다고 생각
  • ORB-SLAM은 rotation drift가 매우 크기 때문에 loop closure가 나타나야 정확한 SLAM이다

DSO-variants

  • stereo DSO, LDSO, VI-DSO
  • DSO도 SURF를 사용하여 loop closure를 할 수 있다 -> SLAM이 될 수 있다
  • VI-DSO : imu도 포함
    • DSO의 단점
      • baseline이 갑작스러운 motion으로 인해 크게 변하면 convergence(수렴)하기 어렵다
      • 하지만 이 motion을 imu가 보정해 주면 더 정확하다

Variants in Direct methods

  • Sparse vs Semi-dense vs Dense
  • 정확도 / 속도의 tradeoff
  • 최적화를 했을 때 주어진 시간 안에 정확한 값에 도달한다라는 점이 중요
  • frame 간의 baseline(거리)가 크지 않을 때 -> 3개 모두 좋은 convergence를 보여준다
  • frame 간의 거리가 커지면 -> sparse가 먼저 떨어지지만 나머지도 결국 convergence가 안좋아진다
  • 그러면 frame 거리에 제한을 두고 (fps 증가 또는 robot의 속도 감소) 사용한다
  • 이때는 sparse를 사용하는것이 계산 효율성이 좋다
  • 즉, frame간의 거리를 줄이고 가벼운 알고리즘을 사용하자 -> sparse
  • 그래서 direct의 발전도 dense의 DTAM에서 점차 semi-dense에서 sparse로 바뀌었다

정리 (direct methods)

  • DTAM : dense map
  • LSD-SLAM : semi-dense
  • SVO, SVO2 : 하이브리드 방식 / 빠르다
  • DSO : loop closure 없이도 잘된다
  • stero DSO, LDSO, VI-DSO : DSO의 변형
  • 요즘은 딥러닝과 photometric를 섞어서 좀 더 안정적인 deep direct SLAM을 할 수 있을지 연구 -> DVSO, D3Vo, MonoRec, GN-Net, LM-Net 등
  • GN-Net, LM-Net : direct에서 loop closure를 할 수 있는 방법을 만들어주는데 단순히 이미지 비교를 하는 것이 아니라 조명, 날씨, 낮밤, 형태가 바뀌었을 때에도 적용가능

0개의 댓글