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 – 設定可能なティックレートでノードを実行し、5つの実行クラス(リアルタイム、スレッドプール、イベント駆動、非同期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++**にも同等のスニペットが存在します。
主な機能
| 機能 | 内容 |
|---|---|
| 決定論的スケジューリング | 5つの実行クラス、ノードごとの予算/期限、自動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), リモートデプロイ、ヘルスチェック、自動更新。 |
| 言語間相互運用性 | 3つの言語すべてが同じ共有メモリセグメントを共有するため、Rustノードは追加のグルーコードなしでPythonサブスクライバーにパブリッシュ可能。 |
パフォーマンスのハイライト (Intel i9‑14900Kで測定)
- プロセス間片道レイテンシ: 171 ns (ROS 2の約5 µsのDDSデフォルトより約30倍高速)。
- 同一プロセス送信: 91 ns。
- スループット: 37.8 M メッセージ/秒 (iceoryx2の3 M/秒と比較)。
- バルクペイロード (例: 1920×1080 モノクロ画像) は、224バイトの記述子のみが移動するため、片道約284 nsを維持。実際のバッファは共有メモリです。
インストール
# ワンライナーインストーラー (ビルド済み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ソリューションに代わる高性能な選択肢となります。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト