LeGO-LOAM

이용욱·2022년 4월 11일
0

SLAM

목록 보기
3/7

LeGO-LOAM

LeGO-LOAM은 ground plane의 존재를 이용해 lightweight한 real time 6DOF pose estimation을 했다고 한다.
noise filtering을 위해 segmentation을 해서 보다 robust한 결과를 얻었다고 했다.
computation expense를 줄였지만 성능은 LOAM과 비슷하거나 더 낫다고 했다.


LeGO LOAM의 전제 시스템은 다섯 부분으로 나뉜다.

Segmentation 모듈에서 Point Cloud → Range Image → Segmented Point의 과정을 진행하고 Feature Extration 모듈에서 Segmented Cloud로 부터 Feature를 뽑고 이 feature를 이용해 odometry와 mapping을 하고 두 pose를 integration한다고 한다.

1. Segmentation

Point Cloud (그림 a)를 1800×16 크기의 range image로 변환하고 range image에서의 pixel value는 point의 sensor로 부터의 euclidean distance로 한다. 그리고 Segmentation 이전에 ground extration을 하고서 segmentation을 한다고 하는데 이 ground extration은 column-wise evaluation방법을 통해서 한다고 하는데 이 방법은 range image 상에서 column-wise slope를 이용해서 threshold 미만이면 ground로 판단해서 ground point들을 뽑아낸다고 했다. 이렇게 ground point들의 index를 제외한 나머지 range image에서 image-based segmentation을 한다. 여기서 robustness를 위해 point 갯수가 30개 미만인 segment들은 사용하지 않는다. 이 결과로 segmented point과 groud point (그림 b)를 얻는다.

2. Feature Extraction

앞에서 추출한 segmented point와 ground point에서 feature를 뽑는 과정이다. LOAM에서와 같은 smoothness를 정의해서 사용한다.

SS는 range image상에서 같은 row에 있는 연속적인 point를 사용하였고 LeGO-LOAM 구현 코드에서는 앞뒤로 5개의 point를 사용하였다. 그리고 이 smoothness를 가지고 edge와 planar를 구분한다. (자세한것은 LOAM에서의 설명 참조)

다른 점은 edge point로 판별되었지만 ground point일 경우는 feature로 사용하지 않으며
60°씩 6개의 sub-image로 나눠서 edge 와 planar point들을 뽑는다. Fe,FpF_e,F_p 는 6개의 sub image에 있는 모든 feature들의 set이며 Fe,FpF_e,F_p는 각각의 sub image에 존재하는 feature들의 set이며 nFe,nFp,nFe,nFpn_{F_e},n_{F_p},n_\Bbb{F_e},n_\Bbb{F_p}는 각각 2, 4, 40, 80으로 정했다. feature extracion을 통해 얻은 feature들은 위의 그림 c와 d에 나타나 있다.

