# 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

+ By utilizing the forward and backward propagation structure of FAST-LIO2, each update method is implemented as follows:


Update methods - (left): Bundle (right): Asynchronous


## Results of each method (for better understanding, please watch the [related video](https://youtu.be/YQmjKMoBPNU)) + For two sensor configurations, + Config1: Livox-MID360 x 2EA (each is tilted +143, -143 degree) + Config2: Livox-MID360 x 1EA (0 degree tilted), Livox-AVIA x 1EA (90 degree tilted)


Sensor config - (left): config1 (right): config2

+ For aggresive motion and middle-altitude flight situation with sensor config1, asynchronous update method shows better performance + Green: ground-truth, turquoise: FAST-LIO-MULTI


Side view - (left): Bundle (right): Async


Top view - (left): Bundle (right): Async

+ For high-altitude flight situation (no many scanned data) with sensor config2, bundle update method shows better and robust performance + Green: ground-truth, turquoise: FAST-LIO-MULTI


Top view - (left): Bundle (right): Async


Side view - (left): Bundle (right): Async