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倍高速)。 |
| Message types | 40以上ある組み込み POD 構造体(例:Imu、CmdVel、Detection、Image、PointCloud)。大容量データ(画像、テンソル)は共有メモリプールに格納され、NumPy からゼロコピーでアクセス可能。 |
| Drivers | horus.toml を通じた宣言的 HAL 統合(Terra HAL プロジェクトから30以上)。 |
クイックスタートスニペット(README から)
Rust – Topic::new、Scheduler::new().tick_rate(1000_hz())、およびオプションのポリシー(.order() や .on_miss(Miss::SafeMode))を使用した、1 kHz のセンサー制御ペアを1ファイルで実装。
Python – horus.run を使用した8行の同等コード。Node オブジェクト、node.send / node.recv、およびオプションの rate 引数を使用。
C++ – horus::Node を継承するクラスベースのノード。subscribe/advertise ヘルパーと同様のスケジューラ設定を備える。
主な機能
- 確定的リアルタイムスケジューリング – 5つの実行クラス。ノードにレート/予算/デッドラインがあると自動的にRTモードに切り替え。
- 安全と障害耐性 – 段階的ウォッチドッグ、デッドライン強制、ノードごとの安全状態ハック、BlackBoxレコーダー、再起動/バックオフポリシー。
- ゼロコピーAIパイプライン – 共有メモリプールにより、カメラフレーム、点群、テンソルをコピーなしでNumPy配列に変換可能。トピック上を移動するのは小さな記述子のみ。
- 高パフォーマンス – 171ナノ秒の片方向プロセス間遅延(Intel i9-14900Kで測定)、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データを1プロセスで統合するセンサー融合パイプラインでありながら、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++間のゼロコピーデータパスを提供します。1マイクロ秒未満のIPCとROS 2のDDSレイヤーよりも密接な統合が必要な場合、HORUSは検討価値があります。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト