This is the development version of the documentation. It may change before the next release. See 0.6.x for the latest release.
ソフトウェア
This content is not available in your language yet.
クライアントライブラリは Rust で実装されており, 各言語バインディングはそれを包む形で提供される.
クレート構成
Section titled “クレート構成”| クレート | 役割 |
|---|---|
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 エミュレータと組み合わせる. |
スレッドモデル
Section titled “スレッドモデル”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 カーネルに委譲する.
ユーザー API からデバイスまで
Section titled “ユーザー API からデバイスまで”ユーザーが積んだコマンドは, フレーム列へ実体化されたうえで RT スレッドから 1 サイクルに 1 フレームずつ送出される.
- DatagramBuilder: コマンドを送信フレームへ変換する
- 送信処理: フレームを送出し, SEQ/ACK で多重化と回復を行う
バインディング
Section titled “バインディング”| 言語 | 方式 | 備考 |
|---|---|---|
| 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 warningscargo xtask rust format # rustfmt --check