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 编译器。

典型使用案例

  1. 定义主题 (例如 camera, detections, motor.cmd)。
  2. 编写节点,使用任何支持的语言发布/订阅这些主题。
  3. 设置 horus.toml,包含驱动程序设置与调度策略。
  4. 运行 horus run – 调度器启动节点、强制执行实时限制,并记录黑匣子日志以供事后分析。

优势领域

  • 需要低于 200 ns IPC 的紧密控制回路 (高频电机控制、传感器融合)。
  • 需要传递大型张量或图像且无需拷贝的多语言管线。
  • 受益于内置监控与确定性执行类别的安全关键系统。

文档与社区

  • 完整文档: https://docs.horusrobotics.dev
  • 快速入门指南、基准测试方法、ROS 2 迁移指南以及详尽的 API 参考。
  • Discord 社区提供支持与讨论。

总结 – HORUS 是一款专为实时需求打造的中间件,提供纳秒级 IPC、确定性调度与跨语言零拷贝数据共享。它作为 ROS 2 与传统 DDS 解决方案的高性能替代品,锁定机器人与其他对延迟敏感的领域。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目