• Stars
    star
    316
  • Rank 127,831 (Top 3 %)
  • Language
    C++
  • Created almost 3 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

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

  • 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:

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

TODO

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

More Repositories

1

SC-LIO-SAM

LiDAR-inertial SLAM: Scan Context + LIO-SAM
C++
497
star
2

removert

Remove then revert (IROS 2020)
C++
476
star
3

PyICP-SLAM

Full-python LiDAR SLAM using ICP and Scan Context
Python
439
star
4

lt-mapper

A Modular Framework for LiDAR-based Lifelong Mapping
C++
354
star
5

navtech-radar-slam

Radar SLAM: yeti radar odometry + scan context
C++
115
star
6

modern-slam-tutorial-python

learning and feeling SLAM together with hands-on-experiments
Jupyter Notebook
71
star
7

IROS20-SLAM-papers

A personal list-up
HTML
52
star
8

symforce-tutorials

Learn symforce together :)
Jupyter Notebook
22
star
9

multi-robot-isam-example

An example about using anchor node for multi-robot and -session slam
C++
20
star
10

scancontext-pybind

LiDAR place recognition. For fast python support.
C++
19
star
11

mini-kitti-publisher

A very simple KITTI odometry dataset's images and velodyne points publisher
Python
17
star
12

Daily-Arxiv-Tracking-Automation

Automatically download the all pdfs from a daily rss
Python
15
star
13

semantickitti-matlab

Some useful tools written in Matlab for Semantic KITTI
MATLAB
14
star
14

mini-pyllio

A very minimal but working Python only implementation for loosely-coupled LiDAR-Inertial odometry for education purpose.
Python
14
star
15

toy-robust-backend-slam

Toy DCS
C++
13
star
16

SC-LeGO-LOAM

backup of irapkaist/SC-LeGO-LOAM
C++
12
star
17

ceres-tutorials

personal practice
C++
12
star
18

kitti-global-map-making

global map construction for kitti360 dataset (can be used for the original kitti)
MATLAB
11
star
19

depth-mapping-matlab

Global 3D Map Construction using RTAB-Map iPhone/iPad app data
MATLAB
11
star
20

thrust_examples

Hands-on Learning about cpu vs gpu
Cuda
6
star
21

fit-plane-open3d

example with real world lidar scan
Python
6
star
22

cpp-profiling-practice

for education.
C++
5
star
23

scancontext-cpp

Scan Context C++ for LiDAR Place Recognition
C++
5
star
24

control_toy_practices

for beginners
Python
4
star
25

pytorch-solver-tutorial

pytorch-based optimization examples for traditional problems
Jupyter Notebook
4
star
26

my-interest-cvpr21-paper-listup

4
star
27

gisbi-kim.github.io

blog
CSS
4
star
28

pypose-practice

pypose practices
Python
4
star
29

ComplexUrbanH3DS

To make virtual horizontal 3D scans (so H3DS) from the original Complex Urbans Dataset's point cloud, which was made from 2D push-broom lidars.
MATLAB
4
star
30

cpp-design-pattern

C++
4
star
31

mulran-evaluation

MATLAB
3
star
32

scan_saver

input: rosbag (topics), output: custom .bin file per scan
C++
3
star
33

kitti_making_lidar_gt_pose

head to tail based lidar gt pose making code
MATLAB
3
star
34

nla_study

A study on numerical linear algebra (NLA)
Python
2
star
35

laptop-slam

Goal: 1. using laptop's default camera, 2. using python-only, 3. do v-SLAM
Python
2
star
36

OusterRangeImageMatlab

OusterRangeImageMatlab
MATLAB
2
star
37

my-leet-codes

C++
1
star
38

scancontext_tro

scancontext++ (TRO 2022) codes
MATLAB
1
star
39

ipad_data_processsing

some utils
Python
1
star
40

preprocessing-pointnetvlad

Python
1
star
41

yeti_odom_drawer

MATLAB
1
star
42

iccv23-title-abstracts-db

to easily skim iccv23
1
star
43

iros23-paper-title-and-abstracts

parser pythonc code and sqlite db file
HTML
1
star
44

cv-gskim

1 page cv
TeX
1
star
45

ce545-taxi

course
Jupyter Notebook
1
star
46

mixRobust_distributed_mapper

MATLAB
1
star
47

cpp_study

A personal study backup
C++
1
star
48

hands_on_numerical_opt

for practice
1
star