将主题文件加载到NAO机械手2.1

时间:2018-08-09 20:06:24

标签: python-2.7 nao-robot

您好,我想知道如何使用python加载对话框主题文件。 我确保文件路径是正确的,但一直说这不是正确的。我还使用了NAO 2.1文档ALDialogALModule中的教程 请给我发送有效的代码,或者告诉我错误。我尝试使用以下代码:

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()

1 个答案:

答案 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")