2026-04-14 10:08:41 +08:00

8.6 KiB
Raw Permalink Blame History

voice_drone_assistant — 项目说明与配置指南

面向部署与二次开发:目录结构配置文件用法启动与日常操作与云端/飞控的关系外场统一部署与双终端启动顺序docs/DEPLOYMENT_AND_OPERATIONS.md;协议细节以 docs/llmcon.md 为准。


1. 项目做什么

  • 麦克风 → 预处理(降噪/AGCVAD 切段SenseVoice STT唤醒词
  • 关键词起飞offboard 演示,默认关闭)system.yamlassistant.local_keyword_takeoff_enabledROCKET_LOCAL_KEYWORD_TAKEOFF=1 开启后,keywords.yamltakeoff 词表(如「起飞演示」)→ 提示音 + offboard 脚本;飞控主路径推荐 云端 flight_intent + ROS 伴飞桥
  • 其它语音:本地 Qwen + Kokoro,或 云端 WebSocketLLM + TTS 上云,见 cloud_voice
  • 可选通过 TCP Socket 下发结构化飞控命令(VoiceCommandRecognizer 路径;TakeoffPrintRecognizer 默认不在启动时连 Socket飞控多为云端 JSON + 可选 ROCKET_CLOUD_EXECUTE_FLIGHT

2. 目录结构(仓库根 = voice_drone_assistant/

路径 说明
main.py 程序入口(会 chdir 到本目录并跑 voice_drone.main_app
with_system_alsa.sh 在 Conda/残缺 ALSA 环境下修正 LD_LIBRARY_PATH,建议始终包一层启动
requirements.txt Python 依赖(含 websocket-client 等)
voice_drone/main_app.py 主流程:唤醒、问候/快路径、关麦、LLM/云端、TTS、offboard
voice_drone/core/ 音频采集、预处理、VAD、STT、TTS、Socket、云端 WS、唤醒、命令、文本预处理、配置加载
voice_drone/flight_bridge/ 伴飞桥ROS1+MAVROSflight_intent → 飞控;说明见 docs/FLIGHT_BRIDGE_ROS1.md
voice_drone/config/ 各类 YAML见下文「配置文件」
voice_drone/logging_/ 日志与彩色输出
voice_drone/tools/ config_loader 等工具
docs/ PROJECT_GUIDE.md(本文)、llmcon.md(云端协议)、clientguide.md(联调与示例)
scripts/ run_px4_offboard_one_terminal.sh伴飞桥 run_flight_bridge_with_mavros.sh(含 MAVROSrun_flight_intent_bridge_ros1.sh(仅桥);另有 generate_wake_greeting_wav.pybundle_for_device.sh
assets/tts_cache/ 唤醒问候等预生成 WAV可自动生成
models/ STT/TTS/VAD ONNX 等(需自备或 bundlemodels/README.txt

3. 配置文件一览

配置由 voice_drone/core/configuration.py 在进程启动时读入;主文件为 voice_drone/config/system.yaml(路径相对 voice_drone_assistant 根目录)。

文件 作用
system.yaml 总控audio采样、设备、AGC、降噪vadsttttscloud_voicesocket_servertext_preprocessorrecognizerVAD 能量门槛、尾静音、问候/TTS 关麦等)
wake_word.yaml 唤醒词主词、变体、模糊/部分匹配策略
keywords.yaml 命令关键词与同义词(供文本预处理映射到 Command
command_.yaml 各飞行动作默认 distance/speed/duration(与 Command 联动)
cloud_voice_px4_context.yaml 云端 session.start.client 扩展vehicle_classmav_typedefault_setpoint_frameextras 等,供服务端 LLM 生成 PX4 相关指令;路径在 system.yamlcloud_voice.px4_context_file,也可用环境变量 ROCKET_CLOUD_PX4_CONTEXT_FILE 覆盖

修改 YAML 后需重启 main.py 生效(SYSTEM_CLOUD_VOICE_PX4_CONTEXT 等在 import 时加载一次)。


4. system.yaml 常用区块(索引)

  • audio:采样率、frame_sizeinput_device_indexnull 则枚举设备)、prefer_stereo_captureES8388 等)、noise_reduceagc*agc_release_alpha
  • vadSilero 用阈值、end_frame 等(能量 VAD 时部分由 recognizer 覆盖)
  • sttSenseVoice 模型路径、ORT 线程等
  • ttsKokoro 目录、音色 voicespeedoutput_deviceplayback_*
  • cloud_voiceenabledserver_urlauth_tokendevice_idtimeoutfallback_to_localpx4_context_file
  • socket_server:试飞控 TCP 地址、reconnect_intervalmax_retries-1 为断线持续重连直至成功)
  • recognizertrailing_silence_secondsvad_backendenergy/silero)、energy_vad_*energy_vad_utt_peak_decayenergy_vad_end_peak_ratiopre_speech_max_secondsack_pause_mic_for_playback、应答 TTS 等

更细的参数含义以各 YAML 内注释为准。


5. 系统使用方式

5.1 推荐启动命令

voice_drone_assistant 根目录

bash with_system_alsa.sh python main.py

或使用模块方式:

bash with_system_alsa.sh python -m voice_drone.main_app

录音设备:首次可交互选择;非交互时可设 ROCKET_INPUT_DEVICE_INDEX 或使用 main.py --input-index N / --non-interactive(详见 main_appargparse 与文件头注释)。

5.2 典型工作流(默认 TakeoffPrintRecognizer

  1. 说唤醒词(如「无人机」);若同句带指令,会跳过问候与滴声,直接关麦处理:命中 keywords.yamltakeoff 则 offboard否则走 LLM/云端。
  2. 只唤醒,则问候(或缓存 WAV+ 可选滴声 → 再说一句指令。
  3. 云端模式指令以文本上云TTS 多为服务端 PCM本地模式Qwen 推理 + Kokoro 播报。

5.3 云端语音(可选)

  • system.yamlcloud_voice.enabled: true,或环境变量 ROCKET_CLOUD_VOICE=1
  • ROCKET_CLOUD_WS_URLROCKET_CLOUD_AUTH_TOKEN、可选 ROCKET_CLOUD_DEVICE_ID(可覆盖 yaml
  • PX4 语境:见 cloud_voice_px4_context.yaml / ROCKET_CLOUD_PX4_CONTEXT_FILE
  • 协议与消息类型: docs/llmcon.md
  • 飞控 JSON 是否机端执行: ROCKET_CLOUD_EXECUTE_FLIGHT=1;走 ROS 伴飞桥时再设 ROCKET_FLIGHT_INTENT_ROS_BRIDGE=1(详见 docs/DEPLOYMENT_AND_OPERATIONS.md

5.4 本地大模型与 TTS

  • GGUFcache/ 默认路径或 ROCKET_LLM_GGUF
  • 关闭对话:ROCKET_LLM_DISABLE=1
  • 流式输出:ROCKET_LLM_STREAM=0 可改为整段生成后再播(调试)
  • 详细列表见 voice_drone/main_app.py 文件头部注释

5.5 其它实用环境变量(摘录)

变量 说明
ROCKET_ENERGY_VAD 1 时使用能量 VAD板载麦常见
ROCKET_PRINT_STT / ROCKET_PRINT_VAD 终端打印 STT/VAD 诊断
ROCKET_CLOUD_TURN_RETRIES 云端 WS 单轮失败重连重试次数(默认 3
ROCKET_PRINT_LLM_STREAM 云端流式字 llm.text_delta 打印到终端
ROCKET_WAKE_PROMPT_BEEP 0 关闭问候后滴声
ROCKET_MIC_RESTART_SETTLE_MS 播完 TTS 恢复麦克风后的等待毫秒

6. 相关文档与代码入口

文档 内容
README.md 简版说明、bundle 到香橙派、与原仓库关系
docs/DEPLOYMENT_AND_OPERATIONS.md 部署与外场启动:拓扑、ROS_MASTER_URI、双终端启动顺序、环境变量速查、联调
docs/PROJECT_GUIDE.md 本文:目录、配置、使用方式总览
docs/FLIGHT_BRIDGE_ROS1.md ROS1 伴飞桥、MAVROS、/inputrostopic pub
docs/llmcon.md 云端 WebSocket 消息类型与客户端约定
docs/CLOUD_VOICE_FLIGHT_CONFIRM_v1.md 云端 dialog_result v1protocol=cloud_voice_dialog_v1,闲聊/飞控分流 + confirm
能力 主要代码
音频采集/AGC voice_drone/core/audio.py
能量/Silero VAD voice_drone/core/recognizer.pyvoice_drone/core/vad.py
STT voice_drone/core/stt.py
本地 LLM 提示词 voice_drone/core/qwen_intent_chat.pyFLIGHT_INTENT_CHAT_SYSTEM
云端会话 voice_drone/core/cloud_voice_client.py
主流程 voice_drone/main_app.py
配置聚合 voice_drone/core/configuration.py

7. 版本与维护

  • 配置项会随功能迭代增加;若与运行日志或 llmcon 不一致,以当前仓库 YAML + 代码为准。
  • 新增仅与云端相关的字段时,请同时通知服务端解析 session.start.client(含 PX4 扩展块)。

文档版本:与仓库同步维护;更新日期见 Git 提交。