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

95 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# voice_drone_assistant
从原仓库抽离的**独立可运行**子工程:麦克风采集 → VAD 切段 → **SenseVoice STT****唤醒词** →(关键词起飞 / **Qwen + Kokoro 对话播报**)。
**部署与外场启动(推荐先读):[docs/DEPLOYMENT_AND_OPERATIONS.md](docs/DEPLOYMENT_AND_OPERATIONS.md)**
**日常配置索引:[docs/PROJECT_GUIDE.md](docs/PROJECT_GUIDE.md)** · 云端协议:[docs/llmcon.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.yaml``wake_word.yaml``keywords.yaml``command_.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+(与原项目一致即可),安装依赖:
```bash
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
bash with_system_alsa.sh python main.py
```
常用参数与环境变量与原 `rocket_drone_audio.py` 相同(如 `ROCKET_LLM_STREAM`、`ROCKET_INPUT_DEVICE_INDEX`、`--input-index`、`ROCKET_ENERGY_VAD` 等),说明见 `voice_drone/main_app.py` 文件头注释。
也可直接跑模块:
```bash
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`
```bash
cd /path/to/voice_drone_assistant
bash scripts/bundle_for_device.sh /path/to/rocket_drone_audio
```
会把 `SenseVoiceSmall`、`Kokoro-82M-v1.1-zh-ONNX`(及存在的 `SileroVad`)复制到本目录 `models/`;可按提示选择是否复制 Qwen GGUF。
2. **新机器上 Python 依赖**:另一台是**全新系统**时,需要再装一次(或整体迁移同一个 conda/env
```bash
cd voice_drone_assistant
pip install -r requirements.txt
```
二进制/系统库层面若仍用 conda + PortAudio建议继续 **`bash with_system_alsa.sh python main.py`**。
3. **大模型路径**:若未打包 `cache/`,在新机器设环境变量或放入默认路径,例如:
```bash
export ROCKET_LLM_GGUF=/path/to/qwen2.5-1.5b-instruct-q4_k_m.gguf
```
综上:**工程可独立**,但必须带上 **`models/` + 已装依赖 +可选GGUF****`pip 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