如何在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()
额外说明
- 我删掉了重复导入的库(比如你重复导入了
qi、argparse等没用的依赖),让代码更简洁。 - 添加了
time.sleep(0.5)给机器人一点唤醒的缓冲时间,避免动作和语音冲突。 - 最后加了
motion.rest(),让机器人动作完成后回到休息状态,这是NAO机器人的常规操作。
内容的提问来源于stack exchange,提问作者Rstevens
相关产品推荐
相关产品推荐

