你如何让一个模块运行,并在Nao机器人的编舞中被识别?



我正在使用Nao机器人和python SDK,我正在尝试为它创建自己的模块。现在它只是一个具有一个功能的虚拟模块:getJoke().

我的文件tellAJoke.py位于路径/home/nao/tellAJoke.py下,并且已更新autoload.ini文件以包含以下内容:

[python]
/home/nao/tellAJoke.py

当我启动机器人时,它会说它在启动时通常会做什么,但也说我的getJoke()函数返回什么,"这是一个糟糕的笑话"。

我不确定我在这里做错了什么。当我在机器人上ssh并运行代码时,它运行得很好,但是当我想在Choreographe中导入带有ALProxy模块时,它永远不会运行。

编辑:我添加了我拥有的实际虚拟代码。

from naoqi import ALBroker
from naoqi import ALModule
from naoqi import ALProxy
import sys
class JokerModule(ALModule):
"""Tells you a random joke"""
def __init__(self, name):
print "WE HAVE INITED"

self.tts = ALProxy("ALTextToSpeech")
ALModule.__init__(self, name)
global memory
memory = ALProxy("ALMemory")
memory.subscribeToEvent("SayingJoke", "Joker", "getJoke")
def getJoke(self, *_args):
"""Returns a joke"""
self.tts.say("Joke time!")
def main():
"""main entry point"""
pip = '192.168.1.104'
pport = 9559
myBroker = ALBroker("myBroker", '0.0.0.0', 0, pip, pport)
global Joker
Joker = JokerModule("Joker")
speechProxy = ALProxy("ALTextToSpeech")
Joker.getJoke()
if __name__ == '__main__':
main()

这是一个关于制作服务的指南(又名"模块",但该术语令人困惑,因为它在 Python 中具有另一种含义(: http://doc.aldebaran.com/2-4/dev/libqi/guide/py-service.html(此文档适用于 NAOqi 2.4,但对于 2.1 应该基本相同,这在 NAO 上更常用(

但是,您可能想尝试Robot Jumpstarter,其中包含各种典型项目的模板,包括python服务(其工作原理如上面的文档所述(。

克隆它并运行python jumpstart.py python-service tell-a-joke TellAJoke

。它将生成一个项目,您可以:

  • 安装在机器人女巫编舞上
  • 独立运行与Python tell-a-joke/app/scripts/tellajoke.py--qi-url your-naos-ip

。在这两种情况下,您都可以从编舞框等中调用它。

(编辑(

现在你发布了你的代码 - 在这个特定情况下,你的问题只是在Joker.getJoke((之后,你的程序到达终点并终止。通常的"现代"方法是用气。application(( 将 .run(((所有操作都在 jumpstarter 模板中完成(。你可以做一段时间 True:sleep(1( 或其他什么,这不是很漂亮,但可以工作(我建议迁移到 NAOqi 2,而不是使用 ALProxy 和 ALBroker,使用 session.service 和 qi。应用。。。两者是可互操作的(

最新更新