# liw_oam
**Repository Path**: caolonghao/liw_oam
## Basic Information
- **Project Name**: liw_oam
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: GPL-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-09-24
- **Last Updated**: 2025-09-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 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](https://github.com/ZikangYuan/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](https://ieeexplore.ieee.org/abstract/document/10342258)
Authors: [*Zikang Yuan*](https://scholar.google.com/citations?hl=zh-CN&user=acxdM9gAAAAJ), [*Fengtian Lang*](https://scholar.google.com/citations?hl=zh-CN&user=zwgGSkEAAAAJ&view_op=list_works&gmla=ABEO0Yrl4-YPuowyntSYyCW760yxM5-IWkF8FGV4t9bs9qz1oWrqnlHmPdbt7LMcMDc04kl2puqRR4FaZvaCUONsX7MQhuAC6a--VS2pTsuwj-CyKgWp3iWDP2TS0I__Zui5da4), *Tianle Xu* and [*Xin Yang*](https://scholar.google.com/citations?user=lsz8OOYAAAAJ&hl=zh-CN)
[SR-LIO: LiDAR-Inertial Odometry with Sweep Reconstruction](https://ieeexplore.ieee.org/document/10802314)
Authors: [*Zikang Yuan*](https://scholar.google.com/citations?hl=zh-CN&user=acxdM9gAAAAJ), [*Fengtian Lang*](https://scholar.google.com/citations?hl=zh-CN&user=zwgGSkEAAAAJ&view_op=list_works&gmla=ABEO0Yrl4-YPuowyntSYyCW760yxM5-IWkF8FGV4t9bs9qz1oWrqnlHmPdbt7LMcMDc04kl2puqRR4FaZvaCUONsX7MQhuAC6a--VS2pTsuwj-CyKgWp3iWDP2TS0I__Zui5da4) and [*Xin Yang*](https://scholar.google.com/citations?user=lsz8OOYAAAAJ&hl=zh-CN)
## Demo Figure (2023-02-28 Update)
**Pipeline:**
**New Features:**
1. Following [CT-ICP](https://github.com/jedeschaud/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](https://arxiv.org/abs/2210.10424), **LIW-OAM** uses BA-based joint optimization framework, which is different from most EKF based systems.
3. **LIW-OAM** retains [SR-LIO](https://arxiv.org/abs/2210.10424)'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](http://eigen.tuxfamily.org/index.php?title=Main_Page) >= 3.2.8
>
> [PCL](https://pointclouds.org/downloads/) == 1.7 for Ubuntu 16.04, and == 1.8 for Ubuntu 18.04
>
> [Ceres](http://ceres-solver.org/installation.html) >= 1.14
>
> [ROS](http://wiki.ros.org/ROS/Installation)
##### 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
```bash
mkdir -p ~/LIW-OAM/src
cd LIW-OAM/src
```
### 3. Clone the directory and build
```bash
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](https://vision.in.tum.de/data/datasets/rgbd-dataset) format. Please down load from [Google drive](https://drive.google.com/drive/folders/1WnvzUzP_s70p4myPf5fsP1Jtr_62PnL1)**.
### 1. Run on [*NCLT*](http://robots.engin.umich.edu/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](https://arxiv.org/abs/2210.10424), 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:
```bash
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:
```bash
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:
```bash
rosbag play SEQUENCE_NAME.bag --clock -d 1.0 -r 1.0
```
### 2. Run on [*KAIST*](https://sites.google.com/view/complex-urban-dataset)
For point clouds, we utilize the data from both two 3D LiDARs of *KAIST*. Users can package the rosbag according to the tool [kaist2bag](https://github.com/ZikangYuan/kaist2bag). The partial test sequences of *KAIST* used by us can also be downloaded from [Google drive](https://drive.google.com/drive/folders/1upQuR9cWoawM6MuPYxSpPQPlRLK7sDWU).
Chinese users can download the test sequences of *KAIST* form [baidu yun](https://pan.baidu.com/s/1vrat2HdTf6NBrjw_kGCZNw), while the password is **s4bw**.
Please go to the workspace of **LIW-OAM** and type:
```bash
source devel/setup.bash
roslaunch liw_oam liw_kaist.launch
```
Then open the terminal in the path of the bag file, and type:
```bash
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](https://github.com/jedeschaud/ct_icp), [Fast-LIO](https://github.com/hku-mars/FAST_LIO), [VINs-Mono](https://github.com/HKUST-Aerial-Robotics/VINS-Mono) and [Open-VINs](https://github.com/rpng/open_vins).