Python Naoqi事件处理10秒延迟
我正在Windows XP机器和Python 2.7上使用NAO机器人 我想检测语音中的标记。整个过程都成功了,但不幸的是,我现在不得不面对10秒的延迟,并且我的事件没有被检测到(回调函数没有被调用) 首先,我的主要职能是:Python Naoqi事件处理10秒延迟,python,event-handling,delay,led,nao-robot,Python,Event Handling,Delay,Led,Nao Robot,我正在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.
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)
这里是我的SpeechEvent模块:
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)
拜托,有人有同样的问题吗?
有谁能给我一个建议吗
提前谢谢 您正在订阅模块外的事件。如果我没有错的话,您必须在
\uuuu init\uuu
方法中执行此操作
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)
请查看,它可能会有所帮助。也许您应该尝试手动绑定回调,方法是:
def __init__(self, name, ext_memory):
ALModule.__init__(self, name)
self.BIND_PYTHON( self.getName(),"onBookmarkDetected" );
这就是我在一些编舞框中使用回调时所做的。下面是如何使用最新的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.")
我可以排除过热的问题,你说它有效。。。你修改了什么?可能您编程的模块占用了大量CPU(在这里,只有您知道原因。开始思考您在开始失败时引入的更改)。您可以看到是否是CPU问题使用ssh连接到机器人并执行“top”命令Hello Manuel,非常感谢您的回复!是的,它上周起作用了,我正在调试,将eventhandling从整个项目中分离出来,以确保解决该问题。CPU是个好主意,我通过ssh连接到我的nao,但没有进程导致超过10%的CPU-因此你的建议不是解决方案:(但是thx。你有更多的建议吗?提前thx,我的朋友!如果tts检测到一个标记,它似乎无法处理它,正如我所写的,回调函数不会被调用。为了检测标记,我们使用了LED。我还用另外两个NAO尝试了我的脚本。问题一定在我这边。因为主要的问题是没有引发回调,也许是吧。)你应该考虑编辑你的问题,让别人更清楚一些。比如“Nooq:回调没有提出”。不管怎样,你说你已经延迟了10秒的标记检测,后来说回调没有提出……你不觉得这听起来矛盾吗?