Pepper:将变量从 Python 传递给 Web JS
Pepper: pass variable from Python to web JS
我正在为 Aldebaran 的 Pepper 机器人编写应用程序。我正在使用 Choregraphe,我制作了一个 html 用于在机器人平板电脑中显示。我制作了用于显示网络的框,我需要将一个变量从 Python 传递到网络 Javascript。
有什么办法吗?
Python代码与Raise Event框的默认代码相同,它在他的onStart
输入上接收一个字符串"IMAGE":
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
pass
def onLoad(self):
self.memory = ALProxy("ALMemory")
def onUnload(self):
self.memory = None
def onInput_onStart(self, p):
self.memory.raiseEvent(self.getParameter("key"), p)
self.onStopped(p)
def onInput_onStop(self):
self.onUnload() #~ it is recommended to call onUnload of this box in a onStop method, as the code written in onUnload is used to stop the box as well
pass
Javascript 代码是这样的:
$('document').ready(function(){
var session = new QiSession();
session.service("ALMemory").done(function (ALMemory) {
ALMemory.subscriber("PepperQiMessaging/totablet").done(function(subscriber) {
$("#log").text("AAA");
subscriber.signal.connect(toTabletHandler);
});
});
function toTabletHandler(value) {
$("#log").text("-> ");
}
});
进入第一个#log
,不进入JS的第二个
我解决了这个问题。我在 show HTML 框和 sendImage 框之间放了一个 2 秒的 delay 框框如下图所示:
我认为问题是发送到表格的字符串是在网络准备接收它之前发送的,延迟 2 秒(1 秒不起作用)页面有时间准备用于接收数据。
是的,我认为网页加载太晚,无法赶上您的活动。一种快速解决方案是在页面准备就绪时从 Javascript 发送事件,并在 Python 脚本中等待此事件。收到此事件后,您就知道网页已准备就绪,您可以发送 "sendImage" 事件。
我正在为 Aldebaran 的 Pepper 机器人编写应用程序。我正在使用 Choregraphe,我制作了一个 html 用于在机器人平板电脑中显示。我制作了用于显示网络的框,我需要将一个变量从 Python 传递到网络 Javascript。
有什么办法吗?
Python代码与Raise Event框的默认代码相同,它在他的onStart
输入上接收一个字符串"IMAGE":
class MyClass(GeneratedClass):
def __init__(self):
GeneratedClass.__init__(self)
pass
def onLoad(self):
self.memory = ALProxy("ALMemory")
def onUnload(self):
self.memory = None
def onInput_onStart(self, p):
self.memory.raiseEvent(self.getParameter("key"), p)
self.onStopped(p)
def onInput_onStop(self):
self.onUnload() #~ it is recommended to call onUnload of this box in a onStop method, as the code written in onUnload is used to stop the box as well
pass
Javascript 代码是这样的:
$('document').ready(function(){
var session = new QiSession();
session.service("ALMemory").done(function (ALMemory) {
ALMemory.subscriber("PepperQiMessaging/totablet").done(function(subscriber) {
$("#log").text("AAA");
subscriber.signal.connect(toTabletHandler);
});
});
function toTabletHandler(value) {
$("#log").text("-> ");
}
});
进入第一个#log
,不进入JS的第二个
我解决了这个问题。我在 show HTML 框和 sendImage 框之间放了一个 2 秒的 delay 框框如下图所示:
我认为问题是发送到表格的字符串是在网络准备接收它之前发送的,延迟 2 秒(1 秒不起作用)页面有时间准备用于接收数据。
是的,我认为网页加载太晚,无法赶上您的活动。一种快速解决方案是在页面准备就绪时从 Javascript 发送事件,并在 Python 脚本中等待此事件。收到此事件后,您就知道网页已准备就绪,您可以发送 "sendImage" 事件。