Skip to content

Robust LiDAR SLAM with a versatile plug-and-play loop closing and pose-graph optimization.

Notifications You must be signed in to change notification settings

gisbi-kim/SC-A-LOAM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SC-A-LOAM

News

  • 2021-07-16: This repository's easy-to-use plug-and-play loop detection and pose graph optimization module (named SC-PGO) is also integrated with FAST-LIO2! see FAST_LIO_SLAM.

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

For Navtech Radar

Utilities

Data saver and Map construction

  • Similar to the SC-LIO-SAM's saver utility, we support pose and scan saver per keyframes. Using these saved data, the map (within ROI) can be constructed offline. See the utils/python/makeMergedMap.py and this tutorial.

  • Below is the example results of MulRan dataset KAIST 03's merged map, visualized using CloudCompare (download the map data here).

  • A user also can remove dynamic points using these saved keyframe poses and scans. See this tutorial and our Removert project.

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

  • Delayed RS loop closings
  • SLAM with multi-session localization
  • More examples on other datasets (KITTI, complex urban dataset, etc.)