Skip to content

A real-time, robust LiDAR-inertial localization system

License

Notifications You must be signed in to change notification settings

huawei-sai/ROLL

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1. ROLL

frameworkV10 ROLL is a LiDAR-based algorithm that can provide robust and accurate localization performance against long-term scene changes.

  • We propose a robust LOAM-based global matching module incorporating temporary mapping, which can prevent localization failures in areas with significant scene changes or insufficient map coverings. The temporary map can be merged onto the global map once matching is reliable again.
  • We extend a fusion scheme to trajectories from LIO and noisy global matching. By implementing a consistency check on the derived odometry drift, we successfully prevent the optimization results from going out of bounds.

Related paper: ROLL: Long-Term Robust LiDAR-based Localization With Temporary Mapping in Changing Environments. The paper is now accepted by IROS 2022

2. Prerequisites

  • Ubuntu 16.04, ROS kinetic
  • PCL 1.7
  • Eigen 3.3.7
  • GTSAM 4.0.2 (-DGTSAM_BUILD_WITH_MARCH_NATIVE = OFF)
  • Ceres 2.0 (It is optional since now the pose graph optimization is performed with GTSAM)

3. Build

mkdir catkin_ws/src -p && cd catkin_ws/src
git clone https://github.com/HaisenbergPeng/ROLL.git
git clone https://github.com/HaisenbergPeng/FAST_LIO.git
cd ../.. && catkin_make

4. Run

  1. Download NCLT datasets

    We need all data except for Image and Hokuyo. Extract all files in one directory.

  2. Generate rosbag with the original data

    Change the variables "record_time" and "root_dir", and arrange files in directory "root_dir" as following:

├── cov_2012-01-15.csv
├── gps.csv
├── gps_rtk.csv
├── gps_rtk_err.csv
├── groundtruth_2012-01-15.csv
├── kvh.csv
├── ms25.csv
├── ms25_euler.csv
├── odometry_cov_100hz.csv
├── odometry_cov.csv
├── odometry_mu_100hz.csv
├── odometry_mu.csv
├── README.txt
├── velodyne_hits.bin
└── wheels.csv
cd src/scripts
python nclt_data2bag_BIN.py

Then a rosbag named "2012-01-15_bin.bag" will be generated.

  1. Building a map with NCLT ground truth
roslaunch roll GTmapping_nclt.launch
rosbag play <root_dir>/2012-01-15_bin.bag --clock
  1. Localization test

    By default, the algorithm will get the initial pose from topic "ground_truth". If it cannot get such a topic, it load initial pose from variable "initialGuess".

roslaunch roll loc_nclt.launch
rosbag play <root_dir>/<another_bag> --clock
  1. Evaluation

    All evaluations were performed with matlab scripts, which are open-sourced as well

5. Acknoledgements

Thanks for LOAM, LIO-SAM, FAST-LIO2

About

A real-time, robust LiDAR-inertial localization system

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 78.1%
  • Python 14.8%
  • MATLAB 6.3%
  • CMake 0.8%