voice_drone_assistant

从原仓库抽离的独立可运行子工程:麦克风采集 → VAD 切段 → SenseVoice STT唤醒词 →(关键词起飞 / Qwen + Kokoro 对话播报)。

部署与外场启动(推荐先读):docs/DEPLOYMENT_AND_OPERATIONS.md
日常配置索引:docs/PROJECT_GUIDE.md · 云端协议:docs/llmcon.md

目录结构

路径 说明
main.py 启动入口
with_system_alsa.sh Conda 下建议包一层启动,修正 ALSA/PortAudio
voice_drone/core/ 音频、VAD、STT、TTS、预处理、唤醒、配置、识别器主流程
voice_drone/main_app.py 唤醒流程 + LLM 流式 + 起飞脚本联动(原 rocket_drone_audio.py
voice_drone/config/ system.yamlwake_word.yamlkeywords.yamlcommand_.yaml
voice_drone/logging_/ 彩色日志
voice_drone/tools/ YAML 加载等
scripts/ PX4 offboard、generate_wake_greeting_wav.py
assets/tts_cache/ 唤醒问候 WAV 缓存
models/ 需自备或软链,见 models/README.txt

环境准备

  1. Python 3.10+(与原项目一致即可),安装依赖:

    pip install -r requirements.txt
    
  2. 模型:将 STT / TTS /可选Silero VAD 放到 models/,或按 models/README.txt 从原仓库 src/models 创建符号链接。

  3. 大模型:默认查找 cache/qwen25-1.5b-gguf/qwen2.5-1.5b-instruct-q4_k_m.gguf,或通过环境变量 ROCKET_LLM_GGUF 指定 GGUF 路径。

运行

voice_drone_assistant 根目录 执行:

bash with_system_alsa.sh python main.py

常用参数与环境变量与原 rocket_drone_audio.py 相同(如 ROCKET_LLM_STREAMROCKET_INPUT_DEVICE_INDEX--input-indexROCKET_ENERGY_VAD 等),说明见 voice_drone/main_app.py 文件头注释。

也可直接跑模块:

bash with_system_alsa.sh python -m voice_drone.main_app

为什么不默认带上原仓库的 models

  • ONNX / GGUF 体积大(动辄数百 MB数 GB放进 Git 或重复拷贝会加重仓库和同步成本。
  • 抽离时只保证 代码与配置自给;权重文件用 本机拷贝 / U 盘 / 另一台预先 bundle 更灵活。

若你本机仍摆着原仓库 rocket_drone_audio,且 voice_drone_assistant 在其子目录下,代码里有个临时便利models/... 找不到时会尝试 上一级 src/models/...,所以在开发机上可以不改目录也能跑。
这只在「子目录 + 上层仍有原仓库」时有效,把 voice_drone_assistant 单独拷到另一台香橙派后,上层没有原仓库,必须在本目录自备 models/(和可选 cache/

拷到另一台香橙派要做什么?

  1. 整目录复制(建议先在本机执行下面脚本打全模型,再打包 voice_drone_assistant

    cd /path/to/voice_drone_assistant
    bash scripts/bundle_for_device.sh /path/to/rocket_drone_audio
    

    会把 SenseVoiceSmallKokoro-82M-v1.1-zh-ONNX(及存在的 SileroVad)复制到本目录 models/;可按提示选择是否复制 Qwen GGUF。

  2. 新机器上 Python 依赖:另一台是全新系统时,需要再装一次(或整体迁移同一个 conda/env

    cd voice_drone_assistant
    pip install -r requirements.txt
    

    二进制/系统库层面若仍用 conda + PortAudio建议继续 bash with_system_alsa.sh python main.py

  3. 大模型路径:若未打包 cache/,在新机器设环境变量或放入默认路径,例如:

    export ROCKET_LLM_GGUF=/path/to/qwen2.5-1.5b-instruct-q4_k_m.gguf
    

综上:工程可独立,但必须带上 models/ + 已装依赖 +可选GGUFpip install 每台新环境通常要做一次,除非你把整个 conda env 目录一起迁移。

与原仓库关系

  • 本目录为代码与配置的复制 + 包名调整src.*voice_drone.*),默认不把大体积 models/cache/ 放进版本库。
  • 原仓库 rocket_drone_audio 仍可继续使用;开发阶段两者可并存,部署到单机时只带走 voice_drone_assistant+ bundle 后的模型)即可。

未纳入本工程的模块

PX4 电机演示、独立录音脚本、Socket 试飞控协议服务端、ChatTTS 转换脚本等均留在原仓库,以减小篇幅;本工程仍通过 SocketClient 预留配置项(TakeoffPrintRecognizer 使用 auto_connect_socket=False,不依赖外置试飞控 Socket