Robust and High-Precision LiDAR-Inertial-UWB-Wheel Odometry for Extreme Degradation Coal Mine Tunnels
IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS 2025)
Kun Hu1 · Menggang Li1,† · Zhiwen Jin1 · Chaoquan Tang1 · Eryi Hu2 · Gongbo Zhou1
1 China University of Mining and Technology, Xuzhou, China
2 Information Institute, Ministry of Emergency Management, China
† Corresponding author
CM-LIUW-Odometry remains stable after leaving UWB coverage, while LiDAR-only and ablated variants drift or degenerate. Click to watch the IROS 2025 demonstration.
CM-LIUW-Odometry is a tightly coupled LiDAR–IMU–UWB–wheel odometry system for long, repetitive, GPS-denied coal mine tunnels. It combines global UWB constraints, wheel odometry with nonholonomic and lever-arm compensation, and covariance-based degradation detection inside one Iterated Error-State Kalman Filter (IESKF). The estimator switches between LIU, LIO, and LIW modes according to UWB availability and environmental degeneracy.
| Global reference | Beyond UWB range | Degeneracy awareness | Estimator |
|---|---|---|---|
| UWB position + range | Wheel odometry + NHC | Covariance PCA/SVD | Tightly coupled IESKF |
- 2026-08-23 — Source code, reproducible installation guide, project page, and the underground ROS bag released.
- 2025-11-04 — Updated manuscript released on arXiv.
- 2025-06-16 — CM-LIUW-Odometry accepted to IROS 2025. 🎉
System overview. UWB, LiDAR, IMU, and wheel constraints are updated in a unified IESKF.
The system contributes three components for extreme-degradation tunnels:
- Global-coordinate alignment. UWB position and range residuals constrain LiDAR–inertial odometry inside the UWB coverage region.
- Robust estimation beyond UWB. Tightly coupled wheel odometry, nonholonomic constraints, and lever-arm compensation suppress drift after UWB measurements disappear.
- Adaptive motion modes. Covariance decomposition detects the direction and severity of degeneration and activates the appropriate LIU/LIO/LIW fusion mode.
The default, core estimator has been tested with the following software stack:
- Ubuntu 20.04 LTS, ROS Noetic, GCC 9.4
- CMake ≥ 3.10 and C++14
- Eigen 3, PCL 1.8+, OpenCV 4, Ceres Solver, GeographicLib, Boost
catkin_tools- Livox ROS Driver v2.6.x for Livox
CustomMsgsupport
Note
The optional PALoc pose-graph node is disabled by default. It additionally requires GTSAM and the Open3D C++ SDK; neither is required for the core cm_liuw_slam estimator.
Install ROS Noetic, then run:
sudo apt update
sudo apt install -y \
build-essential cmake git python3-catkin-tools python3-dev \
libboost-all-dev libceres-dev libeigen3-dev libgeographic-dev \
libgflags-dev libgoogle-glog-dev libopencv-dev libpcl-dev \
ros-noetic-eigen-conversions ros-noetic-pcl-ros \
ros-noetic-tf-conversionsThis repository is a ready-to-build Catkin workspace. Clone it with its Livox driver submodule:
git clone --recursive https://github.com/KJ-Falloutlast/CM-LIUW-Odometry.git
cd CM-LIUW-Odometry
source /opt/ros/noetic/setup.bash
rosdep install --from-paths src --ignore-src -r -y
catkin config \
--extend /opt/ros/noetic \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_PGO=OFF
catkin build common_msgs livox_ros_driver cm_liuw_odometry
source devel/setup.bashIf the repository was cloned without --recursive, initialize the dependency with:
git submodule update --init --recursiveCopy the closest file under src/cm_liuw_odometry/config and update the topics, noise values, timestamps, and calibrated extrinsics before running. The four required input contracts are:
| Modality | ROS message | Configuration key |
|---|---|---|
| LiDAR | sensor_msgs/PointCloud2 or livox_ros_driver/CustomMsg |
common/lid_topic |
| IMU | sensor_msgs/Imu |
common/imu_topic |
| Wheel odometry | nav_msgs/Odometry |
common/wheel_topic |
| UWB | common_msgs/UWB_FullNeighborDatabase |
common/uwb_topic |
Set common/use_wheel and common/use_uwb to enable the corresponding fusion updates. Do not reuse the provided extrinsics or anchor coordinates unless they match your own calibrated rig.
For a Livox Avia LiDAR–IMU setup:
source /opt/ros/noetic/setup.bash
source devel/setup.bash
roslaunch cm_liuw_odometry mapping_avia.launchPlay your sensor bag in another terminal:
source devel/setup.bash
rosbag play /absolute/path/to/your_sequence.bagPrimary outputs include:
| Topic | Type | Description |
|---|---|---|
/Odometry_ori |
nav_msgs/Odometry |
Fused odometry |
/path_ori |
nav_msgs/Path |
Estimated trajectory |
/cloud_registered_ori |
sensor_msgs/PointCloud2 |
Registered point cloud in the world frame |
/cloud_registered_body_ori |
sensor_msgs/PointCloud2 |
Registered point cloud in the body frame |
/Laser_map_ori |
sensor_msgs/PointCloud2 |
Incremental map |
After installing compatible GTSAM and Open3D C++ development packages, rebuild with:
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_PGO=ON
catkin build cm_liuw_odometryRelease status: public ROS bag available. Download from Baidu Netdisk with extraction code
idnx.
The dataset used for the IROS 2025 real-world experiment was collected with the CUMT 5 mobile robot in an extreme-degradation underground coal mine tunnel.
| Sequence | Environment | Sensor suite | Ground truth | Status |
|---|---|---|---|---|
CM-LIUW-CoalMine |
Long, repetitive, feature-poor coal mine tunnel | Robosense 32 LiDAR, Xsens-G710 IMU, p440 UWB, wheel odometry | 15 total-station reference points | Download |
Current public file:
cm-liuw-odometry-underground-dataset-2025-01-13-16-10-36-zhefan-continuous-go.bag- Baidu Netdisk extraction code:
idnx
After downloading, inspect and play the bag with:
rosbag info cm-liuw-odometry-underground-dataset-2025-01-13-16-10-36-zhefan-continuous-go.bag
rosbag play cm-liuw-odometry-underground-dataset-2025-01-13-16-10-36-zhefan-continuous-go.bagCalibration files, the topic manifest, total-station evaluation files, checksums, mirrors, and a standalone dataset license are not yet included in this repository. They will be linked here and on the project page as they become available. Until the dataset license is published, please contact the authors before redistributing the bag.
CM-LIUW-Odometry/
├── src/
│ ├── cm_liuw_odometry/ # estimator, configs, launch files, RViz
│ ├── common_msgs/ # UWB/navigation message definitions
│ └── livox_ros_driver/ # pinned Git submodule
├── doc/ # paper figures used by the README
├── docs/ # GitHub Pages project website
├── CITATION.cff
└── LICENSE
If this work helps your research, please cite the IROS paper and consider giving the repository a star.
{% raw %}
@inproceedings{hu2025cmliuw,
author = {Kun Hu and Menggang Li and Zhiwen Jin and Chaoquan Tang and Eryi Hu and Gongbo Zhou},
title = {{CM-LIUW-Odometry}: Robust and High-Precision {LiDAR}-Inertial-{UWB}-Wheel Odometry for Extreme Degradation Coal Mine Tunnels},
booktitle = {2025 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
year = {2025},
pages = {7139--7146},
doi = {10.1109/IROS60139.2025.11245914}
}
{% endraw %}This project builds upon ideas and open-source components from FAST-LIO2, UWB Localization, slam_in_autonomous_driving, PALoc, and FAST-LIO-Multi-Sensor-Fusion. We thank their authors for their contributions to the robotics community.
The source code is released under the GNU General Public License v2.0, consistent with the FAST-LIO2 codebase on which part of this system builds. Existing third-party copyright and license notices remain applicable. Dataset terms will be published with the dataset archive.
For reproducibility questions, please open an issue and include your Ubuntu/ROS version, sensor model, launch file, configuration diff, and the first relevant error message.
Made for robust autonomy where GPS and geometry both disappear.