2013-08-07 2 views
0

Windows-XP 시스템과 Python 2.7에서 NAO 로봇을 사용하고 있습니다.Naoqi eventhandling 10 secounds delay

음성으로 마커를 감지하고 싶습니다. 모든 일을했지만 불행히도 지금은 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) 

, 사람이 같은 문제가 마십시오? 아무도 내게 조언을 줄 수 있습니까?

미리 감사드립니다.

+0

나는 당신이 무엇을 수정 한 ... 당신은이 일을 말할 – Ste

+0

과열 문제를 제외 할 수 있습니까? 아마도 당신이 프로그래밍 한 모듈은 많은 CPU를 필요로 할 것입니다 (여기에서, 왜 당신은 그 이유 만 알 수 있습니다. 실패했을 때 도입 한 변경 사항을 생각해보십시오). ssh를 사용하여 로봇에 연결하고 'top'명령을 실행하는 것이 CPU 문제인지 확인할 수 있습니다. – Manuel

+0

안녕하세요 마누엘, 답장을 보내 주셔서 감사합니다. 네, 지난주에 작업했는데, 디버깅 중이며 전체 프로젝트에서 이벤트 처리를 분리하여 문제를 해결했습니다. CPU를 가지고 좋은 아이디어 였고, ssh를 통해 내 아내에게 연결되었지만, CPU의 10 % 이상을 일으키는 프로세스가 없었습니다. 그래서 당신의 제안은 해결책이 아니 었습니다. (그러나 thx. 더 많은 제안이 있습니까? Thx가 사전에 내 친구 야 – Ste

답변

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) 

this tutorial을 살펴보면 도움이 될 수 있습니다.

0

아마 당신은 수동으로 그렇게함으로써, 콜백을 결합하는 시도해야합니다 :

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

그것은 일부 Choregraphe 상자에 콜백을 사용할 때하는 일입니다. 여기

1

는이 최근 Naoqi 버전을 함께 할 것입니다 방법입니다

import qi 
import argparse 


class SpeechEventListener(object): 
    """ A class to react to the ALTextToSpeech/CurrentBookMark event """ 

    def __init__(self, session): 
     super(SpeechEventListener, self).__init__() 
     self.memory = session.service("ALMemory") 
     self.leds = session.service("ALLeds") 
     self.subscriber = self.memory.subscriber("ALTextToSpeech/CurrentBookMark") 
     self.subscriber.signal.connect(self.onBookmarkDetected) 
     # keep this variable in memory, else the callback will be disconnected 

    def onBookmarkDetected(self, value): 
     """ callback for event ALTextToSpeech/CurrentBookMark """ 
     print "Event detected!" 
     print "Value: " , value # key and message are not useful here 

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


if __name__ == "__main__": 
    parser = argparse.ArgumentParser() 
    parser.add_argument("--ip", type=str, default="127.0.0.1", 
         help="Robot IP address. On robot or Local Naoqi: use '127.0.0.1'.") 
    parser.add_argument("--port", type=int, default=9559, 
         help="Naoqi port number") 
    args = parser.parse_args() 

    # Initialize qi framework 
    connection_url = "tcp://" + args.ip + ":" + str(args.port) 
    app = qi.Application(["SpeechEventListener", "--qi-url=" + connection_url]) 
    app.start() 
    session = app.session 
    speech_event_listener = SpeechEventListener(session) 

    tts = session.service("ALTextToSpeech") 
    # tts.enableNotifications() --> this seems outdated 
    while True: 
     raw_input("Say something...") 
     tts.say("Put that \\mrk=1\\ there.")