# FAST-LIO-Localization-QN
**Repository Path**: beichenlee/FAST-LIO-Localization-QN
## Basic Information
- **Project Name**: FAST-LIO-Localization-QN
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-03-13
- **Last Updated**: 2025-03-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## 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 --recursive
cd ~/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
## License
This work is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-nc-sa/4.0/)