MCPcopy Create free account
hub / github.com/HaisenbergPeng/ROLL

github.com/HaisenbergPeng/ROLL @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
408 symbols 917 edges 27 files 59 documented · 14% updated 3y ago★ 2348 open issues

Browse by type

Functions 340 Types & classes 68
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

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

Core symbols most depended-on inside this repo

Shape

Method 291
Class 67
Function 49
Enum 1

Languages

C++79%
Python21%

Modules by API surface

include/MISC/nanoflann.hpp129 symbols
src/mapOptmization.cpp51 symbols
src/mapOptimizationGT.cpp28 symbols
scripts/MISC/odom_publisher_new_wheelSpeed.py27 symbols
include/lidarFactor.hpp16 symbols
src/globalOpt.cpp14 symbols
include/Factors.h13 symbols
src/globalOptCERES.cpp11 symbols
scripts/nclt_data2bag_BIN.py11 symbols
scripts/MISC/rec_control.py11 symbols
include/utility.h11 symbols
scripts/kitti2bag/kitti2bag.py10 symbols

For agents

$ claude mcp add ROLL \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page