これは開発版のドキュメントである. 内容は次のリリースまでに変更される可能性がある. 最新のリリース版は 0.9.x を参照.
Remote
RemoteLink は, AUTD3 デバイスに接続された別ホストへ TCP 接続して送受信する Link 実装.
Appliance や Simulator への接続に使う.
RemoteLink
Section titled “RemoteLink”RemoteLinkOption { addr, timeout };RemoteLinkOption(addr, timeout)new RemoteLinkOption(addr) { Timeout = timeout };| フィールド | 型 | 説明 |
|---|---|---|
addr |
SocketAddr |
接続先サーバのアドレス |
timeout |
Option<Duration> |
接続と 1 フレームごとの待ち時間. None は OS 既定. |
mDNS でネットワーク上のサーバ (Appliance と Simulator) を探すことができる.
RemoteLinkOption::discover()?;RemoteLinkOption.discover()RemoteLinkOption.Discover();見つかったサーバは次の優先順位で選ばれる.
- ローカルで起動している Simulator
- Appliance
- 別のホストで起動している Simulator
サーバが 1 つも見つからないか, 最も優先順位の高いサーバが複数見つかった場合はエラーになる.
複数見つかったときのエラーには見つかったサーバの一覧が入るので, その中から discover_with で選ぶ.
RemoteLinkOption::discover_with(&DiscoveryOption { timeout, instance: Some("autd3-0a1b2c3d".to_string()), ..Default::default()})?;RemoteLinkOption.discover(timeout, "autd3-0a1b2c3d")RemoteLinkOption.Discover(timeout, "autd3-0a1b2c3d");| フィールド | 型 | 説明 |
|---|---|---|
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
Section titled “RemoteServer”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> |
実機リンクを開くクロージャ |
RemoteServerOption
Section titled “RemoteServerOption”| フィールド | 型 | 説明 |
|---|---|---|
bind |
SocketAddr |
サーバが待ち受ける TCP アドレス |
bus |
BusOption |
バススレッドの設定 |
idle_timeout |
Duration |
クライアントとの送受信が途切れてからセッションを切るまでの時間. デフォルトは10 秒. |
BusOption
Section titled “BusOption”| フィールド | 型 | 説明 |
|---|---|---|
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 秒. |