softmata/horus
Fastest Robotics Runtime System. If phones have Android, robots deserve HORUS.
HORUS – 用于机器人技术的实时分布式中间件(Rust / Python / C++)
是什么 – HORUS 是一种低延迟、无锁的进程间通信(IPC)层,可替代 ROS 2 使用的 DDS 栈。它允许用 Rust、Python 或 C++ 编写的程序通过单一共享内存环形缓冲区共享数据,提供确定性调度和 200 纳秒以下的跨进程延迟。
为何重要 – 对于机器人、自动驾驶车辆、工业自动化或任何安全关键系统,可预测的时序和最小开销至关重要。HORUS 声称具备确定性执行类别、内置看门狗、以及为 AI 密集型感知工作负载设计的零拷贝流水线。
核心概念(如 README 所示)
| 概念 | 作用 |
|---|---|
| Node | 实现 tick()(Rust)/ 回调(Python)/ tick() 方法(C++)的工作单元。节点由 Scheduler 调度。 |
| Topic | 基于无锁环形缓冲区的类型化发布/订阅通道。所有语言使用相同的共享内存布局,因此 Rust 发布者可被 Python 订阅者直接读取,无需复制。 |
| Scheduler | 管理执行类别(实时、线程池、事件驱动、异步 IO、尽力而为)。可为每个节点设置速率、预算、截止时间、顺序和丢失处理策略。 |
| Safety monitor | 分级看门狗,从警告逐步升级为速率降低、隔离,最终终止异常节点。节点可定义 enter_safe_state() 以将硬件置于已知安全状态。 |
| BlackBox | 环形缓冲区飞行记录器,用于事后分析。 |
| TransformFrame | 快速无锁坐标变换树(比 ROS TF2 快 10–33 倍)。 |
| 消息类型 | 40 多种内置 POD 结构体(如 Imu、CmdVel、Detection、Image、PointCloud)。大负载(图像、张量)存储在共享内存池中,可通过 NumPy 零拷贝访问。 |
| 驱动 | 通过 horus.toml 实现声明式 HAL 集成(来自 Terra HAL 项目,30+ 驱动)。 |
快速入门片段(来自 README)
Rust – 使用 Topic::new、Scheduler::new().tick_rate(1000_hz()),以及可选策略如 .order() 和 .on_miss(Miss::SafeMode),在单个文件中实现 1 kHz 传感器控制器对。
Python – 使用 horus.run 的八行等效代码,包含 Node 对象、node.send / node.recv,以及可选的 rate 参数。
C++ – 继承自 horus::Node 的类节点,使用 subscribe/advertise 辅助函数和相同的调度器配置。
主要特性
- 确定性实时调度 – 五种执行类别,当节点具有速率/预算/截止时间时自动进入 RT 模式。
- 安全与容错 – 分级看门狗、截止时间强制、节点级安全状态钩子、BlackBox 记录器、重启/退避策略。
- 零拷贝 AI 流水线 – 共享内存池允许相机帧、点云和张量转换为 NumPy 数组而无需复制;仅小描述符在主题上传输。
- 高性能 – 报告的单向跨进程延迟为 171 纳秒,同进程发送延迟为 91 纳秒,小消息下吞吐量比 iceoryx2 高达 12.8 倍。
- 跨语言互操作性 – 同一主题对 Rust、Python 和 C++ 进程均可见。
- 内置机器人原语 – 消息、服务、动作、变换,以及 30 多个硬件驱动(Dynamixel、RealSense、CAN、EtherCAT 等)。
- CLI 工具 –
horus new、horus run、主题检查(horus topic list/echo)、系统仪表板(horus monitor)、远程部署、健康检查和自更新。
安装与使用(如说明)
- 一键安装器 –
curl …/install.sh | bash(或设置HORUS_VERSION以固定版本)。脚本获取预构建 CLI 并在~/.horus/cache/horus@<version>下缓存匹配的源码树。 - 语言绑定
- Rust – 手动添加本地路径依赖(
cargo add horus指向缓存源码)。尚未发布到 crates.io。 - Python – 旧版 0.1.x 格式使用
pip install "horus-robotics>=0.4.1",新版 0.4.x 格式需从缓存源码构建pip install ~/.horus/cache/horus@0.4.1/horus_py。 - C++ – 链接
libhorus_cpp并包含<horus/horus.hpp>;需 CMake 3.20+ 和 C++17 编译器。
- Rust – 手动添加本地路径依赖(
- 项目脚手架 –
horus new my_robot(使用--cpp/--python选择语言,默认为 Rust)创建启动包和驱动配置用的horus.toml。 - 运行 –
horus run使用缓存源码构建 Rust 代码并启动调度器。
性能亮点(来自 README)
| 指标 | 值 | 上下文 |
|---|---|---|
| 跨进程单向延迟 | 171 ns | 环形缓冲区发送/接收,Intel i9-14900K 上测量。 |
| 同进程发送延迟 | 91 ns | 仅生产者端 send()。 |
| 1 发布 → 3 订阅延迟 | 80 ns | 生产者端。 |
| 与 ROS 2 DDS 比较 | 约 5 µs 中位数(REP 2014)→ 约 30 倍更快(相同跨进程场景)。 | |
| 与 iceoryx2(8 B)比较 | 55 ns vs 416 ns(中位数)→ 7.6 倍更快。 | |
| 吞吐量(同循环) | 37.8 M msg/s vs 3.0 M msg/s(iceoryx2)→ 12.8 倍。 | |
| 大图像负载(1920×1080)单向 p50 | 284 ns(仅描述符,零拷贝) |
典型用例
- 子微秒级抖动可能导致不稳定的低级电机控制。
- 将相机帧、LiDAR 点云和 IMU 数据在单个进程中融合,同时仍向 Python AI 模型暴露数据的传感器融合流水线。
- 需要确定性看门狗和保证安全状态转换的安全关键机器人。
- 需要超低 IPC 延迟的高频交易或游戏引擎子系统(README 也提及这些领域)。
成熟度与生态系统
- 版本 – v0.4.1(README 编写时最新标签)。PyPI 上的 Python 包仍为 0.1.9;新 0.4.x 格式需从源码构建。
- CI – 存在 GitHub Actions 标记;基准测试包含在仓库中。
- 文档 – 托管于
https://docs.horusrobotics.dev,包含快速入门、调度器配置、安全监控和基准测试章节。 - 社区 – 支持通过链接的 Discord 服务器。
- 许可证 – Apache-2.0。
总结
HORUS 是一个真实、积极维护的中间件项目,专为实时机器人和其他延迟敏感系统设计。它提供确定性调度、安全监控和跨 Rust、Python、C++ 的零拷贝数据路径。如果您需要亚微秒级 IPC 且希望比 ROS 2 的 DDS 层实现更紧密集成,HORUS 值得评估。
相关
- 项目
- 项目
- 项目
- 项目