PRBonn/rko_lio
GitHub: PRBonn/rko_lio
一种无需传感器特定建模的鲁棒 LiDAR-惯性里程计系统,可在不同平台和传感器组合上实现开箱即用的通用位姿估计。
Stars: 560 | Forks: 53
RKO-LIO
无需传感器特定建模的鲁棒 LiDAR-惯性里程计
[](https://doi.org/10.1109/LRA.2026.3685966) [](https://arxiv.org/abs/2509.06593) [](/LICENSE) [](/)
[](https://pypi.org/project/rko-lio/) [](https://index.ros.org/p/rko_lio/#humble) [](https://index.ros.org/p/rko_lio/#jazzy) [](https://index.ros.org/p/rko_lio/#kilted) [](https://index.ros.org/p/rko_lio/#rolling)
Four different platforms, four different environments, one odometry system
## 快速开始
以下是 Python 版本的使用说明,关于 ROS 版本请参阅 [ROS](#ros)。
假设你有一个包含 TF 树的 rosbag (ros1/ros2),你可以通过以下命令运行 RKO-LIO
```
pip install "rko_lio[all]"
# 或
pip install rko_lio rosbags "rerun-sdk>=0.31"
# data path 应为一个包含 *.bag 文件 (ROS1) 或 metadata.yaml (ROS2) 的目录
rko_lio -v /path/to/data
```
为什么要通过 `pip install` 安装这三个包?
- `rko_lio` -> 里程计包
- `rosbags` -> rosbag 数据加载器所需。同时支持 ros1 和 ros2 的 bag 文件!
- `rerun-sdk` -> 可选的可视化工具(`-v` 标志)所需
`pip install "rko_lio[all]"` 还会获取其他可选依赖项。
通过 `rko_lio --help` 查看 CLI 的更多选项。
若要导出默认配置文件以便编辑并通过 `--config` 传入,请运行 `rko_lio --dump_config`。
更多详情请参阅 [Python 文档](https://prbonn.github.io/rko_lio/pages/python.html)。
### 外参和约定
请注意,系统需要指定 IMU 和 LiDAR 之间的外参。要么你的数据中已包含某种格式的外参,数据加载器会尝试自动读取它;否则,你可以在配置文件中指定它(如果数据中缺少外参,则此步骤为必填)。
通过以下方式传入配置文件
```
rko_lio --config config_file.yaml
```
该文件需要两个键:`extrinsic_imu2base_quat_xyzw_xyz` 和 `extrinsic_lidar2base_quat_xyzw_xyz`,每个键的值都必须是一个列表。例如:`[0,0,0,1,0,0,0]` 表示单位变换。这两个键都是必填的。
在整个包中,我使用 `transform_
2` 来表示变换。这里的变换是指将在 `` 坐标系中表示的向量转换到 `` 坐标系中。在数学上,这可以表示为:
$$ \mathbf{v}^{\mathrm{to}} = {}^{\mathrm{to}}\mathbf{T}_{\mathrm{from}} \mathbf{v}^{\mathrm{from}} $$
向量上的上标表示该向量所在的参考坐标系,而 $^{ \mathrm{to} }\mathbf{T}_{\mathrm{from}}$ 对应于 `transform__to_`。
## ROS
支持的发行版:Humble、Jazzy、Kilted、Rolling。
```
sudo apt install ros-$ROS_DISTRO-rko-lio
```
或者,如果你希望从源码编译,请将此仓库克隆到你的 colcon 工作区中并执行
```
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select rko_lio # --symlink-install --event-handlers console_direct+
```
如果你无法通过 rosdep 在系统范围内安装必要的依赖项,你也可以在编译 RKO-LIO 的同时编译这些依赖项
```
colcon build --packages-select rko_lio --cmake-args -DRKO_LIO_FETCH_CONTENT_DEPS=ON
```
本项目提供了一个 launch 文件:
```
ros2 launch rko_lio odometry.launch.py imu_topic:= lidar_topic:= base_frame:=base_link
```
`imu_topic`、`lidar_topic` 和 `base_frame` 这三个参数是你需要为 launch 文件指定的最少配置。你可以在一个配置文件中指定它们及其他选项,并通过 `config_file:=file.yaml` 传入。
通过 `ros2 launch rko_lio odometry.launch.py -s` 查看更多 launch 配置选项。
更多详情请参阅 [ROS 文档](https://prbonn.github.io/rko_lio/pages/ros.html)。
上面[关于外参的说明](#extrinsics-and-convention)在此处同样适用。不过你可能已经拥有一个定义良好的 TF 树,因此无需担心这一点(希望如此)。
## 引用
如果你觉得这项工作对你有帮助,请考虑在本仓库点个 star :star:,并引用我们的论文 ([RA-L](https://doi.org/10.1109/LRA.2026.3685966) | [arXiv](https://arxiv.org/abs/2509.06593)):
```
@article{malladi2026ral,
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 = {IEEE Robotics and Automation Letters},
year = {2026},
volume = {11},
number = {6},
pages = {7420--7427},
doi = {10.1109/LRA.2026.3685966},
}
```
[论文补充材料](https://prbonn.github.io/rko_lio/suppl.html) 页面汇集了与该论文相关的额外图表和说明。
你可以查看 `ral_submission` 分支,以获取提交至 RA-L 时使用的代码版本。请注意,该分支旨在原样复现提交期间使用的代码,因此不受支持。`master` 分支和发布版本经过了大幅改进并获得持续维护,是使用本系统的推荐方式。
## 致谢
KISS-ICP, Kinematic-ICP, Bonxai, PlotJuggler, Rerun
本项目的灵感来源于 [KISS-ICP](https://github.com/PRBonn/kiss-icp) 和 [Kinematic-ICP](https://github.com/PRBonn/kinematic-icp) 的工作,没有它们,这个项目是不可能实现的。
此外,无论是在本包内部还是在开发过程中,我们都重度使用并依赖于 [Bonxai](https://github.com/facontidavide/Bonxai)、[PlotJuggler](https://github.com/facontidavide/PlotJuggler)、[Rerun](https://github.com/rerun-io/rerun),当然还有 ROS 本身。
特别感谢 [Rerun](https://rerun.io/) 提供了一个极其易用且高性能的可视化系统。如果没有它,我可能根本不会制作 Python 接口。
## 许可证
本项目是基于 MIT 许可证发布的自由软件。有关详情,请参阅 [LICENSE](LICENSE) 文件。标签:C++, DNS解析, IEEE RA-L, IMU, LiDAR-Inertial Odometry, LIO, Pypi, Python, RKO-LIO, ROS, ROS2, SLAM, 三维重建, 不依赖传感器建模, 传感器融合, 位姿估计, 同时定位与建图, 多传感器融合, 开源项目, 数据擦除, 无人驾驶, 无后门, 机器人导航, 激光雷达惯性里程计, 点云处理, 状态估计, 移动机器人, 空间感知, 自动驾驶, 航空航天, 计算机视觉, 逆向工具, 里程计