논문 원문: https://www.ri.cmu.edu/pub_files/2014/7/Ji_LidarMapping_RSS2014_v8.pdf
추후 참고(할) 깃헙
1. https://github.com/laboshinl/loam_velodyne
2. https://github.com/stevenliu216/Lidar-Odometry-and-Mapping
읽으면서 참고한 블로그 : https://alida.tistory.com/44
[SLAM] Lidar Odometry And Mapping (LOAM) 논문 리뷰
본 포스트는 공부 목적으로 작성하였습니다.혹시 보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글이나 메일주시면 확인 후 수정하도록 하겠습니다.해당 포스트는 앞서 pdf 파일로 정리
alida.tistory.com
Abstract
이 연구는 lidar(라이다) 센서를 이용하여 odometry와 mapping을 실시간으로 하는 방법에 대해 설명한다.
(라이다 센서 -> 사물까지의 거리를 타 센서들에 비해 정확하게 알 수 있음.)
우리의 연구는 'low-drift and low-computational complexity'를 모두 뛰어나다.
주요 알고리즘은 크게 두 가지로 나뉜다.
(1) 높은 빈도로 odometry를 계산하며
(2) 그보다는 낮은 빈도로 mapping한다.
1. Introduction
- 라이다는 high frequency range measurement가 가능하기에 mapping에 용이하며 오차에 대한 일관성이 있기에 유용함.
- 라이다의 the only motion은 rotating하는 레이저 빔이지만, 만일 라이다가 움직이면 어려워진다.
-> 이 문제를 해결하기 위해 GPS/INS를 이용하여 문제를 해결할 수 있음. 다른 방법으로는 odometry measurement를 이용하여 해결.
근데 odometry를 Integrates하면 조그마한 오차들이 많이 더해져 큰 오차가 발생할 수 있다. 이런 오차를 해소하기 위해 loop-closure(로봇이 이전에 방문했던 장소로 다시 돌아왔을 때 이를 인식하여, 현재의 위치와 맵 정보를 이전의 정보와 비교합니다. 이를 통해 누적된 오차를 조정하고 전체적인 위치 추정과 맵의 정확도를 향상시는 방법.)을 사용할 수 있음.
! 우리는 inpendent한 position estimation 없이 할거임. loop-closure도 안 쓸거임.
우리의 모델은 다른 기술 안 쓰고 low-drift 하며 low-computational complexity한 모델을 만듦.
(low-drift는 위치의 정확성, low-computational complexity는 real-time에서 빠른 연산을 위함인듯.)
두 알고리즘이 사용되는데
1. 높은 빈도로 performs odometry (but low fidelity)
2. 상대적으로 낮은 빈도, but fine matching and registration (of the point cloud).
두 알고리즘 모두 feature points를 추출하는데 sharp edges거나 planar surfaces이다.
odometry 알고리즘에선 추출된 feature points(특징점?)들을 corresponding (mapping이랑 같은 얘긴듯)을 빠른 속도로 한다.
이렇게 parallel한 알고리즘 구조가 real-time 속도로 위 내용들을 실행 가능하게 한다.
2. Related Works
Lidar는 매우 유용함.
lidar의 scan rate에 비해 외적 무빙이 작다면 스캔에 대한 왜곡은 무시해도 괜찮음.
-> 이 경우 two different scan에 대해 point끼리 mapping을 할 때 ICP method를 사용해도 됨.
그러나 scanning motion이 상대적으로 느리면 모션 왜곡이 무시 못 할 수 있음.
근데 우리가 할 것은 2-axis lidar로 다른 센서(IMU, GPS/INS 등) 도움 없이 하는 것임을 기억하자. (아닌가)
그러면, 모션 추정이나 왜곡 보정에이 또 하나의 문제가 된다.
우리의 방법은 edge/planar한 특징점을 뽑아 Cartesian space에 matching 시켜 높은 cloud density가 필요하지 않음.
우리 연구랑 가장 비슷한건 Bosse and Zlot의 것들(주석 3, 6, 22. 나중에 찾아보면 좋을 듯)
하지만 우리의 방법은 REAL-TIME에서 가능함 -> 이게 가장 큰 차별점인듯.
(결국 적은 연산량과 높은 정확성 사이에서 잘 타협을 본 method라는 듯.)
3. Notations And Task Description
(ego-motion : 환경 내에서 카메라의 3차원 이동)
아래는 이 paper에서 사용할 notation들.
좌표계 : 오른쪽 위 대문자 표기.
a sweep : 한 번의 scan coverage.
Pk : k번째 sweep 동안 받아진 point cloud.
좌표계는 크게 두 가지가 있는데 L와 W.
- L : Lidar 좌표계. Lidar 중심.
- W : L의 시작점 기준으로 우리의 세상(?) 기준 좌표계로 이해하면 될듯.
(좌표계를 잘 읽자. 뒤에서 읽다가 혼란 온다.)
결국 이 내용들을 하나의 Problem으로 정의한다면 다음과 같이 귀결된다.
4. System Overview
A. Lidar Hardware
우리가 사용할 모델. 하드웨어 스펙은 다음과 같다.
- The laser scanner has a field of view of 180도, 0.25 resolution, 40 lines/sec scan rate.
-The laser scanner is connected to a motor, 180도의 움직임 (-90도 ~ 90도).
A sweep : A rotation from -90 ~ 90도 (or in the inverse direction). 대략 1초
그럼 하나의 스윕동안 (모터가 1회 움직일 동안, laser scanner는 40줄을 훑는다. 두 개 구분 필요.)
B. Software System Overview
P hat : laser 스캔으로 부터 얻어진 점들.
각각의 스윕동안 P hat은 {L} 좌표계에 등록(registered)(?)됨.
k번째의 sweep에서 이렇게 registered된 point cloud를 Pk라 하며, 이런 Pk는 이제 두 개의 알고리즘을 타게 됨.
Lidar Odometry는 Point cloud를 받아서 두 연속적 sweep간의 motion을 계산한다.
이렇게 추정된 motion은 Pk에서의 왜곡을 수정하기 위해 사용되며, 이 알고리즘은 10Hz의 빈도로 발생.
추가로 이 결과는 lidar mapping에 의해서도 1Hz 주기로 처리됨.
이런 두 알고리즘에 의한 pose transforms가 10Hz 주기로 publish됨.
(어차피 5와 6에서 자세히 설명하니 대략적 흐름만 파악하고 넘어가자.)
5. Lidar Odometry
A. Feature Point Extraction
주요 내용 : Pk에서 feature points들을 뽑는 방법 설명.
(laser scanner의 구조가 이해가 가지 않아 확인해보니, 이런 원통형의 모양으로 돌아감. 이러면 상하 방향으로의 scan이 어렵기 때문에 이를 motor에 연결하여 움직이는 것인 아닐까? 라는 생각. 그리고 motor가 돌아가는 각도도 180도(-90도 ~ 90도)인 것도 사실 이런 모양이면 360도까지는 필요가 없기 때문 아닐까. 하나의 sweep으로 정의하는 것이 그럼 온전한 3D 이미지를 얻는 최소 단위기에 쪼개는 것이 아닐까.)
perpendicular한 방향의 resolution이 다른 것은 다 필요 없이 only laser scan의 rate이 40Hz이니 모터의 움직임(1초)동안 180도를 움직이는 동안, perpendicular하게는 180도 / 40 = 4.5도의 resolution.
우리는 feature points를 sharp deges와 planar surface patches에서 뽑을 것.
S : set of consecutive points of i returned by the laser scanner in the same scan.
하나의 scan에서 point i를 기준으로 연속적인 점들 뽑은 것.
다음과 같이 smoothness of the local surface를 정의. (근데 엄밀하게 말하면 반대로 굽혀진 정도라 해야하지 않을까. 거기서 거긴가..)
하나의 스캔에서 c value로 sorting하면 큰 c를 갖는 점들이 edge points, 작은 값을 갖는 점들이 planar points라 명명.
우리는 하나의 scan을 4개의 identical한 subregion으로 나눔. 각 subregion에서 최대 2개의 edge points들과 4개의 planar한 point를 뽑음.
이러한 feature points를 뽑을 때 좀 이상한 case들을 제외해야함.
- 연속된 점들, 레이저 빔과 평행한 평면에 있는 점들. (a의 B)
- 어떤 물체에 가려진 점들. (b의 A)
정리하면
- c value의 sorting으로 골라진 edge points들과 planar points들의 수는 subregion의 최댓값을 넘지 못함.
- 이미 골라진 점들의 주위 점들을 뽑지 않음.
- 특이 점들(위의 예시)는 뽑지 않음.
Fig 5처럼 각각 노랑 : egde point, 빨강 : planar point로 시각화를 색깔로 표기.
B. Finding Feature Point Correspondence
odometry 알고리즘은 한 번의 스윕동안의 라이더의 motion을 추정.
tk : sweep k의 시작 '시각'.
각 스윕이 끝나면 sweep동안 얻어진 point cloud Pk또한 얻어짐. 이러한 Pk는 t(k+1)에 대해 reprojection 되는데 이렇게 얻어진 Pk_bar와 다음 스윕서 새롭게 얻어지는 Pk+1를 사용하여 lidar motion을 추정한다.
우리에게 Pk_bar와 Pk+1가 모두 주어졌을때 두 lidar clouds간 correspondences를 구하자.
C. Motion Estimation
D. Lidar odometry Algorithm
6. Lidar Mapping
dd
7. Experiments