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

功能说明

  1. 设备配置:可以添加多个AUTD3设备并配置其位置和方向
  2. 调制控制:支持正弦波等多种调制方式
  3. 声场形成:通过Focus等增益控制实现3D空间中的焦点控制
  4. 实时更新:可以动态改变声场形态

注意事项

  • 使用时需要连接实际的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(())
}

注意事项

  1. 使用前请确保正确连接并识别了声学设备
  2. 操作高功率超声波时需注意安全
  3. 复杂的声场模式可能需要性能优化
  4. 实时控制时注意延迟问题

autd3库为声学研究和应用开发提供了强大的工具,特别适合需要精确控制声场的场景。通过灵活的API,开发者可以实现从简单到复杂的各种声学效果。

回到顶部