3. Lidar Odometry

  • Lidar odometry 모듈에서는 두 개의 연속된 scan 사이의 transformation을 feature들간의 correspondence를 이용해서 구한다. 이를 위해서는 Fet,FptF^t_e,F^t_pFet1,Fpt1\Bbb{F}^{t-1}_e,\Bbb{F}^{t-1}_p 사이에서 correspondence를 구하고 이를 optimizaion 해야한다.

    • Label Matching
      matching의 효율성을 위해서 모든 feature를 match에 이용하는것이 아니라 segmented point에서는 FetF^t_eFet1\Bbb{F}_e^{t-1}사이의 correspondence만 찾고 ground point에서는 FptF^t_pFpt1\Bbb{F}_p^{t-1} 사이의 correspondence만 LOAM에서와 같은 방식으로 찾는다.

    • Two-step LM Optimization
      optimization에서도 속도의 효율성을 높이기 위해서 6-DOF의 transform [tx,yy,yz,θroll,θpitch,θyaw]T[t_x,y_y,y_z,θ_{roll},θ_{pitch},θ_{yaw}]^T 를 한번에 optimization하는 것이 아니라 두 개의 단계로 나눠서 optimization을 진행한다.

      1.[tZ,θroll,θpitch][t_Z,θ_{roll},θ_{pitch}]를 ground plane을 이용하여 즉 FptF_p^tFpt1\Bbb{F}^{t-1}_p사이의 correspondence의 distance를 줄이는 방향으로 optimization 한다.
      2.[tx,ty,θyaw][t_x,t_y,θ_{yaw}]Fet,Fet1F_e^t, \Bbb{F}^{t-1}_e사이의 distance를 줄이는 방향으로 optimization을 한다.

      그리고 각각의 과정에서 optimize하는 parameter외의 나머지 parameter는 constraint로 삼아서 optimize한다.

      이렇게 하는 이유는 ground plane만 사용해도 [tZ,θroll,θpitch][t_Z,θ_{roll},θ_{pitch}]를 optimize할 수 있으므로 parameter를 3개씩 나눠서 optimization을 진행해도 optimization이 가능하며 parameter수를 줄이면 LM알고리즘의 특성상 search space가 작아지기 때문에 6개의 한번에 optimization하는것보다 3개씩 두개의 과정으로 나누어 optimization하는것이 더 빠르기 때문이다. 이 방법이 accruracy를 높이는데에 도움이 되었을 뿐만 아니라 실제로 35%정도의 computation time이 줄었다고 한다.

  • Lidar Mapping
    Lidar Mapping 모듈은 낮은 빈도로 돌아가지만 pose transformation을 refine하기 위해 Fet,Fpt\Bbb{F}^t_e, \Bbb{F}^t_p의 feature들을 주변의 point cloud map Qt1\overline{Q}^{t-1}과 matching하고 L-M 알고리즘을 사용하여 transformaion을 구하는 모듈이다.

    LeGO-LOAM에서는 LOAM과는 달리 point cloud map을 저장할때 feature set {Fet,Fpt\Bbb{F}^t_e,\Bbb{F}^t_p}도 같이 저장한다. 여기서 MtM^t = {{Fe1,Fp1\Bbb{F}^1_e,\Bbb{F}^1_p}, ... , {Fet,Fpt\Bbb{F}^t_e,\Bbb{F}^t_p}}라고 하면 각각의 MtM^t에 대응하는 pose를 연결짓는 식으로 저장을 한다. 이Mt1M^{t-1}로 부터 Qt1\overline{Q}^{t-1}을 얻는 방법은 두 가지가 있다.

    1. 현재 pose를 기준으로 저장된 feature들 중에서 주변 100m 이내에 있는 모든 pose들의 feature들을 불러오고 이 모든 feature들을 각 pose로 transform하고 합쳐서 surrounding map Qt1\overline{Q}^{t-1} 을 얻는다.

    2. LeGO-LOAM을 pose-graph SLAM하고 통합해서 사용한다고 하면 sensor의 pose는 graph의 node로, feature set {Fet,Fpt\Bbb{F}^t_e,\Bbb{F}^t_p} 은 각 node의 measurement로 모델링 할 수 있다. 그리고 lidar mapping의 pose estimation drift가 매우 작으므로 단기적으로는 pose의 drift가 없다는 가정하에 최근의 kk개의 pose 즉{{Fetk,Fptk\Bbb{F}^{t-k}_e,\Bbb{F}^{t-k}_p}, ... , {Fet1,Fpt1\Bbb{F}^{t-1}_e,\Bbb{F}^{t-1}_p}} 을 사용해 Qt1\overline{Q}^{t-1}을 만든다.

      그리고 odometry와 같은 방식으로 correspondence를 생성한 후에 L-M optimization을 해서 transform을 얻는다. 여기에 추가적으로 loop closure detection을 해서 ICP와 같은 registration을 통해 추가적인 contraint를 얻으면 drift를 줄일 수 있을 것이라 한다.


출처 : https://dreambreaker-ds.tistory.com/entry/LOAM-Lego-LOAM

profile
자율주행에 관심이 있으며, Lidar SLAM을 공부하고 있습니다. [개인 홈페이지 : https://woogiee.wixsite.com/youngwooklee]

0개의 댓글