Tomato1107 / SC-A-LOAM

Robust LiDAR SLAM

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SC-A-LOAM

What is SC-A-LOAM?

  • A real-time LiDAR SLAM package that integrates A-LOAM and ScanContext.
    • A-LOAM for odometry (i.e., consecutive motion estimation)
    • ScanContext for coarse global localization that can deal with big drifts (i.e., place recognition as kidnapped robot problem without initial pose)
    • and iSAM2 of GTSAM is used for pose-graph optimization.
  • This package aims to show ScanContext's handy applicability.
    • The only things a user should do is just to include Scancontext.h, call makeAndSaveScancontextAndKeys and detectLoopClosureID.

Features

  1. A strong place recognition and loop closing
    • We integrated ScanContext as a loop detector into A-LOAM, and ISAM2-based pose-graph optimization is followed. (see https://youtu.be/okML_zNadhY?t=313 to enjoy the drift-closing moment)
  2. A modular implementation
    • The only difference from A-LOAM is the addition of the laserPosegraphOptimization.cpp file. In the new file, we subscribe the point cloud topic and odometry topic (as a result of A-LOAM, published from laserMapping.cpp). That is, our implementation is generic to any front-end odometry methods. Thus, our pose-graph optimization module (i.e., laserPosegraphOptimization.cpp) can easily be integrated with any odometry algorithms such as non-LOAM family or even other sensors (e.g., visual odometry).
  3. (optional) Altitude stabilization using consumer-level GPS
    • To make a result more trustworthy, we supports GPS (consumer-level price, such as U-Blox EVK-7P)-based altitude stabilization. The LOAM family of methods are known to be susceptible to z-errors in outdoors. We used the robust loss for only the altitude term. For the details, see the variable robustGPSNoise in the laserPosegraphOptimization.cpp file.

Prerequisites (dependencies)

  • We mainly depend on ROS, Ceres (for A-LOAM), and GTSAM (for pose-graph optimization).
    • For the details to install the prerequisites, please follow the A-LOAM and LIO-SAM repositiory.
  • The below examples are done under ROS melodic (ubuntu 18) and GTSAM version 4.x.

How to use?

  • First, install the abovementioned dependencies, and follow below lines.
    mkdir -p ~/catkin_scaloam_ws/src
    cd ~/catkin_scaloam_ws/src
    git clone https://github.com/gisbi-kim/SC-A-LOAM.git
    cd ../
    catkin_make
    source ~/catkin_scaloam_ws/devel/setup.bash
    roslaunch aloam_velodyne aloam_mulran.launch # for MulRan dataset setting 

Example Results

Riverside 01, MulRan dataset

KITTI 05

Indoor

  • ScanContext also works at indoor environments (use smaller sc_max_radius value).
  • example video: https://youtu.be/Uv6_BRmxJho
  • example result:

For Livox LiDAR

  • Scan Context also works for Livox LiDAR data
    • In this example, Scan Context is integrated with FAST-LIO (https://github.com/hku-mars/FAST_LIO).
    • Note: No additional integration effort is required. A user just run seperately FAST-LIO node and SC-A-LOAM's posegraphoptimization.cpp node!
  • example video (tutoial and results): https://youtu.be/Fw9S6D6HozA
  • example result:

Acknowledgements

  • Thanks to LOAM, A-LOAM, and LIO-SAM code authors. The major codes in this repository are borrowed from their efforts.

Maintainer

  • please contact me through paulgkim@kaist.ac.kr

TODO

  • More examples on other datasets (KITTI, complex urban dataset, etc.)
  • Delayed RS loop closings
  • data saver (e.g., pose-graph, optimized map)
  • SLAM with multi-session localization
  • Efficient whole map visualization

About

Robust LiDAR SLAM


Languages

Language:C++ 96.5%Language:C 1.0%Language:Shell 0.9%Language:Dockerfile 0.8%Language:CMake 0.7%Language:Makefile 0.1%