NAO机器人:定义框输出功能的地方

时间:2015-06-11 05:56:29

标签: nao-robot

我想知道NAO行为框的输出函数通常定义在哪里。

我在API中找不到任何相关文档。确实可以找到一些,但不能用于输出功能。

以Speech Reco框为例,我可以找到函数的定义" WordRecognized"在线API,但不是" wordRecognized" (区分大小写)和" onNothing"。直觉是他们在框的脚本中将它们定义为帮助器(可以通过双击框来获得),但我只是在脚本中找不到任何相关的实现。

之前有人有这个并知道解决方案吗?我非常感谢任何反馈,因为我想检查它们是如何定义的。

Speech Reco的代码如下所示,对于其他一些盒子也会出现这种情况:

class MyClass(GeneratedClass):

def __init__(self):
    GeneratedClass.__init__(self, False)
    try:
        self.asr = ALProxy("ALSpeechRecognition")
    except Exception as e:
        self.asr = None
        self.logger.error(e)
    self.memory = ALProxy("ALMemory")

def onLoad(self):
    from threading import Lock
    self.bIsRunning = False
    self.mutex = Lock()
    self.hasPushed = False
    self.hasSubscribed = False
    self.BIND_PYTHON(self.getName(), "onWordRecognized")

def onUnload(self):
    from threading import Lock
    self.mutex.acquire()
    try:
        if (self.bIsRunning):
            if (self.hasSubscribed):
                self.memory.unsubscribeToEvent("WordRecognized", self.getName())
            if (self.hasPushed and self.asr):
                self.asr.popContexts()
    except RuntimeError, e:
        self.mutex.release()
        raise e
    self.bIsRunning = False;
    self.mutex.release()

def onInput_onStart(self):
    from threading import Lock
    self.mutex.acquire()
    if(self.bIsRunning):
        self.mutex.release()
        return
    self.bIsRunning = True
    try:
        if self.asr:
            self.asr.setVisualExpression(self.getParameter("Visual expression"))
            self.asr.pushContexts()
        self.hasPushed = True
        if self.asr:
            self.asr.setVocabulary( self.getParameter("Word list").split(';'), self.getParameter("Enable word spotting") )
        self.memory.subscribeToEvent("WordRecognized", self.getName(), "onWordRecognized")
        self.hasSubscribed = True
    except RuntimeError, e:
        self.mutex.release()
        self.onUnload()
        raise e
    self.mutex.release()

def onInput_onStop(self):
    if( self.bIsRunning ):
        self.onUnload()
        self.onStopped()

def onWordRecognized(self, key, value, message):
    if(len(value) > 1 and value[1] >= self.getParameter("Confidence threshold (%)")/100.):
        self.wordRecognized(value[0]) #~ activate output of the box
    else:
        self.onNothing()

1 个答案:

答案 0 :(得分:0)

在创建或编辑框输入或输出时定义了这些方法:

如果您为输入命名为“onMyTruc”,则在触发输入时将调用onInput_onMyTruc(self)方法。

如果将名称“output_value”赋予某个输出,它将创建一个可调用的方法名称:“self.output_value()”

在您的示例中,wordRecognized和onNothing是SpeechReco框输出的名称。