Rust声学设备控制库autd3的使用,实现高精度超声波阵列驱动与3D声场操控
Rust声学设备控制库autd3的使用,实现高精度超声波阵列驱动与3D声场操控
AUTD3库介绍
AUTD3是一个用于控制超声波阵列设备的Rust库,由Shun Suzuki在2022-2025年间开发维护。该库提供了高精度的超声波阵列驱动能力,可以实现复杂的3D声场操控。
安装
在项目中添加以下依赖到Cargo.toml文件:
autd3 = "35.0.1"
或者运行以下Cargo命令:
cargo add autd3
基本使用示例
以下是一个使用autd3库控制超声波阵列的基本示例:
use autd3::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建控制器
let mut controller = Controller::builder()
.add_device(AUTD3::new(Vector3::zeros(), Vector3::zeros()))
.open_with(autd3::link::Debug::new())?;
// 设置调制参数
let mod_ = Sine::new(150);
// 设置焦点位置
let focus = Vector3::new(0.0, 0.0, 150.0);
let g = Focus::new(focus);
// 发送配置
controller.send((mod_, g))?;
Ok(())
}
完整示例:3D声场操控
以下是实现3D声场操控的完整示例代码:
use autd3::prelude::*;
use std::f32::consts::PI;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建控制器并添加设备
let mut controller = Controller::builder()
// 添加4个设备,排列成2x2阵列
.add_device(AUTD3::new(Vector3::new(0.0, 0.0, 0.0), Vector3::zeros()))
.add_device(AUTD3::new(Vector3::new(192.0, 0.0, 0.0), Vector3::zeros()))
.add_device(AUTD3::new(Vector3::new(0.0, 192.0, 0.0), Vector3::zeros()))
.add_device(AUTD3::new(Vector3::new(192.0, 192.0, 0.0), Vector3::zeros()))
.open_with(autd3::link::Debug::new())?;
// 设置400Hz的正弦波调制
let mod_ = Sine::new(400);
// 创建移动的焦点路径
let radius = 50.0;
let height = 150.0;
let step = 0.1;
let mut angle = 0.0;
loop {
// 计算当前焦点位置
let x = radius * angle.cos();
let y = radius * angle.sin();
let focus = Vector3::new(x, y, height);
// 创建焦点增益
let g = Focus::new(focus);
// 发送配置
controller.send((mod_.clone(), g))?;
// 更新角度
angle += step;
if angle > 2.0 * PI {
angle = 0.0;
}
// 短暂延迟
std::thread::sleep(std::time::Duration::from_millis(10));
}
}
功能说明
- 设备配置:可以添加多个AUTD3设备并配置其位置和方向
- 调制控制:支持正弦波等多种调制方式
- 声场形成:通过Focus等增益控制实现3D空间中的焦点控制
- 实时更新:可以动态改变声场形态
注意事项
- 使用时需要连接实际的AUTD3硬件设备
- 调试模式下可以使用Debug链接进行模拟
- 精确控制需要考虑设备间的相位同步
该库适用于声学悬浮、触觉反馈等需要精确控制声场的应用场景。
1 回复
Rust声学设备控制库autd3的使用:实现高精度超声波阵列驱动与3D声场操控
概述
autd3是一个用于控制声学设备的Rust库,专门设计用于驱动超声波阵列和实现3D声场操控。它提供了高精度的控制接口,适用于科研和工业应用中的声学实验和声场控制场景。
主要特性
- 支持多种超声波阵列设备
- 提供精确的相位和振幅控制
- 可实现复杂的3D声场模式
- 跨平台支持(Windows/Linux/macOS)
- 高性能实时控制
安装方法
在Cargo.toml中添加依赖:
[dependencies]
autd3 = "0.7" # 请检查最新版本
基本使用方法
1. 初始化设备
use autd3::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建控制器
let mut autd = Controller::builder()
.add_device(AUTD3::new(Vector3::zeros(), Vector3::zeros()))
.open_with(autd3::link::Nop::builder())?;
Ok(())
}
2. 基本声场控制
// 创建一个简单的焦点声场
let focus = autd3::gain::Focus::new(autd.geometry().center() + Vector3::new(0., 0., 150.0));
autd.send(focus)?;
3. 多焦点控制
use autd3::gain::Null;
let mut g = Null::new();
let center = autd.geometry().center();
let f1 = center + Vector3::new(30.0, 0.0, 150.0);
let f2 = center + Vector3::new(-30.0, 0.0, 150.0);
let g = g + Focus::new(f1).with_amp(0.5) + Focus::new(f2).with_amp(0.5);
autd.send(g)?;
高级功能示例
1. 3D声场扫描
use std::f32::consts::PI;
let point_num = 30;
let radius = 30.0;
let center = autd.geometry().center() + Vector3::new(0., 0., 150.0);
for i in 0..point_num {
let theta = 2.0 * PI * i as f32 / point_num as f32;
let x = radius * theta.cos();
let y = radius * theta.sin();
let p = center + Vector3::new(x, y, 0.0);
let g = Focus::new(p);
autd.send(g)?;
std::thread::sleep(std::time::Duration::from_millis(50));
}
2. 振幅调制
use autd3::modulation::Sine;
let m = Sine::new(150).with_amp(0.5)?;
let g = Focus::new(autd.geometry().center() + Vector3::new(0., 0., 150.0));
autd.send((m, g))?;
设备配置
1. 设置采样频率
autd.send(autd3::firmware::config::Config::new()
.with_sampling_frequency_division(5120))?;
2. 设置调制参数
autd.send(autd3::firmware::config::ModulationConfig::new()
.with_loop_behavior(autd3::firmware::config::LoopBehavior::infinite()))?;
完整示例代码
下面是一个完整的autd3使用示例,展示了如何初始化设备、创建焦点声场并进行3D扫描:
use autd3::prelude::*;
use std::f32::consts::PI;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. 初始化设备
let mut autd = Controller::builder()
.add_device(AUTD3::new(Vector3::zeros(), Vector3::zeros()))
.open_with(autd3::link::Nop::builder())?;
// 2. 设备配置
autd.send(autd3::firmware::config::Config::new()
.with_sampling_frequency_division(5120))?;
// 3. 创建简单焦点声场
let focus = autd3::gain::Focus::new(autd.geometry().center() + Vector3::new(0., 0., 150.0));
autd.send(focus)?;
// 4. 3D声场扫描
let point_num = 30;
let radius = 30.0;
let center = autd.geometry().center() + Vector3::new(0., 0., 150.0);
for i in 0..point_num {
let theta = 2.0 * PI * i as f32 / point_num as f32;
let x = radius * theta.cos();
let y = radius * theta.sin();
let p = center + Vector3::new(x, y, 0.0);
let g = Focus::new(p);
autd.send(g)?;
std::thread::sleep(std::time::Duration::from_millis(50));
}
// 5. 振幅调制示例
let m = Sine::new(150).with_amp(0.5)?;
let g = Focus::new(autd.geometry().center() + Vector3::new(0., 0., 150.0));
autd.send((m, g))?;
Ok(())
}
注意事项
- 使用前请确保正确连接并识别了声学设备
- 操作高功率超声波时需注意安全
- 复杂的声场模式可能需要性能优化
- 实时控制时注意延迟问题
autd3库为声学研究和应用开发提供了强大的工具,特别适合需要精确控制声场的场景。通过灵活的API,开发者可以实现从简单到复杂的各种声学效果。