将主题文件加载到 NAO 机器人 2.1
Load topic file to NAO robot 2.1
您好,我想知道如何使用python加载对话主题文件。
我确保文件路径是正确的,但它一直说它不是。我还使用了 NAO 2.1 文档中的教程 ALDialog and ALModule
请给我一个有效的代码或告诉我错误。我尝试使用以下代码:
NAO_IP = "nao.local"
dialog_p = None
ModuleInstance = None
class NaoFalanteModule(ALModule):
def __init__(self, name):
ALModule.__init__(self, name)
self.tts = ALProxy("ALTextToSpeech")
self.tts.setLanguage("Brazilian")
global dialog_p
try:
dialog_p = ALProxy("ALDialog")
except Exception, e:
print "Error dialog"
print str(e)
exit(1)
dialog_p.setLanguage("Brazilian")
self.naoAlc()
def naoAlc(self):
topf_path = "/simpleTestes/diaSimples/testeSimples_ptb.top"
topf_path = topf_path.decode("utf-8")
topic = dialog_p.loadTopic(topf_path.encode("utf-8"))
# Start dialog
dialog_p.subscribe("NaoFalanteModule")
dialog_p.activateTopic(topic)
raw_input(u"Press 'Enter' to exit.")
dialog_p.unload(topic)
dialog_p.unsubscribe
def main():
parser = OptionParser()
parser.add_option("--pip",
help="Parent broker port. The IP address or your robot",
dest="pip")
parser.add_option("--pport",
help="Parent broker port. The port NAOqi is listening to",
dest="pport",
type="int")
parser.set_defaults(
pip=NAO_IP,
pport=9559)
(opts, args_) = parser.parse_args()
pip = opts.pip
pport = opts.pport
myBroker = ALBroker("myBroker",
"0.0.0.0",
0,
pip,
pport)
global ModuleInstance
ModuleInstance = NaoFalanteModule("ModuleInstance")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
printI tried using the following code:
print "Interrupted by user, shutting down"
myBroker.shutdown()
sys.exit(0)
if __name__ == "__main__":
main()
主题的路径需要是该文件的绝对路径,而您传递的是相对于当前执行目录的相对路径。原因是 ALDialog 是一个单独的服务 运行 在它自己的进程中并且对调用它的人的执行上下文一无所知。
并且必须使用Choregraphe 将程序.top 文件上传到机器人。
因此,在这种情况下,您的绝对路径可能类似于
topf_path = "/home/nao/simpleTestes/diaSimples/testeSimples_ptb.top"
...或者如果你想更干净一些,如果你知道你的脚本在应用程序包的根目录下执行,请使用 os.path:
topf_path = os.path.abspath("diaSimples/testeSimples_ptb.top")
您好,我想知道如何使用python加载对话主题文件。 我确保文件路径是正确的,但它一直说它不是。我还使用了 NAO 2.1 文档中的教程 ALDialog and ALModule 请给我一个有效的代码或告诉我错误。我尝试使用以下代码:
NAO_IP = "nao.local"
dialog_p = None
ModuleInstance = None
class NaoFalanteModule(ALModule):
def __init__(self, name):
ALModule.__init__(self, name)
self.tts = ALProxy("ALTextToSpeech")
self.tts.setLanguage("Brazilian")
global dialog_p
try:
dialog_p = ALProxy("ALDialog")
except Exception, e:
print "Error dialog"
print str(e)
exit(1)
dialog_p.setLanguage("Brazilian")
self.naoAlc()
def naoAlc(self):
topf_path = "/simpleTestes/diaSimples/testeSimples_ptb.top"
topf_path = topf_path.decode("utf-8")
topic = dialog_p.loadTopic(topf_path.encode("utf-8"))
# Start dialog
dialog_p.subscribe("NaoFalanteModule")
dialog_p.activateTopic(topic)
raw_input(u"Press 'Enter' to exit.")
dialog_p.unload(topic)
dialog_p.unsubscribe
def main():
parser = OptionParser()
parser.add_option("--pip",
help="Parent broker port. The IP address or your robot",
dest="pip")
parser.add_option("--pport",
help="Parent broker port. The port NAOqi is listening to",
dest="pport",
type="int")
parser.set_defaults(
pip=NAO_IP,
pport=9559)
(opts, args_) = parser.parse_args()
pip = opts.pip
pport = opts.pport
myBroker = ALBroker("myBroker",
"0.0.0.0",
0,
pip,
pport)
global ModuleInstance
ModuleInstance = NaoFalanteModule("ModuleInstance")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
printI tried using the following code:
print "Interrupted by user, shutting down"
myBroker.shutdown()
sys.exit(0)
if __name__ == "__main__":
main()
主题的路径需要是该文件的绝对路径,而您传递的是相对于当前执行目录的相对路径。原因是 ALDialog 是一个单独的服务 运行 在它自己的进程中并且对调用它的人的执行上下文一无所知。
并且必须使用Choregraphe 将程序.top 文件上传到机器人。
因此,在这种情况下,您的绝对路径可能类似于
topf_path = "/home/nao/simpleTestes/diaSimples/testeSimples_ptb.top"
...或者如果你想更干净一些,如果你知道你的脚本在应用程序包的根目录下执行,请使用 os.path:
topf_path = os.path.abspath("diaSimples/testeSimples_ptb.top")