Lightweightモード
Rust, 及び, Dart版のライブラリではLightweightモードをサポートしている.
NOTE: Dart版のライブラリはLightweightモードのみサポートしている.
Lightweightモードは, RemoteTwinCAT
, RemoteSOEM
, Simulator
リンクを使用する際に, 通信量を削減するためのモードである.
NOTE: C++, C#, Python版のライブラリでは, この機能は提供されていない. ただし, Lightweightモードの通信にはProtocol Buffersを使用しているため, proto定義に従ってデータを送信すれば, 各言語から使用することは可能.
Setup
lightweightモードのクライアントを使用するには, autd3-protobuf
crateのlightweight
featureを有効にする必要がある.
cargo add autd3-protobuf --features "lightweight"
サーバ側は, AUTD3 ServerのオプションでLightweightモードを有効にすればいい.
以下が, Lightweightモードを使用するクライアント側のRustのサンプルコードである.
基本的に通常のAPIと同じであるが, 以下の点に注意.
GainSTM
使用時にautd3_protobuf::lightweight::IntoLightweightGain::into_lightweight()
を使用する必要があるgroup_send
使用時にautd3_protobuf::lightweight::Datagram::into_lightweight()
を使用する必要がある- 一部データはサポートされていない
use autd3::prelude::*;
use autd3_protobuf::lightweight::Controller;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut autd = Controller::open([AUTD3::default()], "127.0.0.1:8080".parse()?).await?;
println!("======== AUTD3 firmware information ========");
autd.firmware_version().await?.iter().for_each(|firm_info| {
println!("{}", firm_info);
});
println!("============================================");
let center = autd.center() + Vector3::new(0., 0., 150.0 * mm);
let g = Focus {
pos: center,
option: Default::default(),
};
let m = Sine {
freq: 150. * Hz,
option: Default::default(),
};
autd.send((m, g)).await?;
{
// GainSTM requires `autd3_protobuf::lightweight::IntoLightweightGain::into_lightweight()`
use autd3_protobuf::lightweight::IntoLightweightGain;
let stm = GainSTM {
gains: vec![
Null {}.into_lightweight(),
Focus {
pos: center,
option: Default::default(),
}
.into_lightweight(),
],
config: 1.0 * Hz,
option: Default::default(),
};
autd.send(stm).await?;
}
{
// group_send requires `autd3_protobuf::lightweight::Datagram::into_lightweight()`
use autd3_protobuf::lightweight::Datagram;
autd.group_send(
|dev| Some(dev.idx()),
std::collections::HashMap::from([
(0, Null {}.into_lightweight()),
(
1,
(
Sine {
freq: 150. * Hz,
option: Default::default(),
},
Focus {
pos: center,
option: Default::default(),
},
)
.into_lightweight(),
),
]),
)
.await?;
}
println!("Press enter to quit...");
let mut _s = String::new();
std::io::stdin().read_line(&mut _s)?;
autd.close().await?;
Ok(())
}
Dartからの使用例は, autd3-appのリポジトリを参照されたい.