# FAST_LIO_MULTI
**Repository Path**: sungq5/FAST_LIO_MULTI
## Basic Information
- **Project Name**: FAST_LIO_MULTI
- **Description**: fast_lio 双雷达
- **Primary Language**: C++
- **License**: GPL-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-12-10
- **Last Updated**: 2024-12-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Note: The method is under paper submission, please be cautious to use or write the paper based on this repo to follow research ethics
# FAST-LIO-MULTI
+ This repository is a [FAST-LIO2](https://github.com/hku-mars/FAST_LIO)'s extended version of multi-LiDAR
+ Optionally, user can choose one of bundle update method vs asynchronous update vs adaptive update method
## Related video: https://youtu.be/YQmjKMoBPNU
## Dependencies
+ `ROS`, `Ubuntu`, `PCL` >= 1.8, `Eigen` >= 3.3.4
+ [`livox_ros_driver`](https://github.com/Livox-SDK/livox_ros_driver)
```shell
cd ~/your_workspace/src
git clone https://github.com/Livox-SDK/livox_ros_driver
cd ..
catkin build -DCMAKE_BUILD_TYPE=Release
```
## How to build and run
+ Get the code, and then build
```shell
cd ~/your_workspace/src
git clone https://github.com/engcang/FAST_LIO_MULTI
cd ..
catkin build -DCMAKE_BUILD_TYPE=Release
. devel/setup.bash
```
+ Then run
```shell
roslaunch fast_lio_multi run.launch update_method:=bundle
roslaunch fast_lio_multi run.launch update_method:=async
roslaunch fast_lio_multi run.launch update_method:=adaptive
```
## Update methods: bundle vs asynchronous vs adaptive
+ Bundle update: merge multi LiDAR scans into one pointcloud, and then update
+ Prevent no scan data input in extreme situation, e.g., high altitude flight of drones
+ Longer update interval (which may cause drift during aggresive and fast movement from state propagation with only IMU)
+ **NOTE: current code implementation will properly work for LiDARs with same scan rates (e.g., same 10Hz)**
+ Asynchronous update: update the filter whenever LiDAR scan inputs
+ Shorter update interval (which may reduce drift from state propagation with only IMU)
+ Depending on the sensor configuration, none-scanned data update may occur (which may result in divergence)
+ Adaptive update method
+ Asynchronous update => bundle update (only when data in FoV is not enough) => asynchronous update
+ Shorter update interval + preventing no scan data input!
Update methods - (upper): Bundle, (middle): Asynchronous, (bottom): Adaptive
Update methods - (left): Bundle (right): Asynchronous
Sensor config - (left): config1 (right): config2
Side view - (left): Bundle (right): Async
Top view - (left): Bundle (right): Async
Top view - (left): Bundle (right): Async
Side view - (left): Bundle (right): Async