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

如何在Python中执行NAO Choregraphe导出的虚拟NAO动作代码?

解决NAO机器人动作代码不执行的问题

嘿,我看了你的代码,发现几个关键问题导致动作没运行,帮你一步步修复:

问题拆解与修复步骤

  • 重复覆盖代理对象:你多次重复创建代理还覆盖了之前的对象,比如一开始把tts先设为ALTextToSpeech,立刻又改成ALMotion;后面创建motion代理时也犯了同样的错——先指定IP和端口创建了正确的代理,又用无参数的ALProxy("ALMotion")覆盖,这直接断了和机器人的连接。
  • main函数从未被调用:你把动作逻辑写在main里,但代码从头到尾没触发这个函数,自然不会执行动作。
  • 错误的方法调用:motion.Proxy.wakeUp()是错的,motion本身就是代理对象,直接用motion.wakeUp()就行。
  • 过时的异常处理语法:Python2里except BaseException, err建议改成except BaseException as err,更规范。

修正后的完整代码

from naoqi import ALProxy
import time

# 创建语音代理
tts = ALProxy("ALTextToSpeech", "127.0.0.1", 9559)
# 创建动作代理
motion = ALProxy("ALMotion", "127.0.0.1", 9559)

def main():
    # 唤醒机器人(确保机器人处于可动作状态)
    motion.wakeUp()
    time.sleep(0.5)
    
    # 你的动作数据(保持你原来的参数)
    names = []
    times = []
    keys = []
    
    names.append("HeadPitch")
    times.append([0, 0.48, 1, 1.48])
    keys.append([-0.0429941, -0.2102, 0.0820305, -0.16418])
    
    # 这里省略你其他的关节参数...
    
    names.append("RWristYaw")
    times.append([0, 0.52, 1, 1.52])
    keys.append([-0.339056, 0.0889301, 0.935697, 1.1029])
    
    try:
        # 执行动作插值
        motion.angleInterpolation(names, keys, times, True)
        # 动作完成后让机器人休息(可选)
        motion.rest()
    except BaseException as err:
        print(f"动作执行出错: {err}")

# 先执行语音
tts.say("Hello my name is Nao \\pau=1000\\ and I am a robot")
# 调用main函数执行动作
main()

额外说明

  1. 我删掉了重复导入的库(比如你重复导入了qi、argparse等没用的依赖),让代码更简洁。
  2. 添加了time.sleep(0.5)给机器人一点唤醒的缓冲时间,避免动作和语音冲突。
  3. 最后加了motion.rest(),让机器人动作完成后回到休息状态,这是NAO机器人的常规操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:12:37