FAST-LIO
Source: https://github.com/hku-mars/FAST_LIO/tree/ROS2
ROS2 Fork repo Maintainer: Ericsiii
Related Work and Extended
SLAM:
- ikd-Tree: State-of-the-art dynamic KD-Tree for 3D kNN search.
- R2LIVE: High-precision LiDAR-Inertial-Vision fusion using FAST-LIO as the LiDAR inertial front end.
- LI_Init: A powerful real-time LiDAR-IMU external initialization and synchronization package.
- FAST-LIO-LOCALIZATION: Integration of FAST-LIO and relocation function modules.
Control and Plan:
- IKFOM: Fast and high-accuracy manifold Kalman filter toolbox.
- UAV Avoiding Dynamic Obstacles: One of the implementations of FAST-LIO in robot planning.
- UGV Demo: Model predictive control for trajectory tracking on differentiable manifolds.
- Bubble Planner: Plan high-speed smooth quadrotor trajectories using retreat corridors.
FAST-LIO
FAST-LIO (Fast LiDAR-Inertial Odometry) is a computationally efficient and robust lidar-inertial odometry software package. It fuses lidar feature points with IMU data using a tightly coupled iterative extended Kalman filter, enabling robust navigation in fast-moving, noisy, or cluttered environments, even without signal degradation. Our package addresses several key issues:
- Fast iterative Kalman filter for odometry optimization;
- Automatically initialize in the most stable environment;
- Parallel KD tree search to reduce computational complexity;
FAST-LIO 2.0 (Updated on July 5, 2021
Related videos: FAST-LIO2, FAST-LIO1
pipeline:
New features:
- Use ikd-Tree for incremental mapping, achieving faster speed and LiDAR rates exceeding 100Hz.
- Direct odometry (scan to map) of raw LiDAR points (feature extraction can be disabled) for better accuracy.
- Because feature extraction is not required, FAST-LIO2 can support multiple types of lidars, including rotating (Velodyne, Ouster) and solid-state (Livox Avia, Horizon, MID-70) lidars, and can be easily expanded to support more lidars.
- Supports external IMU.
- Supports ARM-based platforms, including Khadas VIM3, Nivida TX2, and Raspberry Pi 4B (8G RAM).
Related papers:
FAST-LIO2: Fast Direct LiDAR-Inertial Odometry
Contributors
Wei Xu, Yixi Cai, Dongjiao He, Fang Cheng Zhu, Jiarong Lin, Cheng Liu, Borong Yuan
1.
1.1 Ubuntu and
Ubuntu >= 20.04
The default values for apt PCL and Eigen are sufficient for FAST-LIO to work properly.
ROS >= Foxy (ROS-Humble is recommended). ROS installation
1.2. PCL &&
PCL >= 1.8, follow the PCL installation.
Eigen >= 3.3.4, install according to Eigen.
1.3. livox_ros_driver2
Install according to livox_ros_driver2 .
You can also use my modified livox_ros_driver2
Comment:
- Because FAST-LIO must first support the Livox series LiDAR, you must install and obtain the ****livox_ros_driver before running any FAST-LIO startup files .
- How to source? The easiest way is to add the following line source $Licox_ros_driver_dir$/devel/setup.bashto the end of the file~/.bashrc, where$Licox_ros_driver_dir$is the directory of the livox ros driver workspace (ws_livoxwhich should be the directory if you followed the livox official documentation exactly).
2.
Clone the repository and build colcon:
cd <ros2_ws>/src # cd into a ros2 workspace folder
    git clone https://github.com/Ericsii/FAST_LIO.git --recursive
    cd ..
    rosdep install --from-paths src --ignore-src -y
    colcon build --symlink-install
    . ./install/setup.bash # use setup.zsh if use zsh
- Remember to get the livox_ros_driver before building (follow 1.3 livox_ros_driver )
- If you want to use a custom version of PCL, add the following line to ~/.bashrc export PCL_ROOT={CUSTOM_PCL_PATH}
3.
Notable:
A. Please make sure that the IMU and LiDAR are synchronized. This is very important.
B. The warning message "Failed to find match for field 'time'." indicates that the timestamp of each LiDAR point is missing from the rosbag file. This is important for both forward and backward propagation.
C. If extrinsic parameters are provided, it is recommended to set extrinsic_est_en to false. For initialization of extrinsic parameters, please refer to our recent research results: Robust Real-time LiDAR-inertial Initialization.
3.1
Follow the installation steps of Livox-ros-driver2, connect your computer to Livox LiDAR, and then
cd <ros2_ws>
. install/setup.bash # use setup.zsh if use zsh
ros2 launch fast_lio mapping.launch.py config_file:=avia.yaml
config_file Change the parameters to other yaml files in the config directory as needed.
Start the livox ros driver. Take MID360 as an example.
ros2 launch livox_ros_driver2 msg_MID360_launch.py
- For the Livox series, FAST-LIO only supports collected data livox_lidar_msg.launch, because only itslivox_ros_driver2/CustomMsgdata structure generates a timestamp for each LiDAR point, which is very important for motion undistortion.livox_lidar.launchIt cannot be generated now.
- If you want to change the frame rate, modify the publish_freq parameter in livox_lidar_msg.launch of Livox-ros-driver before making the livox_ros_driver package .
3.2 For Livox series external
Theoretically, mapping_avia.launch supports mid-70, mid-40, or other Livox series LiDARs, but some parameters need to be set before running:
Edit config/avia.yaml to set the following parameters:
- LiDAR point cloud theme name:lid_topic
- IMU Topic Name:imu_topic
- External factors of translation:extrinsic_T
- Rotate External: ( extrinsic_ROnly supports rotation matrices)
- The extrinsic parameters in FAST-LIO are defined as the LiDAR's position and rotation matrix in the IMU's coordinate system (i.e., the IMU's reference coordinate system). Specific parameters can be found in the official manual.
- FAST-LIO provides a very simple software time synchronization function for Livox LiDAR. It can be time_sync_enenabled by simply setting the parameter to true. However, it should only be enabled when external time synchronization is truly impossible, as software time synchronization cannot guarantee accuracy.
3.4 PCD file
Set to in the startup file pcd_save_enable. After FAST -LIO terminates, 1 all scans (in the global frame) will be accumulated and saved to a file. The point cloud can be visualized.FAST_LIO/PCD/scans.pcd``pcl_viewer scans.pcd
Tips for pcl_viewer:
- While pcl_viewer is running, press 1, 2, 3, 4, 5 on your keyboard to change what is being visualized/colored.
1 is all random
    2 is X values
    3 is Y values
    4 is Z values
    5 is intensity
4. Rosbag
4.1 Livox Avia Rosbag
File: can be downloaded from google drive **!!!This ros1 package should be converted to ros2!!!**
running:
ros2 launch fast_lio mapping.launch.py config_path:=<path_to_your_config_file>
ros2 bag play <your_bag_dir>
4.2 Velodyne HDL-32E
NCLT Dataset: The original bin files can be found here.
We have created a Rosbag file and a Python script for generating Rosbag files :python3 sensordata_to_rosbag_fastlio.py bin_file_dir bag_name.bag **!!!This ros1 bag should be converted to ros2!!!** To convert the ros1 bag to the ros2 bag, please follow the document
running:
roslaunch fast_lio mapping_velodyne.launch
rosbag play YOUR_DOWNLOADED.bag
5.
To verify the robustness and computational efficiency of FAST-LIO in a real mobile robot, we built a small quadrotor equipped with a Livox Avia lidar with a 70-degree FoV and a DJI Manifold 2-C onboard computer equipped with a 1.8 GHz Intel i7-8550U CPU and 8 GB RAM, as shown below.
The main structure of the drone is 3D printed (aluminum or PLA), and the.stl files will be open sourced in the future.
6.
Thanks to LOAM (J. Zhang and S. Singh. LOAM: Real-time LiDAR Odometry and Mapping), Livox_Mapping, LINS, and Loam_Livox.





