Rust声学设备模拟库autd3-link-simulator的使用,实现高效声场仿真与硬件控制
Rust声学设备模拟库autd3-link-simulator的使用,实现高效声场仿真与硬件控制
概述
autd3-link-simulator是一个用于AUTD3 Simulator的Rust链接库,由Shun Suzuki在2022-2025年间开发。
安装
在项目目录中运行以下Cargo命令:
cargo add autd3-link-simulator
或者在Cargo.toml中添加以下行:
autd3-link-simulator = "35.0.1"
使用示例
以下是一个使用autd3-link-simulator进行声场仿真和硬件控制的完整示例:
use autd3::prelude::*;
use autd3_link_simulator::Simulator;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建几何结构
let mut geometry = GeometryBuilder::new()
.add_device(AUTD3::new(Vector3::zeros(), Vector3::zeros()))
.build()?;
// 创建Simulator链接
let link = Simulator::new();
// 创建控制器
let mut autd = Controller::open(geometry, link)
.expect("Failed to open controller");
// 设置声场参数
autd.send(Silencer::default())?;
// 创建聚焦点
let focus = Vector3::new(0.0, 0.0, 150.0);
// 生成声场
let g = Focus::new(focus);
let m = Sine::new(150.0);
// 发送声场数据
autd.send((m, g))?;
Ok(())
}
完整示例代码
下面是一个更完整的示例,展示了如何创建多个设备和更复杂的声场控制:
use autd3::prelude::*;
use autd3_link_simulator::Simulator;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建包含多个设备的几何结构
let mut geometry = GeometryBuilder::new()
// 添加第一个设备,位置在原点
.add_device(AUTD3::new(Vector3::zeros(), Vector3::zeros()))
// 添加第二个设备,位置在x轴偏移30mm处
.add_device(AUTD3::new(Vector3::new(30.0, 0.0, 0.0), Vector3::zeros()))
.build()?;
// 创建Simulator链接
let link = Simulator::new();
// 创建控制器
let mut autd = Controller::open(geometry, link)
.expect("Failed to open controller");
// 设置静音参数以减少噪音
autd.send(Silencer::default())?;
// 创建多个聚焦点
let focus1 = Vector3::new(0.0, 0.0, 150.0);
let focus2 = Vector3::new(30.0, 0.0, 150.0);
// 创建调制信号(400Hz正弦波)
let m = Sine::new(400.0);
// 创建声场(两个聚焦点)
let g = Null::new()
.then(Focus::new(focus1).with_intensity(1.0))
.then(Focus::new(focus2).with_intensity(0.5));
// 发送声场数据
autd.send((m, g))?;
// 保持声场5秒钟
std::thread::sleep(std::time::Duration::from_secs(5));
// 关闭声场
autd.send(Stop::new())?;
Ok(())
}
文档
更多详细文档请参考官方文档和GitHub仓库。
许可证
该项目使用MIT许可证。
开发者
该库由Shun Suzuki开发维护。
1 回复
Rust声学设备模拟库autd3-link-simulator的使用指南
概述
autd3-link-simulator
是一个用于声学设备模拟和声场仿真的Rust库,属于AUTD3项目的一部分。该库专为声学换能器阵列的模拟和控制设计,提供高效的声场仿真能力,并支持硬件控制接口。
主要特性
- 高效的声场仿真算法
- 支持多种声学设备模拟
- 硬件控制接口抽象
- 实时声场可视化能力
- 跨平台支持
安装方法
在Cargo.toml中添加依赖:
[dependencies]
autd3-link-simulator = "0.7"
完整示例代码
以下是一个完整的声学设备模拟示例,展示了从创建模拟器到运行仿真的完整流程:
use autd3::prelude::*;
use autd3_link_simulator::Simulator;
use std::f32::consts::PI;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. 创建模拟器实例
let mut simulator = Simulator::builder()
.add_device(AUTD3::new(Vector3::zeros(), Vector3::zeros()))
.build()?;
// 2. 配置声场参数
simulator.set_sound_speed(340.0); // 设置声速(m/s)
simulator.set_attenuation(0.0); // 设置衰减系数
simulator.set_sampling_frequency(40e3); // 设置采样频率
// 3. 添加换能器
let pos = Vector3::new(0.0, 0.0, 0.0);
let rot = UnitQuaternion::from_axis_angle(&Vector3::z_axis(), 0.0);
let tr = Transducer::new(0, pos, rot);
simulator.add_transducer(tr);
// 4. 创建圆形轨迹
let mut trajectory = Vec::new();
for i in 0..100 {
let theta = 2.0 * PI * i as f32 / 100.0;
trajectory.push(Vector3::new(
20.0 * theta.cos(),
20.0 * theta.sin(),
100.0,
));
}
// 5. 实时更新焦点
for point in trajectory {
// 计算相位和振幅
let (phases, amps) = simulator.calculate_phases_and_amplitudes(point)?;
// 应用控制信号
simulator.update_transducers(phases, amps)?;
// 计算声场
let field = simulator.calculate_acoustic_field(
Vector3::new(-50.0, -50.0, 0.0),
Vector3::new(50.0, 50.0, 200.0),
5.0, // 网格分辨率(mm)
)?;
// 可视化结果
simulator.visualize(&field)?;
std::thread::sleep(std::time::Duration::from_millis(10));
}
Ok(())
}
代码说明
-
创建模拟器实例:使用
Simulator::builder()
创建模拟器构建器,添加设备后构建模拟器实例。 -
配置声场参数:
set_sound_speed()
设置声速(340.0 m/s)set_attenuation()
设置衰减系数(0.0表示无衰减)set_sampling_frequency()
设置采样频率(40kHz)
-
添加换能器:
- 创建换能器位置(
Vector3::new(0.0, 0.0, 0.0)
) - 设置换能器旋转角度
- 使用
add_transducer()
添加换能器
- 创建换能器位置(
-
创建圆形轨迹:
- 生成100个点的圆形轨迹
- 每个点使用三角函数计算在XY平面上的位置
-
实时仿真循环:
- 对轨迹中的每个点计算相位和振幅
- 更新换能器控制信号
- 计算并可视化声场
- 每次迭代间隔10毫秒
注意事项
- 该库需要一定的声学背景知识才能有效使用
- 硬件控制功能需要实际的AUTD3设备支持
- 高性能仿真可能需要较强的计算资源
- 实时可视化功能需要OpenGL支持
这个完整示例展示了如何使用autd3-link-simulator
库进行声学设备模拟和声场仿真,特别是演示了如何创建圆形轨迹并进行实时仿真。