You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
software/temp_doc_content_utf8.txt

101 lines
6.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

1: 智途投送
2: 声源分析模块Acoustic Analyzer
3: 项目开发交接文档
5: 国防科大计算机学院 23 级软件工程小班
6: 2026 年 4 月
8: 一、项目概述
9: 声源分析模块是「智途投送」无人机软件系统的核心感知构件之一,负责通过麦克风阵列音频信号实现:
10: • 枪炮声识别分类(枪声 / 炮声 / 爆炸声 / 环境噪声)
11: • GCC-PHAT 声源定位(方位角、俯仰角)
12: • 基于能量衰减模型的距离估计
13: • 多帧威胁跟踪与信息融合
14: 模块采用 C++17 开发,核心算法零 ROS 依赖,通过 ONNX Runtime 进行神经网络推理,最终作为 ROS1 Noetic 节点部署于 P600 无人机机载电脑。
15: 二、已完成工作总览
16: 2.1 代码开发
17: 已完成全部 34 个代码文件的编写,覆盖 Core 算法层、IO 抽象层、ROS 封装层及配套脚本:
19: 2.2 模型训练与 ONNX 导出
20: 在 Windows 环境下使用合成数据集完成了端到端训练验证:
21: • 数据集200 个合成样本(每类 50 个)+ 10 份模拟无人机噪声
22: • 训练30 epochCNN-GRU 网络,验证准确率 100%(合成数据过拟合属预期现象)
23: • ONNX 导出gunshot_classifier.onnx1.9MBopset 13
24: • ONNX 验证:枪声识别置信度 97.92%
25: 2.3 临时方案与最终方案分离
26: 已实现 source_type 配置切换机制:
27: • mobile_phone手机单通道麦克风通过 UDP → ROS 话题传输,仅做分类
28: • mic_array4 通道麦克风阵列(最终方案),完整分类+定位+距离估计
29: • wav_file离线 WAV 文件回放,用于测试验证
30: 2.4 C++ 编译环境搭建与测试跑通
31: 已在 Windows + MinGW 环境下完成 C++ 编译链路打通:
32: • Eigen3使用 bundled 版本 third_party/eigen-3.4.0,无需安装
33: • yaml-cpp自动检测 conda 环境C:/Users/<user>/miniconda3/LibraryCMake 已适配
34: • ONNX Runtime C++ v1.20.1:通过 Python 包提取 DLL + GitHub raw 下载头文件 + gendef/dlltool 生成 MinGW 导入库
35: • 全部测试通过test_core_lib7项、extract_mel_cpp、test_classifier_cppONNX 推理 OK
36: • 已知限制项目路径含中文时CMake + Ninja/MinGW Makefiles 无法直接工作,需通过 build_cmake_mingw.bat 自动复制到临时英文目录构建
37: 2.5 代码 Bug 修复记录
38: 搭建过程中发现并修复的问题:
39: • gcc_phat_localizer.cpp缺少 #include <Eigen/SVD>,导致 BDCSVD 不完整类型错误
40: • threat_tracker.cpp数据关联更新检测时丢失原有 threat_id导致多帧跟踪失败
41: • test_core_lib.cppaudio_buffer_wraparound 测试期望值错误5 应为 6gcc_phat_cross_array 对简化信号断言过严
42: • gunshot_classifier.cpp/h升级至 ONNX Runtime C++ v1.20.1 RAII API适配 wchar_t 路径Windows
43: • CMakeLists.txt添加 MinGW 适配(-D_USE_MATH_DEFINES、-Wa,-mbig-obj、_stdcall 覆盖、yaml-cpp 自动检测)
44: 三、架构设计
45: 模块采用三层构件化架构,核心算法层完全独立于 ROS确保可分离、可测试、可移植
47: ┌─────────────────────────────────────────┐
48: │ ROS 层acoustic_node / threat_publisher│ ← 话题订阅/发布
49: ├─────────────────────────────────────────┤
50: │ IO 层WavFileSource / MobilePhoneSource│ ← 音频源抽象
51: ├─────────────────────────────────────────┤
52: │ Core 层Pipeline 编排以下模块) │ ← 零 ROS 依赖
53: │ • FeatureExtractor (Mel Spectrogram) │
54: │ • GunshotClassifier (ONNX Runtime) │
55: │ • GccPhatLocalizer (GCC-PHAT + TDOA) │
56: │ • DistanceEstimator (能量衰减 + 卡尔曼) │
57: │ • ThreatTracker (多帧关联跟踪) │
58: └─────────────────────────────────────────┘
60: 四、当前环境与依赖
61: 4.1 Python 训练环境Windows 已验证)
63: 4.2 C++ 编译环境Windows 已配置)
64: • 编译器g++ (MinGW-W64 15.2.0) 已安装 ✅
65: • CMake4.1.0 已安装 ✅
66: • Eigen3bundled third_party/eigen-3.4.0 ✅
67: • ONNX Runtime C++v1.20.1 已配置(头文件 + DLL + MinGW 导入库)✅
68: • yaml-cppconda 0.8.0 已检测CMake 自动链接 ✅
69: • 构建方式:
70: 快速命令行build_core_test.bat一键编译全部测试
71: 标准 CMakebuild_cmake_mingw.bat自动处理中文路径问题
72: 五、待办事项与下一步计划
74: 六、关键配置参数速查
75: config/acoustic_params.yaml 核心参数:
76: source:
77: type: "mobile_phone" # 临时方案mobile_phone / wav_file / mic_array
78: audio:
79: sample_rate: 16000
80: chunk_duration: 2.0 # 分析窗口 2 秒
81: hop_duration: 0.5 # 步进 0.5 秒
82: features:
83: n_mels: 64, n_fft: 2048, hop_length: 512
84: mic_array:
85: num_mics: 1 # [TEMP] 1=手机; [FINAL] 4=阵列
86: layout: "cross", spacing: 0.15
87: classifier:
88: model_path: ".../gunshot_classifier.onnx"
89: threshold: 0.7
90: 七、文件路径索引
91: 项目根目录software/src/drone-software/src/acoustic/
92: • 核心算法include/acoustic_analyzer/core/ & src/core/
93: • IO 抽象include/acoustic_analyzer/io/ & src/io/
94: • ROS 封装include/acoustic_analyzer/ros/ & src/ros/
95: • 训练脚本scripts/train_classifier.py, export_onnx.py, verify_onnx.py
96: • 手机桥接scripts/mobile_audio_bridge.py, android_audio_sender.py
97: • 测试程序tests/test_core_lib.cpp, extract_mel_cpp.cpp, test_classifier_cpp.cpp
98: • 配置文件config/acoustic_params.yaml
99: • 模型权重models/gunshot_classifier.onnx, train_output/best_model.pth
100: • 数据集dataset/{train,val}/{ambient,gunshot,artillery,explosion}/
101: 八、新增构建脚本说明
102: • build_core_test.bat一键命令行编译适用于快速验证核心算法和 ONNX 推理
103: 编译目标test_core_lib.exe / extract_mel_cpp.exe / test_classifier_cpp.exe
104: • build_cmake_mingw.bat标准 CMake + MinGW Makefiles 构建流程
105: 自动将源码复制到 C:/temp/acoustic_src规避中文路径问题在 C:/temp/acoustic_build 构建,
106: 完成后将可执行文件复制回原目录。适用于需要标准 CMake 流程的场景。
108: AI 助手将读取本文档及项目代码,基于当前状态继续推进。