softmata/horus
Fastest Robotics Runtime System. If phones have Android, robots deserve HORUS.
HORUS – 实时分布式中间件
简介 – HORUS 是一款低延迟、无锁的中间件,让使用 Rust、Python 或 C++ 编写的程序能通过共享内存环形缓冲区共享数据。它定位为 DDS 系统(如 ROS 2)的直接替代方案,针对确定性时序与安全性至关重要的领域(机器人、自动驾驶、工业自动化、高频交易、游戏引擎等)。
核心概念
- Node – 执行单元,实现
tick()(Rust) 或回调函数 (Python/C++)。节点由内置的确定性调度器进行调度。 - Topic – 由无锁环形缓冲区支持的类型化发布/订阅通道。消息为 POD 结构,因此可无需拷贝进行传输。
- Scheduler – 以可配置的频率执行节点,支持五种执行类别(实时、线程池、事件驱动、异步 IO、尽力而为),并强制执行预算、截止期限与监控策略。
- Safety monitor – 分级监控、安全状态挂钩、黑匣子飞行记录器以及节点级别的容错策略。
- Zero‑copy AI pipeline – 图像、点云与张量类型存在于共享内存池中;Python 可在不进行拷贝的情况下获取 NumPy 视图。
语言与绑定
- Rust – 主要实现语言;crate 不发布于 crates.io,而是通过 HORUS 安装程序获取。
- Python –
pip install "horus-robotics>=0.4.1"(或在出现较新的 PyPI 版本前从缓存源码安装)。 - C++ – 链接
libhorus_cpp并包含<horus/horus.hpp>。
快速入门 (Rust)
use horus::prelude::*;
message! { SensorReading { position: f64, velocity: f64 } MotorCommand { voltage: f64 } }
fn main() -> Result<()> {
let mut sched = Scheduler::new().tick_rate(1000_hz());
// sensor node
sched.add(Sensor::new()?).order(0).build()?;
// controller node
sched.add(Controller::new()?).order(1).rate(1000_hz()).on_miss(Miss::SafeMode).build()?;
sched.run()
}
Python 也有类似的 8 行示例,C++ 亦有对应的代码片段。
主要功能
| 功能 | 说明 |
|---|---|
| 确定性调度 | 五种执行类别、节点级预算/截止期限、自动 RT 线程处理。 |
| 安全监控 | 监控并限制、隔离或终止异常节点;安全状态回调;黑匣子日志。 |
| 零拷贝消息传递 | 共享内存环形缓冲区;图像/张量数据的 NumPy 视图;POD 消息无序列化开销。 |
| 丰富的消息库 | 40 多种内置 POD 消息类型 (IMU, CmdVel, Detection, Image, PointCloud 等) 以及服务、动作与转换。 |
| 硬件驱动程序 | 30 多种驱动程序 (Dynamixel, RealSense, RPLiDAR, CAN, EtherCAT 等),可通过 horus.toml 声明。 |
| CLI 工具 | horus new, horus run, 主题检查 (horus topic list/echo), 系统仪表板 (horus monitor), 远程部署, 健康检查, 自动更新。 |
| 跨语言互通性 | 三种语言共享相同的共享内存区段,Rust 节点可直接发布给 Python 订阅者,无需额外胶水代码。 |
性能亮点 (于 Intel i9‑14900K 测试)
- 跨进程单向延迟: 171 ns (约比 ROS 2 的 ~5 µs DDS 默认值快 30 倍)。
- 同进程发送: 91 ns。
- 吞吐量: 37.8 M 消息/秒 (相较于 iceoryx2 的 3 M/秒)。
- 大量负载 (例如 1920×1080 单色图像) 单向延迟维持在 ~284 ns,因为仅传输 224 字节的描述符;实际缓冲区为共享内存。
安装
# 单行安装程序 (下载预先构建的 CLI + 缓存源码)
curl -fsSL https://github.com/softmata/horus/raw/main/install.sh | bash
horus new my_robot && cd my_robot && horus run
- 安装程序会缓存用于构建 CLI 的确切源码树,确保 ABI 兼容性。
- 手动安装:
git clone https://github.com/softmata/horus.git && ./install.sh。 - 需求: Rust ≥ 1.90, Python ≥ 3.9, CMake ≥ 3.20 + C++17 编译器。
典型使用案例
- 定义主题 (例如
camera,detections,motor.cmd)。 - 编写节点,使用任何支持的语言发布/订阅这些主题。
- 设置
horus.toml,包含驱动程序设置与调度策略。 - 运行
horus run– 调度器启动节点、强制执行实时限制,并记录黑匣子日志以供事后分析。
优势领域
- 需要低于 200 ns IPC 的紧密控制回路 (高频电机控制、传感器融合)。
- 需要传递大型张量或图像且无需拷贝的多语言管线。
- 受益于内置监控与确定性执行类别的安全关键系统。
文档与社区
- 完整文档: https://docs.horusrobotics.dev
- 快速入门指南、基准测试方法、ROS 2 迁移指南以及详尽的 API 参考。
- Discord 社区提供支持与讨论。
总结 – HORUS 是一款专为实时需求打造的中间件,提供纳秒级 IPC、确定性调度与跨语言零拷贝数据共享。它作为 ROS 2 与传统 DDS 解决方案的高性能替代品,锁定机器人与其他对延迟敏感的领域。
相关
- 项目
- 项目
- 项目
- 项目
- 项目