Rust声学全息控制库autd3-gain-holo的使用,实现高精度声场调制与波束成形
Rust声学全息控制库autd3-gain-holo的使用,实现高精度声场调制与波束成形
autd3-gain-holo简介
autd3-gain-holo是一个Rust库,提供Holo增益功能,可以生成多个聚焦点。该库由Shun Suzuki在2022-2025年间开发。
安装
在项目目录中运行以下Cargo命令:
cargo add autd3-gain-holo
或者在Cargo.toml中添加以下行:
autd3-gain-holo = "35.0.1"
使用示例
下面是一个使用autd3-gain-holo实现声场调制和波束成形的完整示例:
use autd3::prelude::*;
use autd3_gain_holo::*;
// 创建控制器
let mut autd = Controller::builder()
.add_device(AUTD3::new(Vector3::zeros(), Vector3::zeros()))
.open_with(autd3_link_twincat::TwinCAT::builder()).unwrap();
// 定义聚焦点位置和振幅
let focus = Vector3::new(0., 0., 150.0);
let amp = 1.0;
// 创建Holo增益
let g = GSPAT::new()
.add_focus(focus, amp)
.with_alpha(1.0)
.with_repeat(100);
// 发送配置到设备
autd.send(g).unwrap();
// 关闭设备
autd.close().unwrap();
完整示例代码
下面是一个更完整的示例,展示如何使用不同算法实现多点聚焦:
use autd3::prelude::*;
use autd3_gain_holo::*;
use nalgebra::Vector3;
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_twincat::TwinCAT::builder())?;
// 定义多个聚焦点位置和振幅
let foci = vec![
(Vector3::new(30., 0., 150.), 1.0), // 第一个聚焦点,x=30mm,z=150mm
(Vector3::new(-30., 0., 150.), 0.8), // 第二个聚焦点,x=-30mm,z=150mm
(Vector3::new(0., 30., 150.), 0.6), // 第三个聚焦点,y=30mm,z=150mm
];
// 使用GSPAT算法创建Holo增益
let mut g = GSPAT::new();
for (focus, amp) in foci {
g = g.add_focus(focus, amp);
}
let g = g.with_alpha(1e-3).with_repeat(100);
// 或者使用LM算法
// let mut g = LM::new(1e-1);
// for (focus, amp) in foci {
// g = g.add_focus(focus, amp);
// }
// let g = g.with_eps1(1e-3).with_eps2(1e-3).with_tau(1e-3).with_kmax(5);
// 发送配置到设备
autd.send(g)?;
// 关闭设备
autd.close()?;
Ok(())
}
代码说明
-
创建控制器并添加设备:
- 使用
Controller::builder()
创建控制器 - 添加AUTD3设备
- 使用TwinCAT连接打开控制器
- 使用
-
定义多个聚焦点:
- 设置三个不同位置的聚焦点
- 每个聚焦点有不同的振幅
-
创建Holo增益:
- 示例展示了GSPAT和LM两种算法的使用
- 可以添加多个聚焦点
- 可以调整算法参数(alpha、eps1、eps2等)
-
发送配置并关闭设备
更多功能
该库支持的主要算法及其特点:
-
GSPAT算法:
- 通过
.with_alpha()
设置正则化参数 - 通过
.with_repeat()
设置迭代次数 - 适合大多数标准场景
- 通过
-
LM算法:
- 通过
.with_eps1()
和.with_eps2()
设置收敛阈值 - 通过
.with_tau()
设置阻尼参数 - 通过
.with_kmax()
设置最大迭代次数 - 适合需要更精确控制的场景
- 通过
-
Naive算法:
- 最简单的实现
- 计算速度快但精度较低
- 适合快速原型开发
-
SDP算法:
- 使用半正定规划
- 计算量大但精度高
- 适合对精度要求极高的场景
1 回复
Rust声学全息控制库autd3-gain-holo使用指南
根据您提供的内容,我将整理出完整的示例demo。以下是内容中提供的完整示例:
use autd3::prelude::*;
use autd3_gain_holo::{GSPAT, NalgebraBackend, Pa};
use nalgebra::Vector3;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建AUTD3设备
let mut autd = Controller::builder()
.add_device(AUTD3::new(Vector3::zeros()))
.open_with(autd3::link::Nop::builder())?;
// 创建全息增益
let backend = NalgebraBackend::new();
let g = GSPAT::new(backend)
.add_focus(Vector3::new(0., 0., 150. * mm), Pa::new(1.))
.add_focus(Vector3::new(20. * mm, 0., 150. * mm), Pa::new(0.5)));
// 发送配置
autd.send(g)?;
Ok(())
}
以下是一个更完整的示例demo,包含了设备初始化、多焦点配置和不同算法的使用:
use autd3::prelude::*;
use autd3_gain_holo::{GSPAT, LM, SDP, Naive, Pa, NalgebraBackend, EmissionConstraint};
use nalgebra::Vector3;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. 初始化AUTD3设备
let mut autd = Controller::builder()
.add_device(AUTD3::new(Vector3::new(0., 0., 0.)))
.add_device(AUTD3::new(Vector3::new(0., 0., AUTD3::DEVICE_WIDTH)))
.open_with(autd3::link::Nop::builder())?;
// 2. 创建后端
let backend = NalgebraBackend::new();
// 3. 使用GSPAT算法创建多个焦点
let points = vec![
Vector3::new(0., 0., 150. * mm),
Vector3::new(20. * mm, 0., 150. * mm),
Vector3::new(0., 20. * mm, 150. * mm),
];
let amps = vec![1.0, 0.8, 0.6];
let g = GSPAT::new(backend)
.with_foci(points.clone())
.with_amps(amps.clone())
.with_constraint(EmissionConstraint::Uniform(0xFFFF))
.with_repeat(50); // 迭代50次优化
// 4. 发送配置
autd.send(g)?;
// 5. 使用不同算法比较效果
let g_lm = LM::new(NalgebraBackend::new())
.with_foci(points.clone())
.with_amps(amps.clone())
.with_repeat(10);
let g_sdp = SDP::new(NalgebraBackend::new())
.with_foci(points.clone())
.with_amps(amps.clone());
let g_naive = Naive::new(NalgebraBackend::new())
.with_foci(points)
.with_amps(amps);
// 可以分别发送这些配置进行比较
// autd.send(g_lm)?;
// autd.send(g_sdp)?;
// autd.send(g_naive)?;
Ok(())
}
这个完整示例演示了:
- 初始化多个AUTD3设备
- 创建Nalgebra后端
- 使用GSPAT算法配置多个焦点和不同振幅
- 设置发射约束和迭代优化次数
- 展示了如何使用其他算法(LM、SDP、Naive)进行同样的配置
您可以根据实际需求调整焦点位置、振幅大小和算法参数。