我需要通过集成的平板电脑向机器人发送用户文本输入,并以某种方式捕获它,以便在Choregraphe中进一步处理。
在阅读了关于ALTabletService应用程序接口的Aldebaran文档后,我发现几乎没有什么方法可以解决所有这些问题。这些方法是ALTabletService::showInputTextDialog和ALTabletService::onInputText,但不知何故我不能让它们工作:当我通过平板电脑输入一些文本时,它们完全没有返回任何东西。
我需要访问当用户输入一段文本时创建的字符串。有什么建议怎么做吗?
发布于 2018-08-08 13:56:57
您可以为平板电脑创建一个网页并将其打包到您的应用程序中-参见documentation here;然后您可以在该网页上创建一个文本输入字段(注意,当该字段被选中时,屏幕的下半部分将被键盘隐藏),然后使用the javascript SDK (例如)使用输入的文本值引发一个ALMemory事件,然后您可以从Choregraphe获取该事件。
发布于 2018-08-15 20:09:13
我在没有使用ALTabletService
方法showInputTextDialog
或onInputText
的情况下意识到了这一点
我的方法是:我制作了一个html页面,其中包含一个输入字段和一个发送输入的按钮。在按下按钮时,我通过QiMessaging Javascript库使用来自ALDialog
doc的forceInput
方法。doc
我现在不能测试它,但这应该会有帮助,作为一个灵感
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-30 00:23:30
我遇到了完全相同的问题,我在signal list中找到了这个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)
https://stackoverflow.com/questions/51723239
复制相似问题