PRBonn/rko_lio

GitHub: PRBonn/rko_lio

一种无需传感器特定建模的鲁棒 LiDAR-惯性里程计系统,可在不同平台和传感器组合上实现开箱即用的通用位姿估计。

Stars: 560 | Forks: 53

RKO-LIO

无需传感器特定建模的鲁棒 LiDAR-惯性里程计

[![IEEE RA-L](https://img.shields.io/badge/IEEE_RA--L-10.1109%2FLRA.2026.3685966-00629B.svg)](https://doi.org/10.1109/LRA.2026.3685966) [![arXiv](https://img.shields.io/badge/arXiv-2509.06593-b31b1b.svg)](https://arxiv.org/abs/2509.06593) [![GitHub License](https://img.shields.io/github/license/PRBonn/rko_lio)](/LICENSE) [![GitHub last commit](https://img.shields.io/github/last-commit/PRBonn/rko_lio)](/) [![PyPI - Version](https://img.shields.io/pypi/v/rko_lio?color=blue)](https://pypi.org/project/rko-lio/) [![ROS Package Index](https://img.shields.io/ros/v/humble/rko_lio?color=blue)](https://index.ros.org/p/rko_lio/#humble) [![ROS Package Index](https://img.shields.io/ros/v/jazzy/rko_lio?color=blue)](https://index.ros.org/p/rko_lio/#jazzy) [![ROS Package Index](https://img.shields.io/ros/v/kilted/rko_lio?color=blue)](https://index.ros.org/p/rko_lio/#kilted) [![ROS Package Index](https://img.shields.io/ros/v/rolling/rko_lio?color=blue)](https://index.ros.org/p/rko_lio/#rolling)

Visualization of odometry system running on data from four different platforms in four different environments
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, 三维重建, 不依赖传感器建模, 传感器融合, 位姿估计, 同时定位与建图, 多传感器融合, 开源项目, 数据擦除, 无人驾驶, 无后门, 机器人导航, 激光雷达惯性里程计, 点云处理, 状态估计, 移动机器人, 空间感知, 自动驾驶, 航空航天, 计算机视觉, 逆向工具, 里程计