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