コンテンツにスキップ
これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.6.x を参照.

ソフトウェア

クライアントライブラリは Rust で実装されており, 各言語バインディングはそれを包む形で提供される.

クレート依存関係
クレート 役割
autd3-rs-core 基盤層. geometry / value / params / protocol / error と Link 抽象.
autd3-rs クライアント本体 (tokio 非同期). core を再エクスポートするファサードも兼ねる.
autd3-rs-pattern Emission パターン計算 (焦点合成等).
autd3-rs-pattern-holo 多焦点音場再構成. 理論は理論と考察を参照.
autd3-rs-modulation AM 波形計算.
autd3-rs-link-echocat 自前の EtherCAT Link
autd3-rs-link-ethercrab ethercrab ベースの EtherCAT Link 実装.
autd3-rs-link-soem SOEM ベースの EtherCAT Link 実装 (GPL-3.0).
autd3-rs-link-twincat EtherCAT マスタを TwinCAT に委譲する Link 実装 (Windows 専用).
autd3-rs-link-remote ネットワーク越しに別ホストの Link を駆動する Link 実装.
autd3-rs-link-nop 何もしない Link 実装 (テスト・ドキュメント用).
autd3-rs-firmware-emulator 実 CPU ファームウェア (autd3-cpu-fw) のソースを取り込み, Rust による FPGA エミュレータと組み合わせる.

EtherCAT マスタが要求する定周期処理と, ユーザーの非同期 API を分離している.

スレッドモデル
  • RT スレッド: EtherCAT マスタが要求する定周期で動作する. tokio ランタイム外で独立して動き, レイテンシを最小化する.
  • ユーザースレッド: tokio 上で動作する. .await で RT スレッドの完了通知を待つ.

Link トレイトの cycle(tx, rx) が 1 サイクル分の PDO 送受信を担う. EchocatLink / EtherCrabLink / SoemLink はホスト自身が EtherCAT マスタとなり raw socket で PDO を直接回す. TwinCATLink は EtherCAT マスタを TwinCAT の RT カーネルに委譲する.

ユーザーが積んだコマンドは, フレーム列へ実体化されたうえで RT スレッドから 1 サイクルに 1 フレームずつ送出される.

コマンドの流れ
  • DatagramBuilder: コマンドを送信フレームへ変換する
  • 送信処理: フレームを送出し, SEQ/ACK で多重化と回復を行う
言語 方式 備考
Rust - 本体.
Python PyO3 + maturin C FFI を経由せず Rust API を直接ラップする.
C# / Unity C FFI + P/Invoke bindings/ffi/ の cdylib 群を参照する.

bindings/ffi/ は言語中立な C ABI の cdylib 群であり, クレート毎に分かれている. 不透明ハンドルと共有 ABI 契約は autd3-ffi-abi が定義する.

開発タスクはすべて cargo xtask で実行する.

cargo xtask rust build # ワークスペース全体ビルド
cargo xtask rust test # 全テスト
cargo xtask rust lint # clippy --all-targets -- -D warnings
cargo xtask rust format # rustfmt --check