您好,我想知道如何使用python加载对话框主题文件。 我确保文件路径是正确的,但一直说这不是正确的。我还使用了NAO 2.1文档ALDialog和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()
答案 0 :(得分:1)
主题的路径必须是该文件的绝对路径,而与当前执行目录相比,您传递的是相对路径。原因是ALDialog是在其自己的进程中运行的单独服务,对调用它的人的执行上下文一无所知。
并且必须使用Choregraphe将程序.top文件上传到机器人。
因此,在这种情况下,您的绝对路径可能类似于
topf_path = "/home/nao/simpleTestes/diaSimples/testeSimples_ptb.top"
...或者如果您想变得更干净一点,如果您知道脚本是在应用程序包的根目录中执行的,请使用os.path:
topf_path = os.path.abspath("diaSimples/testeSimples_ptb.top")