This package provides a ROS2 wrapper for the LiDAR Odometry system with Probabilistic Kernel Optimization (PKO). It enables real-time LiDAR-based odometry estimation in ROS2 environments.
- โก Real-time LiDAR odometry processing
- ๐ฏ Feature-based point cloud registration
- ๐ง Ceres Solver-based optimization with PKO
- ๐ ROS2 native implementation
- ๐ TF2 transform broadcasting
- ๐ Trajectory visualization
- ๐ฎ Optional Pangolin viewer integration
rclcppsensor_msgsnav_msgsgeometry_msgsvisualization_msgstf2andtf2_rospcl_rosandpcl_conversions
- Eigen3
- PCL (Point Cloud Library)
- Ceres Solver
- OpenGL and GLEW
- Pangolin (included as submodule)
# Create a new ROS2 workspace
mkdir -p lidar_odom_ws/src
cd lidar_odom_ws/src
# Clone the repository
git clone https://github.com/93won/lidar_odometry_ros_wrapper.git
cd lidar_odometry_ros_wrapper
# Initialize and download submodules
git submodule update --init --recursive# Ubuntu 22.04
sudo apt update
sudo apt install -y \
libeigen3-dev \
libpcl-dev \
libceres-dev \
libgl1-mesa-dev \
libglew-dev \
pkg-configcd ../../ # Go back to lidar_odom_ws root
colcon build --packages-select lidar_odometry_ros
source install/setup.bash# Launch with default Velodyne topic
ros2 launch lidar_odometry_ros lidar_odometry.launch.py \
config_file:=/path/to/your/workspace/lidar_odometry_ros_wrapper/lidar_odometry/config/kitti.yaml
# Launch with custom topic (e.g., Livox)
ros2 launch lidar_odometry_ros lidar_odometry.launch.py \
config_file:=/path/to/your/workspace/lidar_odometry_ros_wrapper/lidar_odometry/config/kitti.yaml \
pointcloud_topic:=/livox/pointcloud \
use_sim_time:=trueDownload and play the KITTI sample ROS bag file:
# Download KITTI sample bag
# https://drive.google.com/file/d/1U0tRSsc1PbEj_QThOHcD8l3qFkma3zjc/view?usp=sharing
# Terminal 1: Launch odometry system
ros2 launch lidar_odometry_ros lidar_odometry.launch.py \
config_file:=/path/to/your/workspace/lidar_odometry_ros_wrapper/lidar_odometry/config/kitti.yaml \
use_sim_time:=true
# Terminal 2: Play KITTI bag file
ros2 bag play /path/to/kitti_sample.bag --clockDownload and play the Livox MID360 sample ROS bag file:
# Download Livox MID360 sample bag
# https://drive.google.com/file/d/1UI6Qc5cdY8R61Odc7A6IU-jRWZgnCx2g/view?usp=sharing
# Source: https://www.youtube.com/watch?v=u8siB0KLFLc
# Terminal 1: Launch odometry system for Livox
ros2 launch lidar_odometry_ros lidar_odometry.launch.py \
config_file:=/path/to/your/workspace/lidar_odometry_ros_wrapper/lidar_odometry/config/kitti.yaml \
use_sim_time:=true \
pointcloud_topic:=/livox/pointcloud
# Terminal 2: Play Livox bag file
ros2 bag play /path/to/livox_mid360_sample.bag --clockNote: The Livox sample data uses standard sensor_msgs/PointCloud2 messages, not Livox custom message format.
# Create data directory
mkdir -p ~/kitti_data
cd ~/kitti_data
# Download KITTI Odometry Dataset (example: sequence 00)
# Visit: https://www.cvlibs.net/datasets/kitti/eval_odometry.php
# Download velodyne laser data and poses
# Expected structure:
# ~/kitti_data/
# โโโ sequences/
# โ โโโ 00/
# โ โโโ velodyne/
# โ โ โโโ 000000.bin
# โ โ โโโ 000001.bin
# โ โ โโโ ...
# โ โโโ poses.txt# Use the provided conversion script
cd ~/ros2_ws/src/lidar_odometry_ros_wrapper/scripts
python3 kitti_to_rosbag.py \
--kitti_dir ~/kitti_data/sequences/07 \
--output_bag ~/kitti_data/kitti_seq07.db3 \
--topic_name /velodyne_points \
--frame_id velodyne# Terminal 1: Launch odometry system for KITTI
ros2 launch lidar_odometry_ros lidar_odometry.launch.py \
config_file:=$(pwd)/lidar_odometry/config/kitti.yaml \
use_sim_time:=true \
pointcloud_topic:=/velodyne_points
# Terminal 2: Play KITTI bag file
ros2 bag play ~/kitti_data/kitti_seq07.db3 --clock# Terminal 1: Launch odometry system for Livox MID360
ros2 launch lidar_odometry_ros lidar_odometry.launch.py \
config_file:=$(pwd)/lidar_odometry/config/kitti.yaml \
use_sim_time:=true \
pointcloud_topic:=/livox/pointcloud
# Terminal 2: Play Livox bag file
ros2 bag play /path/to/your/livox_bag --clockconfig_file: Path to YAML configuration file (required)use_sim_time: Enable simulation time for bag playback (default: true)pointcloud_topic: Input point cloud topic name (default: /velodyne_points)enable_rviz: Launch RViz for visualization (default: true)
This project is released under the MIT License. See the original LiDAR Odometry repository for more details.
If you use this work, please cite:
@article{choi2025probabilistic,
title={Probabilistic Kernel Optimization for Robust State Estimation},
author={Choi, Seungwon and Kim, Tae-Wan},
journal={IEEE Robotics and Automation Letters},
volume={10},
number={3},
pages={2998--3005},
year={2025},
publisher={IEEE},
doi={10.1109/LRA.2025.3536294}
}Contributions are welcome! Please feel free to submit a Pull Request.

