Pattern
Pattern is a command that sends the phase and intensity of each transducer to the device.
The phases and intensities are passed as separate buffers.
Pattern::new(&phases, intensities);
Pattern::with_bank(bank, &phases, intensities);
Pattern { bank, phases: &phases, intensities: intensities.into(), transition_mode,};Pattern::new sets the destination bank to PatternBank::B0.
To write to another bank, use Pattern::with_bank(bank, phases, intensities).
Pattern(phases, intensities)
Pattern(phases, intensities, bank=bank)
Pattern( phases, intensities, bank=bank, transition_mode=transition_mode,)Pattern sets the destination bank to PatternBank.B0 by default.
To write to another bank, use Pattern(phases, intensities, bank=bank).
new Pattern(phases, intensities);
new Pattern(bank, phases, intensities);
new Pattern( bank: bank, phases: phases, intensities: intensities, transitionMode: transitionMode);new Pattern(phases, intensities) sets the destination bank to PatternBank.B0.
To write to another bank, use new Pattern(bank, phases, intensities).
| Field | Type | Default | Description |
|---|---|---|---|
bank |
PatternBank |
PatternBank::B0 |
Bank to write to / play back |
phases |
&[Vec<Phase>] |
— | Phases per device |
intensities |
PatternIntensity |
— | Intensity (a uniform Intensity, or a per-device &[Vec<Intensity>] buffer) |
transition_mode |
TransitionMode |
TransitionMode::Immediate |
Behavior when switching the bank |
Several helper functions are provided for computing patterns.
Equivalent Low-Level Commands
Section titled “Equivalent Low-Level Commands”Pattern is equivalent to the three commands WritePatternBuffer + ConfigPattern + ActivatePatternBank. However, Pattern itself is sent as a single frame that fuses the three.
The following is equivalent to Pattern { bank, phases, intensities }.
To write a bank without switching to it (and send ActivatePatternBank later), send WritePatternBuffer + ConfigPattern directly instead of Pattern.
WritePatternBuffer::new(bank, 0, patterns, intensities);ConfigPattern { bank, config: SamplingConfig::new(NonZeroU16::MAX), size: 1, loop_behavior: LoopBehavior::Infinite,};ActivatePatternBank { bank, transition_mode,};WritePatternBuffer( bank=bank, start_index=0, patterns=[phases], intensities=intensities,)ConfigPattern( bank=bank, config=SamplingConfig(0xFFFF), size=1, loop_behavior=LoopBehavior.Infinite,)ActivatePatternBank( bank=bank, transition_mode=transition_mode,)new WritePatternBuffer( bank: bank, startIndex: 0, patterns: new[] { phases }, intensities: intensities);new ConfigPattern( bank: bank, config: new SamplingConfig(ushort.MaxValue), size: 1, loopBehavior: LoopBehavior.Infinite);new ActivatePatternBank( bank: bank, transitionMode: transitionMode);Example
Section titled “Example”use autd3_rs::commands::{Clear, Pattern, Synchronize};use autd3_rs::geometry::{Autd3, Geometry, offset};use autd3_rs::units::{m, mm, s};use autd3_rs::value::Intensity;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 mut phases = geometry.phase_buffer();focus( &geometry, geometry.center() + offset(0.0 * mm, 0.0 * mm, 150.0 * mm), wavelength(340.0 * m / s), &mut phases,);
client.send(Pattern::new(&phases, Intensity::MAX)).await?;import asyncio
from autd3 import Client, TransportOptionfrom autd3.commands import Clear, Pattern, Synchronizefrom autd3.geometry import Autd3, Geometry, offsetfrom autd3.units import m, mm, sfrom autd3.value import Intensityfrom autd3_pattern import focus, wavelength
async def main() -> None: geometry = Geometry([Autd3()]) with await Client.open(geometry, TransportOption()) as client: await client.send(Clear()) await client.send(Synchronize())
phases = geometry.phase_buffer() focus( geometry, geometry.center() + offset(0.0 * mm, 0.0 * mm, 150.0 * mm), wavelength(340 * m / s), phases, )
await client.send(Pattern(phases, Intensity.MAX))
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 phases = geometry.PhaseBuffer();Pattern.Focus( geometry, geometry.Center + Offset(0.0f * mm, 0.0f * mm, 150.0f * mm), Pattern.Wavelength(340.0f * m / s), phases);
await client.SendAsync(new Pattern(phases, Intensity.Max));