我可以在 NAOqi 2.9 (QiSDK) 机器人 (Pepper) 上使用 NAOqi 2.5 (C++/Python SDK) 功能吗?

Can I use NAOqi 2.5 (C++/Python SDK) features on a NAOqi 2.9 (QiSDK) robot (Pepper)?

我有 Pepper 机器人 运行ning NAOqi 2.9,它打算在 Android 平板电脑上使用 QiSDK。一切进展顺利,但照片捕获速度出奇地慢(最多 2 fps),因此我必须使用适用于 NAOqi 2.5 的 C++(或 Python)SDK 来完成此特定任务。

几天来我一直在努力让它工作,但没有成功。我已经设置了 C++ 和 Python SDK up 和 运行ning,但我面临的问题是与机器人的连接。

我运行在官方网站上找到了下面的简单代码(使用机器人的IP)here

from naoqi import ALProxy
tts = ALProxy("ALTextToSpeech", "<IP of your robot>", 9559)
tts.say("Hello, world!")

我得到以下输出流 after the second line

运行在 Ubuntu 上使用 C++ 或在 Windows 上使用 Python 出现连接问题。

我可以通过 SSH、FTP、Android Studio 中的 QiSDK 连接到机器人,但不能通过适用于 C++ 的 NAOqi 2.5 SDK 或 Python 以任何方式连接到机器人。由于 QiSDK 很可能是在 C++ SDK 之上构建的,因此肯定有一种方法可以使它工作。

任何信息都会有不可估量的帮助。

据我所知,在NAOqi 2.5中,平板电脑(JavaScript)和机器人的“大脑”(Choregraphe即Python / C++)是两个独立的设备,必须相互沟通和合作。在 NAOqi 2.9 中,“大脑”被移到了平板电脑上,Pepper 的唯一编程方式是使用 Android Studio。

在Pepper NAOqi 2.9 (https://www.softbankrobotics.com/emea/en/support/pepper-naoqi-2-9/downloads-softwares)的下载页面上,有关于Python SDK的评论:

This is for old NAOqi 2.5.10 and NAOqi 2.5.5.

下面是针对 NAOqi 2.9 / Pepper SDK 插件 [针对 Android Studio] 的声明:

This is all you need for Pepper NAOqi 2.9.

因此,根据 Softbank Robotics 的文档,使用 Python / C++ 编写 NAOqi 2.9 Pepper 是不可能的。

我希望这些信息能回答您的问题。

编辑

还有一种方法,你可以使用Pepper head 中的qi Python 库来使用服务,例如ALTextToSpeech 或ALMotion,有一个简单的例子here。也可以只使用 SSH 来启动 Python 服务器,这将允许通过端点访问这些功能。

import qi

app = qi.Application()
app.start()
session = app.session
tts = session.service("ALTextToSpeech")
tts.say("Hello Word")

如果您 运行 Pepper 脑袋中的上述代码片段,它会产生预期的输出(说 Hello world)。几乎所有服务都记录在案 here。您还可以通过在会话对象

上调用 .services() 来列出它们

编辑结束

我终于找到了破解它的方法。如果您通过 SSH 连接到机器人,您可以使用 qicli 二进制文件。它的文档是 here

qicli info 列出所有可用的服务,例如 ALVideoDevice 或 ALMotion

qicli info ALMotion 显示该服务的可用方法

qicli info ALMotion.setAngles 显示有关该方法参数的信息

qicli call ALMotion.setAngles HeadYaw 0.7 0.3 使用给定参数调用模块中的函数

所以可以为这个二进制文件编写一个包装器并通过 SSH 以编程方式调用它,对于这类任务似乎需要做很多工作,但我还没有找到其他任何东西。

我有 Python 的 Paramiko 库可以使用:

<pre><code>import paramiko client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname='ip-of-robot', username='nao', password='your-pass') stdin, stdout, stderr = client.exec_command('pwd') print(stdout.read()) client.exec_command('qicli call ALMotion.setAngles HeadYaw -0.7 0.2') client.close()

我也试过 .NET 的 SSH.NET 库,但收效甚微。