Four different platforms, four different environments, one odometry system
Assuming you have a rosbag (ros1/ros2) which contains a TF tree, you can run RKO-LIO through
pip install rko_lio rosbags rerun-sdk
# data path should be a directory with *.bag files (ROS1) or a metadata.yaml (ROS2)
rko_lio -v /path/to/dataWhy pip install those three packages?
rko_lio-> the odometry packagerosbags-> required for the rosbag dataloader. Both ros1 and ros2 bags are supported!rerun-sdk-> required for the optional visualizer (-vflag)
Check further options for the CLI through rko_lio --help.
More details are available in the Python usage docs.
Please note that the system needs the extrinsic to be specified between IMU and LiDAR. Either your data includes this in some format, and then the dataloaders try to automatically read it, or otherwise you can specify it in a config file (required if it's missing in the data). Pass the config file with
rko_lio --config config_file.yamlThis file needs two keys: extrinsic_imu2base_quat_xyzw_xyz and extrinsic_lidar2base_quat_xyzw_xyz, which must each be a list. For example: [0,0,0,1,0,0,0] for identity. Both keys are required.
Throughout this package, I refer to transformations using transform_<from-frame>2<to-frame>. By this, I mean a transformation that converts a vector expressed in the <from-frame> coordinate system to the <to-frame> coordinate system. Mathematically, this translates to:
The superscript on the vector indicates the frame in which the vector is expressed, and transform_<from-frame>_to_<to-frame>.
Supported distros: Humble, Jazzy, Kilted, Rolling.
sudo apt install ros-$ROS_DISTRO-rko-lioOr if you'd like to build from source, clone the repo into your colcon workspace and
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select rko_lio # --symlink-install --event-handlers console_direct+In case you cannot system install the necessary dependencies through rosdep, you can also build the dependencies while building RKO-LIO
colcon build --packages-select rko_lio --cmake-args -DRKO_LIO_FETCH_CONTENT_DEPS=ONA launch file is provided:
ros2 launch rko_lio odometry.launch.py imu_topic:=<topic> lidar_topic:=<topic> base_frame:=base_linkThe three parameters imu_topic, lidar_topic, and base_frame are the minimum you need to specify for the launch file. You can specify them and other options all at once in a config file passed with config_file:=file.yaml.
Check further launch configuration options through ros2 launch rko_lio odometry.launch.py -s
More details are available in the ROS usage docs.
The same note above about extrinsics applies here as well. Though you probably have a well defined TF tree and need not concern yourself with this (I hope).
If you found this work useful, please consider leaving a star ⭐ on this repository and citing our paper:
@article{malladi2025arxiv,
author = {M.V.R. Malladi and T. Guadagnino and L. Lobefaro and C. Stachniss},
title = {A Robust Approach for LiDAR-Inertial Odometry Without Sensor-Specific Modeling},
journal = {arXiv preprint},
year = {2025},
volume = {arXiv:2509.06593},
url = {https://arxiv.org/pdf/2509.06593},
}My goal with this project is to have a simple LiDAR-Inertial odometry system that can work with minimal friction, in the lines of "it just works". I gladly welcome any contribution or feedback you think would help in this direction. Performance improvements or bug fixes are of course always appreciated.
Thanks to the following contributors
KISS-ICP, Kinematic-ICP, Bonxai, PlotJuggler, Rerun
This package is inspired by and would not be possible without the work of KISS-ICP and Kinematic-ICP. Additionally, we use and rely heavily on, either in the package itself or during development, Bonxai, PlotJuggler, Rerun, and of course ROS itself.
A special mention goes out to Rerun for providing an extremely easy-to-use but highly performative visualization system. Without this, I probably would not have made a python interface at all.
You can check out the branch ral_submission for the version of the code used for submission to RA-L. Please note that that branch is meant to be an as-is reproduction of the code used during submission and is not supported. The master and release versions are vastly improved, supported, and are the recommended way to use this system.
This project is free software made available under the MIT license. For details, see the LICENSE file.