Rust声学全息驱动库autd3-driver的使用,实现高精度超声波阵列控制和3D声场调制
Rust声学全息驱动库autd3-driver的使用,实现高精度超声波阵列控制和3D声场调制
概述
autd3-driver
是用于控制 AUTD3 设备的 Rust 驱动库,可以实现高精度超声波阵列控制和3D声场调制。
作者
Shun Suzuki, 2022-2025
安装
在您的项目目录中运行以下Cargo命令:
cargo add autd3-driver
或者在您的Cargo.toml中添加以下行:
autd3-driver = "35.0.1"
示例代码
以下是一个使用autd3-driver控制超声波阵列的基本示例:
use autd3_driver::autd3::controller::Controller;
use autd3_driver::autd3::device::AUTD3;
use autd3_driver::autd3::link::SOEM;
use autd3_driver::derive::{Modulation, Gain};
// 定义一个简单的调制信号
#[derive(Modulation)]
struct SineModulation {
freq: f32,
amp: f32,
}
// 定义一个简单的增益模式
#[derive(Gain)]
struct FocusGain {
position: [f32; 3],
}
fn main() -> anyhow::Result<()> {
// 创建控制器
let mut autd = Controller::builder()
.add_device(AUTD3::new([0.0, 0.0, 0.0]))
.open(SOEM::builder())?;
// 创建调制信号
let modulation = SineModulation {
freq: 150.0,
amp: 0.5,
};
// 创建聚焦点增益
let gain = FocusGain {
position: [100.极, 0.0, 150.0],
};
// 发送数据到设备
autd.send(modulation)?;
autd.send(gain)?;
Ok(())
}
更完整的3D声场调制示例
下面是一个更完整的示例,展示如何创建3D声场调制:
use autd3_driver::autd3::controller::Controller;
use autd3_driver::autd3::device::AUTD3;
use autd3_driver::autd3::link::SOEM;
use autd3_driver::derive::{Modulation, Gain};
use autd3_driver::geometry::{Vector3, UnitQuaternion};
use std::f32::consts::PI;
// 定义正弦波调制
#[derive(Modulation)]
struct MyModulation {
freq: f32,
amp: f32,
}
impl Modulation for MyModulation {
fn calc(&self) -> Vec<f32> {
let buf_size = 4096;
(0..buf_size)
.map(|i| {
let phase = 2.0 * PI * self.freq * i as f32 / buf_size as f32;
self.amp * phase.sin()
})
.collect()
}
}
// 定义多点聚焦增益
#[derive(Gain)]
struct MultiFocusGain {
points: Vec<Vector3>,
}
impl Gain for MultiFocusGain {
fn calc(&self, _geometry: &Geometry) -> Vec<Drive> {
self.points.iter()
.map(|&p| {
// 计算每个点的驱动信号
Drive {
phase: 0.0, // 相位调节
amp: 1.0, // 振幅调节
}
})
.collect()
}
}
fn main() -> anyhow::Result<()> {
// 创建控制器并添加设备
let mut autd = Controller::builder()
.add_device(AUTD3::new([0.0, 0.0, 0.0]))
.add_device(AUTD3::new([AUTD3::DEVICE_WIDTH, 0.0, 0.0])
.with_rotation(UnitQuaternion::from_axis_angle(&Vector3::z_axis(), PI/2.0)))
.open(SOEM::builder())?;
// 创建调制信号
let modulation = MyModulation {
freq: 150.0,
amp: 0.5,
};
// 创建多个聚焦点
let gain = MultiFocusGain {
points: vec![
Vector3::new(100.0, 0.0, 150.0),
Vector3::new(-50.0, 50.0, 100.0),
Vector3::new(-50.0, -50.0, 100.0),
],
};
// 发送数据到设备
autd.send(modulation)?;
autd.send(gain)?;
// 关闭设备
autd.close()?;
Ok(())
}
1 回复
Rust声学全息驱动库autd3-driver使用指南
概述
autd3-driver是一个用于高精度超声波阵列控制和3D声场调制的Rust库。它提供了对AUTD3设备的控制接口,可以实现声学全息、声镊等先进声学应用。
主要特性
- 支持多设备级联控制
- 高精度相位和振幅控制
- 3D声场调制能力
- 实时参数更新
- 跨平台支持
安装方法
在Cargo.toml中添加依赖:
[dependencies]
autd3-driver = "0.7"
基本使用方法
1. 设备初始化
use autd3_driver::{AUTD3, ControllerBuilder};
async fn main() -> anyhow::Result<()> {
// 创建控制器
let mut autd = ControllerBuilder::new()
.add_device(AUTD3::new(Vector3::zeros(), Vector3::zeros()))
.open_with(autd3_link_soem::SOEM::builder().build()).await?;
Ok(())
}
2. 基本声场控制
use autd3_driver::{
derive::*,
autd3_device::AUTD3,
geometry::Vector3,
};
// 创建焦点
let focus = autd.geometry().center() + Vector3::new(0., 0., 150.0);
let g = Focus::new(focus);
let m = Sine::new(150);
// 发送配置
autd.send((m, g)).await?;
3. 3D声场调制示例
use autd3_driver::{
derive::*,
autd3_device::AUTD3,
geometry::Vector3,
};
// 创建多个焦点形成3D图案
let mut g = Holo::new();
g.add_focus(Vector3::new(30., 0., 150.), 1.0);
g.add_focus(Vector3::new(-30., 0., 150.), 1.0);
g.add_focus(Vector3::new(0., 30., 150.), 1.0);
g.add_focus(Vector3::new(0., -30., 150.), 1.0);
let m = Sine::new(150);
// 使用GS算法优化相位
let g = g.with_algorithm(GS::new());
autd.send((m, g)).await?;
高级功能
1. 多设备级联
let mut autd = ControllerBuilder::new()
.add_device(AUTD3::new(Vector3::new(0., 0., 0.), Vector3::zeros()))
.add_device(AUTD3::new(Vector3::new(0., AUTD3::DEVICE_WIDTH, 0.), Vector3::zeros()))
.open_with(autd3_link_soem::SOEM::builder().build()).await?;
2. 动态声场更新
let mut theta = 0.0;
loop {
let x = 极好的,我看到您提供了完整的autd3-driver使用指南内容。根据要求,我将先展示内容中已有的示例代码,然后基于这些示例提供一个更完整的demo。
## 完整示例demo
下面是一个结合了设备初始化、动态声场控制和振幅调制的完整示例:
```rust
use autd3_driver::{
derive::*,
autd3_device::AUTD3,
geometry::{EulerAngles, Quaternion, UnitQuaternion, Vector3},
link::SOEM,
prelude::*,
};
use anyhow::Result;
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<()> {
// 1. 初始化设备
let mut autd = ControllerBuilder::new()
// 添加第一个设备,位置在原点,无旋转
.add_device(AUTD3::new(Vector3::zeros(), Vector3::zeros()))
// 添加第二个设备,沿Y轴偏移一个设备宽度
.add_device(AUTD3::new(
Vector3::new(0., AUTD3::DEVICE_WIDTH, 0.),
Vector3::zeros(),
))
// 使用SOEM链接
.open_with(SOEM::builder().build())
.await?;
// 2. 检查设备连接
println!("设备数量: {}", autd.geometry().num_devices());
// 3. 创建初始声场 - 四个焦点形成方形图案
let mut holo = Holo::new();
holo.add_focus(Vector3::new(30., 30., 150.), 1.0);
holo.add_focus(Vector3::new(-30., 30., 150.), 1.0);
holo.add_focus(Vector3::new(-30., -30., 150.), 1.0);
holo.add_focus(Vector3::new(30., -30., 150.), 1.0);
// 使用GS算法优化相位
let g = holo.with_algorithm(GS::new(100)); // 100次迭代
// 4. 创建调制信号 - 150Hz正弦波
let m = Sine::new(150).with_intensity(0xFF);
// 5. 发送初始配置
autd.send((m, g)).await?;
// 6. 动态更新声场 - 旋转方形图案
let mut theta = 0.0;
for _ in 0..100 {
let offset = 30.0;
let x1 = offset * (theta + 0.0).cos();
let y1 = offset * (theta + 0.0).sin();
let x2 = offset * (theta + std::f32::consts::PI / 2.0).cos();
let y2 = offset * (theta + std::f32::consts::PI / 2.0).sin();
let x3 = offset * (theta + std::f32::consts::PI).cos();
let y3 = offset * (theta + std::f32::consts::PI).sin();
let x4 = offset * (theta + 3.0 * std::f32::consts::PI / 2.0).cos();
let y4 = offset * (theta + 3.0 * std::f32::consts::PI / 2.0).sin();
let mut holo = Holo::new();
holo.add_focus(Vector3::new(x1, y1, 150.), 1.0);
holo.add_focus(Vector3::new(x2, y2, 150.), 0.8); // 80%振幅
holo.add_focus(Vector3::new(x3, y3, 150.), 0.6); // 60%振幅
holo.add_focus(Vector3::new(x4, y4, 150.), 0.4); // 40%振幅
let g = holo.with_algorithm(GS::new(50)); // 50次迭代
let m = Sine::new(150 + (theta * 10.0) as u32).with_intensity(0xFF); // 动态改变频率
autd.send((m, g)).await?;
theta += 0.05;
tokio::time::sleep(Duration::from_millis(50)).await;
}
Ok(())
}
示例说明
-
设备初始化:
- 创建了两个AUTD3设备的级联配置
- 使用SOEM协议进行通信
-
声场配置:
- 初始设置四个焦点形成方形图案
- 使用GS算法进行相位优化
- 使用150Hz正弦波调制
-
动态更新:
- 实现方形图案的旋转效果
- 每个焦点有不同的振幅
- 动态改变调制频率
-
振幅控制:
- 四个焦点分别使用100%、80%、60%和40%的振幅
- 演示了振幅调制功能
注意事项
- 运行前确保AUTD3设备已正确连接
- 此示例需要tokio运行时
- 动态更新部分可根据需要调整速度和持续时间
- 实际应用中可能需要根据具体需求调整GS算法的迭代次数