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(())
}

代码说明

  1. 创建模拟器实例:使用Simulator::builder()创建模拟器构建器,添加设备后构建模拟器实例。

  2. 配置声场参数

    • set_sound_speed()设置声速(340.0 m/s)
    • set_attenuation()设置衰减系数(0.0表示无衰减)
    • set_sampling_frequency()设置采样频率(40kHz)
  3. 添加换能器

    • 创建换能器位置(Vector3::new(0.0, 0.0, 0.0))
    • 设置换能器旋转角度
    • 使用add_transducer()添加换能器
  4. 创建圆形轨迹

    • 生成100个点的圆形轨迹
    • 每个点使用三角函数计算在XY平面上的位置
  5. 实时仿真循环

    • 对轨迹中的每个点计算相位和振幅
    • 更新换能器控制信号
    • 计算并可视化声场
    • 每次迭代间隔10毫秒

注意事项

  1. 该库需要一定的声学背景知识才能有效使用
  2. 硬件控制功能需要实际的AUTD3设备支持
  3. 高性能仿真可能需要较强的计算资源
  4. 实时可视化功能需要OpenGL支持

这个完整示例展示了如何使用autd3-link-simulator库进行声学设备模拟和声场仿真,特别是演示了如何创建圆形轨迹并进行实时仿真。

回到顶部