ZikangYuan / liw_oam

[IROS 2023] A LiDAR-inertial-wheel odometry and mapping system based on BA framework.
GNU General Public License v2.0
537 stars 73 forks source link

LIW-OAM

LIW-OAM (Lidar-Inertial-Wheel Odometry and Mapping) is an accurate and robust bundle adjustment (BA) based LiDAR-inertial-wheel odometry and mapping system that can provide accurate pose esmation and dense point cloud map results. Compared with our previous work SR-LIO, LIW-OAM can further improve the accuracy of pose estimation and guarantee the real-time performance.

Related Work

LIWO: LiDAR-Inertial-Wheel Odometry

Authors: Zikang Yuan, Fengtian Lang, Tianle Xu and Xin Yang

SR-LIO: LiDAR-Inertial Odometry with Sweep Reconstruction

Authors: Zikang Yuan, Fengtian Lang and Xin Yang

Demo Figure (2023-02-28 Update)

Pipeline:

New Features:

  1. Following CT-ICP, LIW-OAM represents the state of two moments in each sweep: 1) at the beginning time of a sweep, and 2) at the end time of the sweep.
  2. Following SR-LIO, LIW-OAM uses BA-based joint optimization framework, which is different from most EKF based systems.
  3. LIW-OAM retains SR-LIO's sweep reconstruction module, which can be performed by adjust the parameter "sweep_cut_num". However, we recommend that users do not use the sweep reconstruction function, because LIW-OAM can achieve higher pose estimation accuracy in real time without the requirement of sweep reconstruction.

Installation

1. Requirements

GCC >= 5.4.0

Cmake >= 3.0.2

Eigen3 >= 3.2.8

PCL == 1.7 for Ubuntu 16.04, and == 1.8 for Ubuntu 18.04

Ceres >= 1.14

ROS

Have Tested On:
OS GCC Cmake Eigen3 PCL Ceres
Ubuntu 16.04 5.4.0 3.16.0 3.2.8 1.7 1.14
Ubuntu 18.04 7.5.0 3.11.2 3.3.4 1.8 1.14

2. Create ROS workspace

mkdir -p ~/LIW-OAM/src
cd LIW-OAM/src

3. Clone the directory and build

git clone https://github.com/ZikangYuan/liw_oam.git
cd ..
catkin_make

Run on Public Datasets

Noted:

A. Except fot the external parameters between IMU and LiDAR, and the value of gravitational acceleration, the parameter configurations used in different datasets are exactly the same to demonstrate the stability and robustness of the LIW-OAM.

B. Please make sure the LiDAR point clouds have the "ring" channel information.

C. The warning message "Failed to find match for field 'time'." doesn't matter. It can be ignored.

D. Please create a folder named "output" before running. When LIW-OAM is running, the estimated pose is recorded in real time in the pose.txt located in the output folder.

E. If you want to get some visualization of the split and recombine, please set the debug_output parameter in the launch file to 1 (true). After that, you can get some .pcd files in "output/cloud_frame" and "output/cut_sweep" folders.

F. In order to facilitate evaluation, we store the pose ground truth of the three datasets used by us as TUM format. Please down load from Google drive.

1. Run on NCLT

The time for finishing a sweep by the LiDAR of NCLT is not 100ms, but 130~140ms (around 7 Hz). Different from SR-LIO, we package the data stream of the NCLT dataset as 10 Hz sweep packages. The nclt_to_rosbag_10Hz.py in the "tools" folder can be used to package 10 Hz sweeps and linearly interpolated 100 Hz IMU data into a rosbag file:

python3 nclt_to_rosbag_10Hz.py PATH_OF_NVLT_SEQUENCE_FOLDER PATH_OF_OUTPUT_BAG

Then, please go to the workspace of LIW-OAM and type:

cd LIW-OAM
source devel/setup.bash
roslaunch liw_oam liw_nclt.launch

Then open the terminal in the path of the bag file, and type:

rosbag play SEQUENCE_NAME.bag --clock -d 1.0 -r 1.0

2. Run on KAIST

For point clouds, we utilize the data from both two 3D LiDARs of KAIST. Users can package the rosbag according to the tool kaist2bag. The partial test sequences of KAIST used by us can also be downloaded from Google drive.

Chinese users can download the test sequences of KAIST form baidu yun, while the password is s4bw.

Please go to the workspace of LIW-OAM and type:

source devel/setup.bash
roslaunch liw_oam liw_kaist.launch

Then open the terminal in the path of the bag file, and type:

rosbag play SEQUENCE_NAME.bag --clock -d 1.0 -r 1.0

Citation

If you use our work in your research project, please consider citing:

@inproceedings{yuan2023liwo,
  title={LIWO: LiDAR-Inertial-Wheel Odometry},
  author={Yuan, Zikang and Lang, Fengtian and Xu, Tianle and Yang, Xin},
  booktitle={2023 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
  pages={1481--1488},
  year={2023},
  organization={IEEE}
}

Acknowledgments

Thanks for CT-ICP, Fast-LIO, VINs-Mono and Open-VINs.