This is the code repository of FasterLIO by Chunge Bai, Tao Xiang, Yajie Chen, Haoqian Wang, Fang Zhang and Xiang Gao.
Faster-LIO is a light-weight Lidar-inertial odometry for lidar pose tracking and point cloud mapping. It is developed on
the base of FastLIO2 and provides about 1.5-2x speed increase. It achieves
almost 1k-2k hz for solid-state lidars and over 100 hz for a typical 32 lines spinning lidar. Please refer to our paper
for more details.
Below is the FPS tested with avia and velodyne 32 spinning lidar from FastLIO2 and NCLT, where “AMD” is tested with AMD R7 5800X and “Intel” tested with Intel Xeon Gold 5218.
FasterLIO is tested in Ubuntu 18.04 and Ubuntu 20.04. Please install the following libraries before compilation.
- ROS (melodic or noetic)
sudo apt-get install libgoogle-glog-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libpcl-dev
sudo apt-get install libyaml-cpp-dev
FasterLIO can be compiled by plain cmake or catkin_make. In Ubuntu 20.04, the compile step is relatively simple.
- Plain cmake
Use the following commands to build FasterLIO:
mkdir build cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j4
Note: iVox type should be specified by cmake at compile time. By default we will use linear iVox.
cmake .. -DWITH_IVOX_NODE_TYPE_PHC=ON to build the FasterLIO with PHC iVox.
Clone this repository to your catkin workspace, e.g., ~/catkin_ws/src, then use catkin_make instead of the above cmake
commands. You can also specify the iVox type in catkin_make parameters.
After the compilation, you will get the a libfaster_lio.so and two executable files. If you choose plain cmake build,
they will be located in ./build/devel/lib/faster_lio. If you use catkin_make, you could run them with rosrun and
- Compile in Ubuntu 18.04 or earlier
Since FasterLIO use cpp 17 as its standard (which requires a higher version of g++), you should upgrade the compiler and
use the earlier tbb library provided in the thirdparty of this repo. Please follow the steps here:
- Upgrade the g++ compiler to 9.0 or higher by:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt install gcc-9 cd /usr/bin sudo rm gcc g++ sudo ln -s gcc-9 gcc sudo ln -s g++-9 g++
- unzip the tbb library in the thirdparty:
cd thirdparty tar -xvf tbb2018_20170726oss_lin.tgz
- specify the tbb directory in the cmake stage:
cmake .. -DCUSTOM_TBB_DIR=`pwd`/../thirdparty/tbb2018_20170726oss
Then just build FasterLIO with make.
Prepare the datasets
Download the avia/nclt bags in your computer:
FasterLIO can be called like a plain binary program. It can run in offline mode or online mode like any ros program.
- Offline mode
Call run_mapping_offline with parameters to specify the bag file and the config file like:
./build/devel/lib/faster_lio/run_mapping_offline --bag_file your_avia_bag_file --config_file ./config/avia.yaml
for avia. For NCLT, just run:
./build/devel/lib/faster_lio/run_mapping_offline --bag_file your_nclt_bag_file --config_file ./config/velodyne.yaml
Please replace “your avia bag file” with the path in your computer. FasterLIO will print the FPS and time usage when it
I0216 17:16:05.286536 26492 run_mapping_offline.cc:89] Faster LIO average FPS: 1884.6 I0216 17:16:05.286549 26492 run_mapping_offline.cc:91] save trajectory to: ./src/fast_lio2/Log/faster_lio/20120615.tum I0216 17:16:05.286706 26492 utils.h:52] >>> ===== Printing run time ===== I0216 17:16:05.286711 26492 utils.h:54] > [ IVox Add Points ] average time usage: 0.0147311 ms , called times: 6373 I0216 17:16:05.286721 26492 utils.h:54] > [ Incremental Mapping ] average time usage: 0.0271787 ms , called times: 6373 I0216 17:16:05.286731 26492 utils.h:54] > [ ObsModel (IEKF Build Jacobian) ] average time usage: 0.00745852 ms , called times: 25040 I0216 17:16:05.286752 26492 utils.h:54] > [ ObsModel (Lidar Match) ] average time usage: 0.0298004 ms , called times: 25040 I0216 17:16:05.286775 26492 utils.h:54] > [ Downsample PointCloud ] average time usage: 0.0224052 ms , called times: 6373 I0216 17:16:05.286784 26492 utils.h:54] > [ IEKF Solve and Update ] average time usage: 0.342008 ms , called times: 6373 I0216 17:16:05.286792 26492 utils.h:54] > [ Laser Mapping Single Run ] average time usage: 0.530618 ms , called times: 6387 I0216 17:16:05.286800 26492 utils.h:54] > [ Preprocess (Livox) ] average time usage: 0.0267813 ms , called times: 6387 I0216 17:16:05.286808 26492 utils.h:54] > [ Undistort Pcl ] average time usage: 0.0810455 ms , called times: 6375 I0216 17:16:05.286816 26492 utils.h:59] >>> ===== Printing run time end =====
Point clouds will be saved to PCD/scans.pcd by default.
- Online mode
Online mode could be launched through rosrun/roslaunch/directly call. We use roslaunch as an example:
- Launch faster-lio:
roslaunch faster_lio mapping_avia.launchThis will give you a rviz window.
- Play the bags using
rosbag play your bag fileto see the online outputs.
- We thank the authors of FastLIO2, LOAM for their great jobs.
- Please cite our work if you are using FasterLIO in academic work. Bibtex citation will be privided soon.
- This work is supported by Idriver+ Technologies Co. Ltd.
- iVox is somehow sensitive to the voxel size. Please enlarge the voxel size if FasterLIO is not stable in your
- set -march=native in cmake may cause a core dump in the PCL point cloud deconstruction step (Ubuntu 20.04, gcc 11, AMD
5800X)(Ubuntu 18.04, gcc 9, i7-10750H), see