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

重启Choregraphe应用后Speech recognition未重置的问题咨询

解决Choregraphe重启后Speech Recognition模块残留运行的问题

问题背景

我开发的Choregraphe应用包含两个流程:

  • 问候对话流程:内部依次串联多个Speech Recognition模块,按顺序完成语音交互
  • Bumper重启流程:检测脚部按键触发时,重启整个应用

遇到的问题:当问候流程运行到第2、3个等非首个Speech Recognition模块时按下bumper,重启应用后再次进入问候流程,系统不会执行第一个Speech Recognition模块,而是直接启动上次停留的那个模块。尝试过用Python脚本做Speech Recognition的取消订阅、重新订阅、暂停操作,都没解决。

解决方案

1. 重启时彻底停止并重置流程

Choregraphe的流程状态在重启时可能未完全清空,需要在重启逻辑中主动清理:

  • 用ALBehaviorManager先彻底停止问候流程,再清空Speech Recognition的订阅,最后重新启动主应用:
    from naoqi import ALProxy
    
    # 初始化代理
    behavior_mgr = ALProxy("ALBehaviorManager", "机器人IP", 9559)
    sr_proxy = ALProxy("ALSpeechRecognition", "机器人IP", 9559)
    
    # 停止问候流程
    behavior_mgr.stopBehavior("你的问候流程名称")
    # 取消Speech Recognition的订阅(替换成你的订阅名)
    sr_proxy.unsubscribe("sr_sub")
    # 重新启动主应用流程
    behavior_mgr.runBehavior("你的主应用流程名称")
    

2. 用状态变量控制模块触发

给问候流程加一个全局状态变量,精准控制每个Speech Recognition模块的启动时机:

  • 在Choregraphe中创建一个Memory变量,比如current_sr_step,初始值设为1
  • 每个Speech Recognition模块的启动条件绑定memory://current_sr_step == X(X是模块序号,第一个模块绑定等于1)
  • 每个模块执行完成后,用Set Memory节点把current_sr_step更新为下一个序号
  • 在Bumper重启流程中,添加Set Memory节点,强制把current_sr_step重置为1
  • 这样重启后状态变量回到初始值,只会触发第一个模块

3. 使用Choregraphe内置的重置节点

如果你的Choregraphe版本支持,直接用Reset Behavior节点重置流程状态:

  • 把Reset Behavior节点拖到Bumper触发的流程里
  • 选择问候流程作为重置目标
  • 确保该节点在重启应用前执行,彻底清空流程的运行进度

4. 确保流程从头启动

检查应用启动逻辑,避免使用恢复模式:

  • 调用ALBehaviorManager.runBehavior时,第二个参数保持默认的False,确保流程从头开始运行
  • 不要使用resumeBehavior方法,这个方法会恢复上次的运行状态

内容的提问来源于stack exchange,提问作者Victor Sánchez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:12:56