https://github.com/engcang/fast-lio-localization-qn
A Map-based localization implementation combining FAST-LIO2 as an odometry with Quatro + Nano-GICP as a map matching method
https://github.com/engcang/fast-lio-localization-qn
lidar lidar-inertial-odometry lidar-slam localization loop-closure slam
Last synced: 3 days ago
JSON representation
A Map-based localization implementation combining FAST-LIO2 as an odometry with Quatro + Nano-GICP as a map matching method
- Host: GitHub
- URL: https://github.com/engcang/fast-lio-localization-qn
- Owner: engcang
- License: other
- Created: 2023-09-10T11:08:35.000Z (almost 2 years ago)
- Default Branch: master
- Last Pushed: 2024-10-28T00:04:59.000Z (8 months ago)
- Last Synced: 2025-06-04T19:30:42.038Z (24 days ago)
- Topics: lidar, lidar-inertial-odometry, lidar-slam, localization, loop-closure, slam
- Language: C++
- Homepage:
- Size: 79.1 KB
- Stars: 217
- Watchers: 4
- Forks: 18
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# FAST-LIO-Localization-QN
+ This repository is a map-based localization implementation combining [FAST-LIO2](https://github.com/hku-mars/FAST_LIO) as an odometry with [Quatro](https://quatro-plusplus.github.io/) and [Nano-GICP module](https://github.com/engcang/nano_gicp) as a map matching method
+ [Quatro](https://quatro-plusplus.github.io/) - fast, accurate and robust global registration which provides great initial guess of transform
+ [Quatro module](https://github.com/engcang/quatro) - `Quatro` as a module, can be easily used in other packages
+ [Nano-GICP module](https://github.com/engcang/nano_gicp) - fast ICP combining [FastGICP](https://github.com/SMRT-AIST/fast_gicp) + [NanoFLANN](https://github.com/jlblancoc/nanoflann)
+ Note: similar repositories already exist
+ [FAST_LIO_LOCALIZATION](https://github.com/HViktorTsoi/FAST_LIO_LOCALIZATION): FAST-LIO2 + Open3D's ICP
+ Note2: main code is modularized and hence can be combined with any other LIO / LO
+ Note3: this repo is to apply `Quatro` in localization. `Quatro` can be worked in scan-to-scan matching or submap-to-submap matching but not scan-to-submap, i.e., ***the numbers of pointclouds to be matched should be similar.***
+ Note4: **saved map file** is needed. The map should be in `.bag` format. This `.bag` files can be built with [FAST-LIO-SAM-QN](https://github.com/engcang/FAST-LIO-SAM-QN) and [FAST-LIO-SAM](https://github.com/engcang/FAST-LIO-SAM)## Video clip - https://youtu.be/MQ8XxRY472Y
## Dependencies
+ `C++` >= 17, `OpenMP` >= 4.5, `CMake` >= 3.10.0, `Eigen` >= 3.2, `Boost` >= 1.54
+ `ROS`
+ [`Teaser++`](https://github.com/MIT-SPARK/TEASER-plusplus)
```shell
git clone https://github.com/MIT-SPARK/TEASER-plusplus.git
cd TEASER-plusplus && mkdir build && cd build
cmake .. -DENABLE_DIAGNOSTIC_PRINT=OFF
sudo make install -j16
sudo ldconfig
```
+ `tbb` (is used for faster `Quatro`)
```shell
sudo apt install libtbb-dev
```## How to build
+ Get the code and then build the main code.
```shell
cd ~/your_workspace/src
git clone https://github.com/engcang/FAST-LIO-Localization-QN --recursivecd ~/your_workspace
# nano_gicp, quatro first
catkin build nano_gicp -DCMAKE_BUILD_TYPE=Release
# Note the option!
catkin build quatro -DCMAKE_BUILD_TYPE=Release -DQUATRO_TBB=ON
catkin build -DCMAKE_BUILD_TYPE=Release
. devel/setup.bash
```## How to run
+ Then run (change config files in third_party/`FAST_LIO`)
```shell
roslaunch fast_lio_localization_qn run.launch lidar:=ouster
roslaunch fast_lio_localization_qn run.launch lidar:=velodyne
roslaunch fast_lio_localization_qn run.launch lidar:=livox
```
* In particular, we provide a preset launch option for specific datasets:
```shell
roslaunch fast_lio_localization_qn run.launch lidar:=kitti
roslaunch fast_lio_localization_qn run.launch lidar:=mulran
roslaunch fast_lio_localization_qn run.launch lidar:=newer-college20
```
## Structure
+ odomPcdCallback
+ pub realtime pose in corrected frame
+ keyframe detection -> if keyframe, add to pose graph + save to keyframe queue
+ matchingTimerFunc
+ process a saved keyframe
+ detect map match -> if matched, correct TF
+ visualize all
## Memo
+ `Quatro` module fixed for empty matches
+ `Quatro` module is updated with `optimizedMatching` which limits the number of correspondences and increased the speed
This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-nc-sa/4.0/)