メインコンテンツへ移動

HCRにおけるRust

サーバー再生から組み込みロボットファームウェアまでRustで実装

HCRは、方針、再生、プロトコル状態、検証済みハードウェア制御が交わる部分にRustを使います。ブラウザーUIはReactとBlockly、サービスと組み込みゲートウェイはRustです。

技術構成

2つのRustランタイム、2つの配備制約

採点サービスは追加専用のhcr.v1契約と権威的再生を使います。現在のno_std ESP8266ゲートウェイは上限付きHTTP/JSONサーボAPIを実行し、MQTTとCBORは計画段階です。

Rust · MQTT over WebSocket · HTTP binding

Service

サーバー側でプログラムを再生し、適応型問題バンクを運用して、ラウンドの期限と順位を管理します。

hcr-backend

hcr.v1 · JSON and CBOR

プロトコル

各メッセージを1つのエンベロープに収め、ULIDで対応付けます。マイナーバージョンでは追加のみを認め、受信側は未知の内容をエラーにせず破棄します。

hcr-backend/schema

Rust (no_std) · ESP8266 · Arduino C++ as a hardware library

ハードウェア

5サーボの実機では、起動方針、ルーティング、HTTP/JSON、サーボ状態をRustが担い、C++はバイト指向C ABIの背後に限定されます。ゲートウェイのMQTTは未実装です。

hcr-fw

オープンソース

HCRを支えるHotaru Rustエコシステム

HCRはバックエンドサービスのクレートをcrates.ioで公開し、Hotaru上にサービスと組み込みプロトコル層を構築しています。クレート、公式サイト、コアリポジトリ、別管理のMQTT実装を確認できます。

設計

方針はRust、C++はハードウェアライブラリ

依存関係は一方向です。外部ハードウェア関数を宣言するのは1つのcrateだけで、境界を通るのはバイトです。Arduino文字列、C++オブジェクト、ルート、JSON、アプリ状態は渡しません。

Rustが担当

  • 起動方針と協調型エグゼキューター
  • Hotaruのルーティングとプロトコル
  • HTTPの解析と応答
  • サーボの検証と状態

C++の担当

  • クロック、割り込みマスク、ウォッチドッグ、再起動、ヒープ、乱数、シリアル
  • Wi-Fiアクセスポイント/ステーションモード、低水準TCP/UDPハンドル
  • キャプティブDNSとSPIFFSハンドル
  • GPIO、PWM、サーボパルス書き込み、低水準OTA書き込み

Rust

HCRにおけるRustの意味

HCRは、決定論的再生、明示的なプロトコル型、制御された並行処理、狭い組み込み境界が必要な部分でRustを使います。これは具体的な設計判断であり、HCRのすべてがRust製という意味ではありません。

ブラウザーUIはReactとTypeScriptで構築されています。HCRは独立したプロジェクトであり、Rust ProjectまたはRust Foundationとの提携や推奨関係はありません。

ハードウェア