将主题文件加载到 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")