Skip to content

Faster-LIO: Lightweight Tightly Coupled Lidar-inertial Odometry using Parallel Sparse Incremental Voxels

License

Notifications You must be signed in to change notification settings

CoderGenJ/faster-lio

 
 

Repository files navigation

FasterLIO

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.

Quick Start

Dependency

FasterLIO is tested in Ubuntu 18.04 and Ubuntu 20.04. Please install the following libraries before compilation.

  1. ROS (melodic or noetic)
  2. glog: sudo apt-get install libgoogle-glog-dev
  3. eigen: sudo apt-get install libeigen3-dev
  4. pcl: sudo apt-get install libpcl-dev
  5. yaml-cpp: sudo apt-get install libyaml-cpp-dev

Compile

FasterLIO can be compiled by plain cmake or catkin_make. In Ubuntu 20.04, the compile step is relatively simple.

  1. 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. Use cmake .. -DWITH_IVOX_NODE_TYPE_PHC=ON to build the FasterLIO with PHC iVox.

  1. catkin_make

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 roslaunch.

  1. 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:

Run FasterLIO

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 quits:

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:

  1. Launch faster-lio: roslaunch faster_lio mapping_avia.launch This will give you a rviz window.
  2. Play the bags using rosbag play your bag file to see the online outputs.

Acknowledgements

  • 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.

Known Issues

About

Faster-LIO: Lightweight Tightly Coupled Lidar-inertial Odometry using Parallel Sparse Incremental Voxels

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 92.3%
  • Python 4.2%
  • CMake 3.5%