Pepper:将变量从Python传递给web JS

时间:2017-08-25 07:08:34

标签: pepper choregraphe

我正在为Aldebaran的Pepper机器人编写应用程序。我正在使用Choregraphe,我制作了一个用于在机器人平板电脑中显示的HTML。我已经制作了用于显示网页的框,我需要将一个变量从Python传递到网络Javascript。

有什么办法吗?

Python代码与Raise Event框的默认值相同,它接收一个字符串" IMAGE"在他的onStart输入:

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。

Choregraphe scheme

2 个答案:

答案 0 :(得分:2)

是的,我认为网页加载时间太晚,无法抓住您的活动。一个快速的解决方案是在页面准备就绪时从Javascript发送事件,并在Python脚本中等待此事件。收到此事件后,您就知道网页已准备就绪,您可以发送" sendImage"事件

答案 1 :(得分:1)

我解决了这个问题。我在显示HTML 框和 sendImage 框之间放置了一个2秒的延迟框,如下图所示:

Choreographe Scheme

我认为问题是发送到tabled的字符串是在Web准备接收之前发送的,并且延迟2秒(1表示不起作用)页面有时间准备接收数据