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

Remote

RemoteLink は, AUTD3 デバイスに接続された別ホストへ TCP 接続して送受信する Link 実装.

Appliance や Simulator への接続に使う.

RemoteLinkOption { addr, timeout };
フィールド 型 説明
addr SocketAddr 接続先サーバのアドレス
timeout Option<Duration> 接続と 1 フレームごとの待ち時間. None は OS 既定.

mDNS でネットワーク上のサーバ (Appliance と Simulator) を探すことができる.

RemoteLinkOption::discover()?;

見つかったサーバは次の優先順位で選ばれる.

  1. ローカルで起動している Simulator
  2. Appliance
  3. 別のホストで起動している Simulator

サーバが 1 つも見つからないか, 最も優先順位の高いサーバが複数見つかった場合はエラーになる. 複数見つかったときのエラーには見つかったサーバの一覧が入るので, その中から discover_with で選ぶ.

RemoteLinkOption::discover_with(&DiscoveryOption {
timeout,
instance: Some("autd3-0a1b2c3d".to_string()),
..Default::default()
})?;
フィールド 型 説明
timeout Duration 応答を待つ時間. デフォルトは 2 秒.
instance Option<String> 探すサーバの名前. None ならすべて
kind Option<ServerKind> 探すサーバの種類 (Appliance / Simulator). None なら両方. Rust のみ

一覧だけが要るなら discover_all を使う.

for server in autd3_rs_link_remote::discover_all(&DiscoveryOption::default())? {
println!("{} ({}) at {}", server.instance, server.kind, server.addr);
}

RemoteServer を用いると, RemoteLink で接続するサーバを自分で立てることができる.

サーバ側のホストには, 実機を駆動する Link のパッケージ (Echocat 等) も併せて追加する.

RemoteServer::new に待ち受け設定と実機リンクを開くクロージャを渡し, serve で中継を始める.

クライアントの Geometry の台数はサーバ側のバスの台数と一致していなければならない.

rt_priority の設定には特権が要る場合がある (Linux では CAP_SYS_NICE). 権限が無いと警告を出して素のスケジューリングで動くが, 負荷時にバスが不安定になる可能性がある.

実際の使用例は applianceのドキュメント と applianceの実装 を参照.

let bus = BusOption {
pacing,
rt_priority,
rt_policy,
rt_affinity,
stack_prefault_bytes,
..Default::default()
};
let option = RemoteServerOption {
bind,
bus,
idle_timeout,
..Default::default()
};
RemoteServer::new(option, |_: &[DeviceLayout]| {
EchocatLink::open(&EchocatLinkOption::default())
.map_err(|e| RemoteLinkError::Link(e.to_string()))
})?
.serve()?;
引数 型 説明
option RemoteServerOption 待ち受けアドレスとバススレッドの設定
factory FnMut(&[DeviceLayout]) -> Result<impl Link> 実機リンクを開くクロージャ
フィールド 型 説明
bind SocketAddr サーバが待ち受ける TCP アドレス
bus BusOption バススレッドの設定
idle_timeout Duration クライアントとの送受信が途切れてからセッションを切るまでの時間. デフォルトは10 秒.
フィールド 型 説明
pacing BusPacing EtherCAT バスの周期. 実機リンクは LinkPaced でリンクに任せること.
rt_priority Option<RtPriority> バススレッドの優先度. 既定ではリアルタイム優先度.
rt_policy RtSchedulePolicy バススレッドのスケジューリングポリシー
rt_affinity Option<CoreId> バススレッドを固定する CPU コア
stack_prefault_bytes usize 起動時にページインしておくバススレッドのスタックのバイト数. デフォルトは0.
stale_reopen_after Option<Duration> stale (デバイスがフレームを処理しない) サイクルがこの時間続いたらリンクを開き直す. None で無効. デフォルトは2 秒.
reopen_retry_period Duration リンクを開けなかったときに次に開き直すまでの待ち時間. デフォルトは1 秒.
recovering_reply_period Duration バスの回復中, クライアントへ stale を返すまでに回復を待つ時間. デフォルトは1 ms.
probe_timeout Duration SharedBus::probe がデバイス数を数えるのを待つ上限. デフォルトは10 秒.