如何在Nao机器人的Choreographe中使模块发挥作用并被识别?

时间:2018-08-30 22:50:58

标签: python nao-robot

我正在使用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()

1 个答案:

答案 0 :(得分:0)

这里是制作服务的指南(又称“模块”,但该术语令人困惑,因为它在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

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

  • 安装在女巫Choregraphe机器人上
  • 使用python tell-a-joke / app / scripts / tellajoke.py --qi-url your-naos-ip独立运行

...,在两种情况下,您都可以从Choregraphe框等中调用它。

(编辑)

现在您发布了代码-在此特定情况下,您的问题只是在Joker.getJoke()之后,程序到达结尾并终止。通常的“现代”方式是使用qi.Application()来实现.run()(所有操作均在jumpstarter模板中完成)。您可以做一会儿True:sleep(1)之类的东西,虽然不是很漂亮,但是可以工作(我建议迁移到NAOqi 2,而不是使用ALProxy和ALBroker,请使用session.service和qi.Application ...两个是可以互操作的)