본문 바로가기

Engineering

[SLAM] Visual LiDAR Odometry and Mapping (V-LOAM) 논문 리뷰

본 포스트는 공부 목적으로 작성하였습니다.

혹시 보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글이나 메일주시면 확인 후 수정하도록 하겠습니다.

해당 포스트는 앞서 pdf 파일로 정리했던 자료를 포스팅한 글입니다. 

자세한 내용은 다음 링크를 통해 확인해주세요.

https://www.facebook.com/groups/slamkr/permalink/862881467404832/

vloam_review.pdf
1.21MB

 

본 포스트는 DEMO와 LOAM의 저자가 ICRA 2015에 게재한 논문인 "Visual-Lidar Odometry and Mapping: Low-Drift, Robust, and Fast" (V-LOAM) 논문을 리뷰한 포스팅이다. 해당 논문은 사실 상 DEMO + LOAM = V-LOAM과 같이 두 알고리즘을 퓨전한 논문이고 대략적인 알고리즘 설명만 나올 뿐 대부분 실험에 치중되어 있는 논문이다.

 

Visual Odometry (VO), Lidar Odometry (LO)를 통해 3차원 공간에서 6자유도 로봇 포즈를 추정하는 문제는 널리 연구되고 있다. 하지만 VO의 경우 lighting condition에 의해 feature를 정확히 탐지하지 못하는 문제가 종종 발생하며 LO같은 경우 평면 형태의 공간(planar area) 같은 특정 형태의 공간에서 scan matching이 실패하는 문제가 종종 발생한다.

 

따라서 해당 논문에서는 위 문제를 극복하기 위해 단안 카메라와 3D LiDAR를 퓨전하여 6자유도 로봇 포즈 추정 문제를 해결한다. 제안하는 방법은 센서 퓨전을 통해 카메라와 LiDAR의 장단점을 서로 보완하므로 매우 빠르게 이동하는 상황(aggressive motion)이나 어두운 공간, 매우 밝은 공간(lack of optical texture)에서도 비교적 정확한 포즈 추정 능력을 유지할 수 있다. 

 

60 [hz]의 카메라 이미지를 통해 VO를 먼저 생성하고 1 [hz]의 LiDAR를 통해 VO로 발생한 드리프트를 보완하는 과정을 거친다. 이 때, LiDAR의 데이터를 통해 map을 1 [hz] 속도로 생성한다. 센서 퓨전 성능을 강조하기 위해 본 논문에서는 loop closure 기능을 사용하지 않았다.  V-LOAM은 21년에 SOFT2 알고리즘이 나오기 전까지 6년 동안 KITTI 벤치마크에서 odometry 부분 1등을 유지하였다. (현재는 2등) http://www.cvlibs.net/datasets/kitti/eval_odometry.php

 

Software System Overview

V-LOAM은 논문의 저자가 개발한 DEMO와 LOAM의 퓨전 버전이다. 

DEMO

1. Feature Tracking : KLT 트래커를 사용하여 harris corner를 feature로 추출하는 모듈

2. Depth Map Registration : 해당 feature에 depth 값을 추가하는 모듈

3. Frame to Frame Motion Estimation : 각각 feature들의 상대 위치를 계산하여 VO를 계산하는 모듈

LOAM

1. Sweep to Sweep Refinement : 1초에 한 번씩 3D Hokuyo 센가 포인트클라우드를 sweep하는 모듈

2. Sweep to Map Registration : sweep 된 데이터를 맵에 저장하는 모듈

 

Experiments

Hokuyo UTM-30LX + custom-built uEye monochrome 카메라

실험에 사용한 센서의 스펙은 다음과 같다. 이 때 카메라는 렌즈에 따른 성능 비교를 위해 wide angle, fish-eye 두 대를 사용하였따.

 

- Hokyuo UTM-30LX

  - 180 degree FOV

  - 0.25 degree resolution

  - 40 line/s scan rate

  - 회전모터 : 180 degree/s between -90 to +90

- custom-built eEye monochrome 카메라

  - 60 [hz] rate

  - wide angle 렌즈 

    - 76 degree HFOV

    - 640x480 pixels

  - Fish-eye 렌즈

    - 185 degree HFOV

    - 752x480 pixels

 

#1 Indoor Accuracy Test

정확도 테스트를 위해 실내에서 사람이 센서를 들고 0.7 [m/s]의 속도로 이동했다. 초록선, 빨강선을 보면 VO만 사용하는 경우 드리프트가 심한 것을 알 수 있다. 특히 Fish-eye(초록선)의 경우 이미지 왜곡으로 인해 더욱 심한 드리프트가 발생하지만 LiDAR 센서를 통해 motion refinement를 수행하면 드리프트가 많이 제거된다(검정선). 결과적으로 LO를 사용하면 렌즈에 관계없이 VO의 드리프트가 제거된 상대적으로 정확한 포즈를 추정할 수 있다(파랑선,검정선).

 

#2 Outdoor Accuracy Test

