2

我需要通过集成平板电脑向机器人发送用户文本输入,并以某种方式捕获它,以便在 Choregraphe 中进行进一步处理。

在阅读了关于 ALTabletService API 的 Aldebaran 文档后,我发现很少有方法可以解决所有这些问题。这些方法是 ALTabletService::showInputTextDialog 和 ALTabletService::onInputText,但不知何故我无法让它们工作:当我通过平板电脑输入一些文本时,它们完全没有返回任何内容。

我需要访问用户输入一段文本时创建的字符串。有什么建议怎么做吗?

4

3 回答 3

1

ALTabletService我在没有方法的情况下意识到了这一点,showInputTextDialog或者onInputText

我的方法:我制作了一个带有输入字段和一个按钮来发送输入的 html 页面。按下按钮时,我通过 QiMessaging Javascript 库使用docforceInput中的方法。文档ALDialog

我现在无法测试它,但这应该有助于作为灵感

function forceInput(input) {
    QiSession(function(session) {
        session.service('ALDialog').then(function(ALDialog) {
            ALDialog.forceInput(input);
        });
    }
}

现在您可以将输入发送到主题。这可能类似于“imput_from_tablet blablabla”。在对话框中你会看到

u:(imput_from_tablet _*) $1

1 美元应该是 blablabla。

希望这有助于最好的问候

于 2018-08-15T12:09:13.123 回答
1

您可以为平板电脑创建一个网页并将其打包到您的应用程序中 - 请参阅此处的文档;然后,在该网页上您可以创建一个文本输入字段(请小心选择该字段时屏幕的下半部分将由键盘隐藏),然后使用JavaScript SDK将其使用输入的文本值,然后您可以从 Choregraphe 获取。

于 2018-08-08T05:56:56.500 回答
1

我遇到了完全相同的问题,我在信号列表中找到了这个ALTabletService::onInputText方法。您可以在同一页面上找到如何使用信号的示例。基于这些示例,我创建了以下脚本,该脚本可以从输入字段中获取值:

import qi
import sys

def main(app):
    try:
        session = app.session
        tabletService = session.service("ALTabletService")
        tabletService.showInputTextDialog("Example dialog", "OK", "Cancel")
        signal_id = 0

        def callback(button_id, input_text):
            if button_id == 1:
                print "'OK' button is pressed."
                print "Input text: " + input_text
            if button_id == 0:
                print "'Cancel' button is pressed"

            tabletService.onInputText.disconnect(signal_id)
            app.stop()

        # attach the callback function to onJSEvent signal
        signal_id = tabletService.onInputText.connect(callback)
        print "Signal ID: {}".format(signal_id)

        app.run()
    except Exception, e:
        print "Error was: ", e


if __name__ == "__main__":
    ip = "10.0.10.254" # the IP of the robot
    port = 9559

    try:
        connection_url = "tcp://{}:{}".format(ip, port)
        app = qi.Application(url=connection_url)
        app.start()
    except RuntimeError:
        print("Can't connect to Naoqi.")
        sys.exit(1)
    main(app)
于 2018-08-29T16:23:29.933 回答