WritePatternPhase
WritePatternPhase は, 強度が全振動子・全 Pattern で共通の場合に使える WritePatternBuffer の軽量版.
WritePatternPhase { bank, start_index, depth, intensity, patterns,};WritePatternPhase( bank=bank, start_index=start_index, depth=depth, intensity=intensity, patterns=patterns,)new WritePatternPhase( bank: bank, startIndex: startIndex, depth: depth, intensity: intensity, patterns: patterns);| フィールド | 型 | 説明 |
|---|---|---|
bank |
PatternBank |
書き込み先バンク |
start_index |
usize |
バンク内の書き込み開始インデックス |
depth |
PhaseDepth |
位相のビット幅 (下記参照) |
intensity |
Intensity |
全振動子・全 Pattern に共通の強度 |
patterns |
&[Vec<Vec<Phase>>] |
書き込む位相の列 (1 個以上 depth.max_count() 個以下) |
PhaseDepth
Section titled “PhaseDepth”| バリアント | 1 フレームあたりの Pattern 数 (max_count()) |
説明 |
|---|---|---|
Bits8 |
5 | 位相を全分解能 (8 bit) で送る (デフォルト) |
Bits4 |
11 | 位相を上位 4 bit に量子化して送る |
Example
Section titled “Example”Bits4 で 4 枚の Pattern を 1 コマンドで書き込み, ConfigPattern + ActivatePatternBank で STM として再生する例.
use autd3_rs::commands::{ ActivatePatternBank, Clear, ConfigPattern, PhaseDepth, Synchronize, WritePatternPhase,};use autd3_rs::geometry::{Autd3, Geometry, offset};use autd3_rs::units::{Hz, m, mm, s};use autd3_rs::value::{Intensity, LoopBehavior, PatternBank, SamplingConfig, TransitionMode};use autd3_rs::Client;use autd3_rs::udp::TransportOption;use autd3_rs_pattern::{focus, wavelength};
let geometry = Geometry::new(vec![Autd3::default()]);let option = TransportOption::default();let mut client = Client::open(&geometry, &option).await?;client.send(Clear).await?;client.send(Synchronize).await?;
let wavelength = wavelength(340.0 * m / s);let patterns = [-30.0f32, -10.0, 10.0, 30.0] .iter() .map(|&x| { let mut buffer = geometry.phase_buffer(); focus( &geometry, geometry.center() + offset(x * mm, 0.0 * mm, 150.0 * mm), wavelength, &mut buffer, ); buffer }) .collect::<Vec<_>>();
let bank = PatternBank::B0;
client.send(WritePatternPhase { bank, start_index: 0, depth: PhaseDepth::Bits4, intensity: Intensity::MAX, patterns: &patterns,}).await?;client.send(ConfigPattern { bank, config: SamplingConfig::from_freq(1.0 * Hz * patterns.len() as f32)?, size: patterns.len(), loop_behavior: LoopBehavior::Infinite,}).await?;client.send(ActivatePatternBank { bank, transition_mode: TransitionMode::Immediate,}).await?;import asyncio
from autd3 import Client, TransportOptionfrom autd3.commands import ActivatePatternBank, Clear, ConfigPattern, PhaseDepth, Synchronize, WritePatternPhasefrom autd3.geometry import Autd3, Geometry, offsetfrom autd3.units import Hz, m, mm, sfrom autd3.value import Intensity, LoopBehavior, PatternBank, SamplingConfig, TransitionModefrom autd3_pattern import focusfrom autd3_pattern import wavelength as calc_wavelength
async def main() -> None: geometry = Geometry([Autd3()]) with await Client.open(geometry, TransportOption()) as client: await client.send(Clear()) await client.send(Synchronize())
wavelength = calc_wavelength(340 * m / s) patterns = [] for x in (-30.0, -10.0, 10.0, 30.0): buffer = geometry.phase_buffer() focus( geometry, geometry.center() + offset(x * mm, 0.0 * mm, 150.0 * mm), wavelength, buffer, ) patterns.append(buffer)
bank = PatternBank.B0
await client.send( WritePatternPhase( bank=bank, start_index=0, depth=PhaseDepth.Bits4, intensity=Intensity.MAX, patterns=patterns, ) ) await client.send( ConfigPattern( bank=bank, config=SamplingConfig(1.0 * Hz * len(patterns)), size=len(patterns), loop_behavior=LoopBehavior.Infinite, ) ) await client.send( ActivatePatternBank( bank=bank, transition_mode=TransitionMode.Immediate, ) )
asyncio.run(main())using System.Threading.Tasks;using AUTD3;using static AUTD3.Units;
var geometry = new Geometry(new[] { new Autd3() });using var client = await Client.OpenAsync(geometry, new TransportOption());await client.SendAsync(new Clear());await client.SendAsync(new Synchronize());
var wavelength = Pattern.Wavelength(340.0f * m / s);var offsets = new[] { -30.0f, -10.0f, 10.0f, 30.0f };var patterns = new PhaseBuffer[offsets.Length];for (var i = 0; i < offsets.Length; i++){ var buffer = geometry.PhaseBuffer(); Pattern.Focus( geometry, geometry.Center + Offset(offsets[i] * mm, 0.0f * mm, 150.0f * mm), wavelength, buffer ); patterns[i] = buffer;}
var bank = PatternBank.B0;
await client.SendAsync(new WritePatternPhase( bank: bank, startIndex: 0, depth: PhaseDepth.Bits4, intensity: Intensity.Max, patterns: patterns));await client.SendAsync(new ConfigPattern( bank: bank, config: new SamplingConfig(1.0f * Hz * patterns.Length), size: (uint)patterns.Length, loopBehavior: LoopBehavior.Infinite));await client.SendAsync(new ActivatePatternBank( bank: bank, transitionMode: TransitionMode.Immediate));