정확도 테스트를 위해 실외에서 사람이 센서를 들고 0.7 [m/s]의 속도로 이동했다. 결과적으로는 실내에서 테스트 결과와 동일하다. 초록선, 빨강선을 보면 VO만 사용하는 경우 드리프트가 심한 것을 알 수 있다. 특히 Fish-eye(초록선)의 경우 이미지 왜곡으로 인해 더욱 심한 드리프트가 발생하지만 LiDAR 센서를 통해 motion refinement를 수행하면 드리프트가 많이 제거된다(검정선). 결과적으로 LO를 사용하면 렌즈에 관계없이 VO의 드리프트가 제거된 상대적으로 정확한 포즈를 추정할 수 있다(파랑선,검정선).

 

#3 Indoor & Outdoor Accuracy Test

정확도를 위해 실내에서 출발해서 실외로 나간 다음 계단 2개를 지나고 다시 원점으로 복귀하는 테스트를 수행했다. 사람이 센서를 들고 평균 0.7 [m/s]의 속도로 이동했다. 총 이동거리는 538 [m]이다. 논문의 지면 관계상 trajectory 사진은 없다고 한다.

 

#1, #2, #3 Test Result

실험 결과는 #1, #2, #3 모두 다른 지표를 통해 측정했다. 

#1 : 2개의 loop가 존재하는데 해당 loop를 재방문했을 때 3차원 좌표의 상대거리 오차를 측정했다.

#2 : 동일한 물체를 시작 시점과 끝 시점에서 측정한 다음 물체의 포인트클라우드 15개를 추출하여 각각 3차원 좌표의 상대거리 오차를 측정했다.

#3 : 시작점과 끝점을 동일한 위치로 한 다음 3차원 좌표의 상대거리 오차를 측정했다.

 

해당 실험을 통해 VO만 사용했을 경우 fish-eye 카메라의 성능이 상대적으로 낮지만 LO와 퓨전하면 정확도가 wide angle 카메라와 동일한 수준까지 향상되는 것을 알 수 있었다.

 

#4 Robustness Test w.r.t. fast rotation

센서를 들고 계단을 천천히, 빠르게 올라가면서 빠른 회전에 대해 V-LOAM이 trajectory를 얼마나 강건하게 추정하는지 수행한 테스트이다. 총 7번의 180 degree turn을 수행했다. 빠르게 회전하는 경우 최대 170 [deg/s]의 속도로 회전했다. 천천히 계단을 올라가는 경우와 빠르게 계단을 올라가는 경우로 총 2번의 실험을 진행했다. wide angle 카메라를 사용하여 빠르게 올라가는 경우 visual feature를 추적하지 못하여 trajectory를 정확히 추정할 수 없었다 (실험 결과 없음). 이와 반대로 fish-eye 카메라를 사용하여 빠르게 올라가는 경우 상대적으로 넓은 FOV로 인해 visual feature를 지속적으로 추정하여 trajectory를 추정할 수 있었다. 

 

#5 Robustness Test w.r.t. fast translation

센서를 들고 복도를 빠르게 이동하면서 빠른 이동에 대해 V-LOAM이 trajectory를 얼마나 강건하게 추정하는지 수행한 테스트이다. 천천히 복도를 걷는 경우와 복도를 빠르게 달리는 경우 2번의 실험을 수행했다. 빠르게 달리는 경우 평균 2.6 [m/s]의 속도로 복도를 달렸다. wide angle 카메라를 사용하여 빠르게 달리는 경우 visual feature를 추적하지 못하여 trajectory를 추정할 수 없었다 (실험 결과 없음). 이와 반대로 fish eye 카메라를 사용하여 빠르게 달리는 경우 상대적으로 넓은 FOV로 인해 visual feature를 지속적으로 추적하여 trajectory 추정이 가능했다. 

 

#4, #5 Test Result

실험 결과는 Test #4, #5 모두 다른 지표를 사용하여 측정했다.

#4 : 실험 환경의 벽과 계단을 정확히 수평으로 가정하여 각각 층마다 벽과 계단이 틀어진 정도를 측정했다.

#5 : loop가 되는 지점으로부터 한 바퀴 돌아 재방문했을 때 3차원 좌표의 상대거리 오차를 사용했다. 

 

해당 실험을 통해 fish-eye 카메라가 정확도면에서는 wide angle 카메라보다 성능이 낮지만 빠른 회전이나 빠른 이동에 상대적으로 더욱 강건하다는 것을 확인하였다.

 

#6 Robustness Test w.r.t. dramatic lighting change

센서를 들고 실내를 이동하면서 총 4번의 소등을 한다. 소등했을 때 완전히 어두운 상태에서도 LO를 통해 얼마나 강건하게 trajectory를 추정하는지 수행한 테스트이다. 위 그림은 1,2,는 방 안에서 소등을 2번 진행했고 3,4는 복도에서 소등을 2번 진행한 것을 의미한다. 불이 꺼지면 VO는 작동을 머추고 등속도(constant velocity)로 포즈를 추정한다. 이 때 발생하는 큰 드리프트는 1 [hz] 주기로 LiDAR 센서 데이터가 sweep 될 때마다 LO를 통해 보정된다. 해당 실험을 통해 일시적인 암전 상태에서도 해당 알고리즘이 정상적으로 동작함을 알 수 있다. 하지만 저자는 지속적인 암전 상태에서 포즈를 추정해야 하는 경우 해당 알고리즘보다 LOAM을 사용할 것을 추천하였다.