0

Windows XP マシンと Python 2.7 で NAO ロボットを使用しています。

音声のマーカーを検出したい。すべてうまくいきましたが、残念ながら、10 秒の遅延に直面する必要があり、イベントが検出されません (コールバック関数が呼び出されません)。

まず、私の主な機能:

from naoqi import ALProxy, ALBroker
from speechEventModule import SpeechEventModule
myString = "Put that \\mrk=1\\ there."
NAO_IP = "192.168.0.105" 
NAO_PORT = 9559
memory = ALProxy("ALMemory", NAO_IP, NAO_PORT)
tts = ALProxy("ALTextToSpeech", NAO_IP, NAO_PORT)
tts.enableNotifications()

myBroker = ALBroker("myBroker",
   "0.0.0.0",   # listen to anyone
   0,           # find a free port and use it
   NAO_IP,         # parent broker IP
   NAO_PORT)       # parent broker port

global SpeechEventListener
SpeechEventListener = SpeechEventModule("SpeechEventListener", memory)
memory.subscribeToEvent("ALTextToSpeech/CurrentBookMark", "SpeechEventListener", "onBookmarkDetected")
tts.say(initialString)

そして、ここで私の speechEventModule:

from naoqi import ALModule
from naoqi import ALProxy

NAO_IP = "192.168.0.105" 
NAO_PORT = 9559

SpeechEventListener = None
leds = None
memory = None

class SpeechEventModule(ALModule):
    def __init__(self, name, ext_memory):
        ALModule.__init__(self, name)
        global memory
        memory = ext_memory
        global leds 
        leds = ALProxy("ALLeds",NAO_IP, NAO_PORT)        

    def onBookmarkDetected(self, key, value, message):
        print "Event detected!"
        print "Key: ", key
        print "Value: " , value
        print "Message: " , message

        if(value == 1):
            global leds
            leds.fadeRGB("FaceLeds", 0x00FF0000, 0.2)
        if(value == 2):
            global leds
            leds.fadeRGB("FaceLeds", 0x000000FF, 0.2)

お願いします、同じ問題を抱えている人はいますか?誰でも私にアドバイスをもらえますか?

前もって感謝します!

4

3 に答える 3

0

モジュール外でイベントをサブスクライブしています。私が間違っていない場合は、__init__メソッドにそれを行う必要があります。

class SpeechEventModule(ALModule):

    def __init__(self, name, ext_memory):
        ALModule.__init__(self, name)
        memory = ALProxy("ALMemory")
        leds = ALProxy("ALLeds")

いずれにせよ、メイン関数が永遠に実行され続けることを確認してください (キーボードの割り込みをキャッチした方がよいでしょう)。そうしないと、キーワードがキャッチされる前にプログラムが終了してしまいます。

try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    print
    print "Interrupted by user, shutting down"
    myBroker.shutdown()
    sys.exit(0)

このチュートリアルをご覧ください。役立つ場合があります。

于 2013-08-07T13:25:02.627 に答える
0

おそらく、次のようにして、コールバックを手動でバインドする必要があります。

def __init__(self, name, ext_memory):
    ALModule.__init__(self, name)
    self.BIND_PYTHON( self.getName(),"onBookmarkDetected" );

これは、一部の Choregraphe ボックスでコールバックを使用するときに行うことです。

于 2013-12-13T17:14:35.340 に答える