You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pepper机器人setVocabulary报错:modifiable_grammar已存在

解决Pepper机器人ASR动态设置词汇时的"modifiable_grammar already exists"错误

这个问题的核心是:每次调用setVocabulary时,系统会自动创建名为modifiable_grammar的语法规则,但如果之前的语法实例未被正确清理,再次调用就会触发重复创建的冲突,尤其是动态更新词汇时,旧语法没有被移除。

直接解决方案:先移除旧语法,再设置新词汇

每次更新词汇前,主动尝试移除已存在的modifiable_grammar,即使它不存在也没关系(捕获异常即可),然后再调用setVocabulary。示例代码:

# 假设asr是已初始化的ALSpeechRecognition实例
try:
    # 尝试移除已存在的语法
    asr.removeGrammar("modifiable_grammar")
except RuntimeError:
    # 语法不存在时忽略异常
    pass

# 设置新的识别词汇,第二个参数为False表示词汇是普通文本(非正则)
asr.setVocabulary(["你好", "再见", "播放音乐"], False)

进阶优化:配合ASR状态控制避免并发问题

如果你的脚本包含异步逻辑,可能出现ASR在工作时被修改词汇的情况,建议先暂停识别,完成词汇更新后再恢复:

# 暂停语音识别
asr.pause(True)

# 清理旧语法并设置新词汇
try:
    asr.removeGrammar("modifiable_grammar")
except RuntimeError:
    pass
asr.setVocabulary(["暂停播放", "调高音量", "下一首"], False)

# 恢复语音识别
asr.pause(False)

额外注意事项

  • 彻底放弃“跳过重复设置”的逻辑,动态修改词汇必须每次清理旧语法,否则冲突会持续出现。
  • 检查脚本中是否存在重复初始化ASR实例或重复订阅识别事件的情况,这类操作也可能导致语法资源未释放。

内容的提问来源于stack exchange,提问作者Manuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:04:50