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

単一デバイス

ここでは, 一つのデバイスを駆動する方法について説明する.

依存プログラムのインストール

Section titled “依存プログラムのインストール”

本チュートリアルではechocatを利用する. Windowsを使用する場合, Npcapを「WinPcap API-compatible Mode」でインストールしておくこと.

以下は, 1台のAUTD3デバイスでアレイの中心から150 mm直上に焦点を生成し, 200 Hzの正弦波AMかける例である.

まずは適当なプロジェクトを作成し, autd3-rsライブラリを依存関係に追加する. 焦点計算やAM変調のために, autd3-rs-patternautd3-rs-modulationも依存関係に追加する. また, デバイスとの通信を行うautd3-rs-link-echocatライブラリも依存関係に追加する. 非同期ランタイムも必要なので, tokioも追加する.

cargo new --bin autd3-sample && cd autd3-sample
cargo add autd3-rs
cargo add autd3-rs-pattern
cargo add autd3-rs-modulation
cargo add autd3-rs-link-echocat
cargo add tokio --features full

次に, src/main.rsファイルを編集し, 以下のようにする.

use autd3_rs::commands::{Modulation, Pattern, SetSilencer};
use autd3_rs::geometry::{Autd3, Geometry, offset};
use autd3_rs::units::{Hz, m, mm, s};
use autd3_rs::value::SamplingConfig;
use autd3_rs::{Client, ClientConfig};
use autd3_rs_link_echocat::EchocatLinkOption;
#[tokio::main(flavor = "multi_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Define a geometry consisting of a single AUTD3 device.
let geometry = Geometry::new(vec![Autd3::default()]);
// Open the client over an echocat link.
let client = Client::open(
&geometry,
EchocatLinkOption::default(),
ClientConfig::default(),
)
.await?;
// Generate a focus 150 mm above the array center.
let target = geometry.center() + offset(0.0 * mm, 0.0 * mm, 150.0 * mm);
let wavelength = autd3_rs_pattern::wavelength(340.0 * m / s);
let mut patterns = geometry.pattern_buffer();
autd3_rs_pattern::focus(
&geometry,
target,
wavelength,
&autd3_rs_pattern::FocusOption::default(),
&mut patterns,
);
// Apply a 200 Hz sine-wave AM.
let mut modulation = autd3_rs_modulation::modulation_buffer();
autd3_rs_modulation::sine(
200 * Hz,
&autd3_rs_modulation::SineOption {
sampling_config: SamplingConfig::FREQ_4K,
..Default::default()
},
&mut modulation,
)?;
let mut builder = client.datagram_builder();
builder
.push(SetSilencer::default())
.push(Pattern::new(&patterns))
.push(Modulation::new(SamplingConfig::FREQ_4K, &modulation));
let frames = builder.build()?;
for frame in &frames {
client.send_checked(frame).await?;
}
tokio::signal::ctrl_c().await?;
client.stop().await?;
client.close().await?;
Ok(())
}

そして, これを実行する.

cargo run --release

Linux, macOSでは, echocatを使用するのに管理者権限が必要になるかもしれない. その場合は,

cargo build --release && sudo ./target/release/autd3_sample

とすること.