Note: The method is under paper submission, please be cautious to use or write the paper based on this repo to follow research ethics
- This repository is a FAST-LIO2'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
ROS
,Ubuntu
,PCL
>= 1.8,Eigen
>= 3.3.4livox_ros_driver
cd ~/your_workspace/src
git clone https://github.com/Livox-SDK/livox_ros_driver
cd ..
catkin build -DCMAKE_BUILD_TYPE=Release
- Get the code, and then build
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
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
- 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)
- 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