1

我正在为 Aldebaran's Pepper 机器人编写应用程序。我正在使用 Choregraphe,并制作了一个用于在机器人平板电脑中显示的 html。我已经制作了用于显示 Web 的框,我需要将一个变量从 Python 传递到 Web 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("-> ");
    }
});

它进入#logJS的第一个而不是第二个。

编舞方案

4

2 回答 2

2

是的,我认为网页加载太晚,无法捕捉您的活动。一种快速的解决方案是在页面准备好时从 Javascript 发送一个事件,然后在 Python 脚本中等待这个事件。一旦接收到这个事件,那么你就知道网页已经准备好了,你可以发送“sendImage”事件。

于 2017-08-28T22:58:48.653 回答
1

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

编舞方案

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

于 2017-08-25T10:08:28.077 回答