ESP32-S3-BOX-3 xiaozhi_chat 启用 enable_vcmd_detect AFE 初始化卡死

xiaoshidi
Posts: 2
Joined: Tue Jun 02, 2026 11:07 am

ESP32-S3-BOX-3 xiaozhi_chat 启用 enable_vcmd_detect AFE 初始化卡死

Postby xiaoshidi » Tue Jun 02, 2026 11:23 am

有哪位大佬可以看一下我的问题解答一下吗 :(

硬件架构:

- 交互终端:ESP32-S3-BOX-3
- 功能:离线唤醒、AI 对话(小智)、屏幕显示
- 运动控制:ESP32-S3-DevKitC-1
- 功能:电机控制、摄像头、UDP 接收
- 通信方式:Wi-Fi / UDP
- BOX-3 通过 UDP 向 DevKitC-1 发送控制指令

目标功能:

- 离线模式:唤醒后,直接识别本地命令词(前进 / 停止 / 左转等),不联网,通过 UDP 控制小车。
- 在线模式:唤醒后,与小智 AI 对话,回答天气等问题。
- 期望流程:
- 唤醒词:“你好小智”
- 说“前进” → 离线命令词识别 → 发送 UDP 指令给 DevKitC-1 → 小车前进
- 说“今天天气怎么样” → 在线 AI 回答
- 唤醒后 5 秒内没有说话 → 自动切到在线 AI 模式

【当前问题】

基于 esp-iot-solution 官方示例 `examples/ai/xiaozhi_chat` 开发。

在 `esp_xiaozhi_chat_app.c` 中修改 AFE 配置,尝试启用离线命令词检测:

```c
av_processor_afe_config_t afe_config = DEFAULT_AV_PROCESSOR_AFE_CONFIG();
afe_config.ai_mode_wakeup = true;
afe_config.enable_vcmd_detect = true; // 启用命令词检测
afe_config.vcmd_timeout_ms = 5000;结果:设备在 AFE 初始化阶段卡死,串口输出停在:

/********** WakeNet (Wake Word Engine) **********/
wakenet_init: true
wakenet_model_name: wn9_hilexin
...
/********** AGC (Automatic Gain Control) **********
agc_init: true
agc_mode: WAKENET
agc_compression_gain_db: 9
agc_target_level_dbfs: 9
之后没有任何新的 log 输出,设备无响应。

如果把 enable_vcmd_detect 设为 false,则一切正常:唤醒词检测正常,在线小智 AI 对话正常。

【测试结果】

enable_vcmd_detect = false:✅ 正常工作,可以唤醒并进行在线 AI 对话。
enable_vcmd_detect = true:❌ AFE 初始化阶段卡死,设备无响应。
【已尝试的方案】

手动调用 esp_gmf_afe_vcmd_detection_begin():

配置中设置 enable_vcmd_detect = false;
在 AFE 的 ESP_GMF_AFE_EVT_WAKEUP_START 事件回调里,手动调用 esp_gmf_afe_vcmd_detection_begin();
结果:设备不会卡死,但命令词检测完全没有反应,说“前进”等命令词没有任何识别结果,麦克风看起来没有被用于命令词识别。
回退到 enable_vcmd_detect = true:

再次出现 AFE 初始化卡死的问题。
【软件版本 / 组件】

ESP-IDF:v5.5.4
esp_xiaozhi:0.1.0
av_processor:^0.5.5
esp-sr:使用 MultiNet7 中文模型
esp_board_manager:使用 ESP32-S3-BOX-3 板级配置
关键 sdkconfig 配置(节选):

CONFIG_SR_MN_CN_MULTINET7_QUANT=y # 中文命令词模型 MultiNet7
CONFIG_SR_WN_WN9_HILEXIN=y # 唤醒词 "你好乐鑫"
CONFIG_ESP_BOARD_ESP_BOX_3=y # BOX-3 板型
AFE 相关配置(关键字段):

afe_config.ai_mode_wakeup = true;
afe_config.enable_vcmd_detect = true;
afe_config.vcmd_timeout_ms = 5000;
afe_config.vad_min_speech_ms = 256;
afe_config.vad_min_noise_ms = 2000;
afe_config.mn_language = "cn";
【我的分析猜测】

目前怀疑的点包括:

MultiNet7 模型较大(srmodels.bin 约 2.9 MB),在 ESP32-S3-BOX-3 上通过 av_processor + esp_xiaozhi 一起使用时,可能存在内存不足或分配失败,导致 AFE 初始化阶段卡死。
av_processor 与 esp-sr 的版本兼容性问题:enable_vcmd_detect 这条路径可能依赖特定版本的 esp-sr 或特定模型组合。
AFE 初始化流程中,内部同步加载 MultiNet 模型,如果加载失败或阻塞,没有正确返回错误码,表现为“卡死”。
ESP32-S3-BOX-3 + MultiNet7 + xiaozhi_chat + av_processor 这一组合,是否需要额外的 sdkconfig 或内存配置,目前文档中没有找到说明。
已基本排除的原因:

Wi-Fi 连接:正常
唤醒词检测:正常(enable_vcmd_detect = false 时)
在线小智 AI 对话:正常
音频编解码 / 麦克风 / 扬声器:正常
【想请教的问题】

在 xiaozhi_chat 示例中,设置 enable_vcmd_detect = true 导致 AFE 初始化卡死,这种情况是否是已知问题?是否有相关的修复或规避方案?
在 ESP32-S3-BOX-3 上使用 MultiNet7 中文模型(CONFIG_SR_MN_CN_MULTINET7_QUANT=y)时,是否需要配合 esp_xiaozhi + av_processor 做额外的内存或 sdkconfig 配置?
官方推荐的做法是:
直接使用 av_processor_afe_config_t 里的 enable_vcmd_detect,还是
在应用层手动集成 ESP-SR 的 AFE + WakeNet + MultiNet 流程(即自己调用 MultiNet 的 create/detect/get_results),然后再和 xiaozhi_chat 进行配合?
目前是否有官方示例,演示 “xiaozhi_chat + 离线命令词识别” 的完整方案?例如:
唤醒词 + 离线命令词(前进 / 停止 / 左转等)控制小车;
超时或未识别到命令词时,自动切换到在线小智 AI 对话。
非常感谢,如果需要我可以提供完整的 sdkconfig、log 或最小复现工程

Who is online

Users browsing this forum: No registered users and 1 guest