使用 QiSDK 从 Pepper 上的 Android 应用获取 Pepper 的 IP,NAOqi 2.9
Get Pepper's IP using QiSDK from Android app on Pepper, NAOqi 2.9
我有 Pepper 机器人 运行 NAOqi 2.9,这是使用 QiSDK 为其平板电脑创建 Android 应用程序的版本。
我目前必须在我的 Android 应用程序中获取 Pepper 的 head 的 IP,这可以通过手动输入轻松实现,但我想知道是否有以编程方式执行此操作的方法,因为平板电脑知道头部的 IP,因此始终将其与平板电脑的 IP 一起显示在通知栏中。
在 Connecting to a real robot 的第 5 步,他们说您可以手动执行此操作。
How to find the IP address?
On the tablet of the robot, display the notifications (swipe down from the top of the screen) and look for the following logo:
但这只是入门页面。我也查看了 Javadocs of the qisdk api 但没有找到与头部 IP 相关的任何内容。
我想知道是否有人知道我可以这样做的方法,不一定使用 QiSDK,因为它似乎不支持这个。
这不是最直接的解决方案,但您可以通过 SSH 从平板电脑访问主机,因为主机通过 USB 连接到平板电脑并且具有静态 IP 地址 192.168.100.80
。然后你可以使用 ifconfig
.
获取头部的IP地址
为了在 Java 中做到这一点,我使用了 JSch,但是任何 java SSH 实现都应该没问题。
正在安装 JSch
从 here 下载 jsch-0.1.55.jar。在您的应用程序目录中创建一个新文件夹 libs
并将 jar 保存在其中。然后将以下内容添加到您的 build.gradle 下的 dependencies:
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
}
获取IP地址的命令
多亏了this answer,你可以对ifconfig
输出做一些处理,得到Pepper头在wifi网络上的IP地址。
注意:目前我无法在物理 Pepper 上对此进行测试,因此请先通过 SSH 连接到 Pepper 并使用 运行 命令来进行检查。主要检查wlan0
是网络设备的正确名称。
ifconfig wlan0 | grep 'inet addr' | cut -d ':' -f 2 | cut -d ' ' -f 1
运行 这个命令在 Java
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.io.InputStream;
// Create SSH session
jsch = new JSch();
session = jsch.getSession("nao", "192.168.100.80", 22);
session.setPassword("nao");
// Avoid asking for key confirmation
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);
String command = "ifconfig wlan0 | grep 'inet addr' | cut -d ':' -f 2 | cut -d ' ' -f 1";
session.connect();
ChannelExec channelssh = (ChannelExec)session.openChannel("exec");
channelssh.setCommand(command);
InputStream stdout = channelssh.getInputStream();
// Execute command
channelssh.connect();
// Get output
StringBuilder output = new StringBuilder();
int bytesRead = input.read();
while (bytesRead != -1) {
output.append((char) bytesRead);
bytesRead = input.read();
}
// close SSH channel
channelssh.disconnect();
// Here's the IP address of the head, formatted as a string
String headIP = output.toString();
我有 Pepper 机器人 运行 NAOqi 2.9,这是使用 QiSDK 为其平板电脑创建 Android 应用程序的版本。
我目前必须在我的 Android 应用程序中获取 Pepper 的 head 的 IP,这可以通过手动输入轻松实现,但我想知道是否有以编程方式执行此操作的方法,因为平板电脑知道头部的 IP,因此始终将其与平板电脑的 IP 一起显示在通知栏中。
在 Connecting to a real robot 的第 5 步,他们说您可以手动执行此操作。
How to find the IP address?
On the tablet of the robot, display the notifications (swipe down from the top of the screen) and look for the following logo:
但这只是入门页面。我也查看了 Javadocs of the qisdk api 但没有找到与头部 IP 相关的任何内容。
我想知道是否有人知道我可以这样做的方法,不一定使用 QiSDK,因为它似乎不支持这个。
这不是最直接的解决方案,但您可以通过 SSH 从平板电脑访问主机,因为主机通过 USB 连接到平板电脑并且具有静态 IP 地址 192.168.100.80
。然后你可以使用 ifconfig
.
为了在 Java 中做到这一点,我使用了 JSch,但是任何 java SSH 实现都应该没问题。
正在安装 JSch
从 here 下载 jsch-0.1.55.jar。在您的应用程序目录中创建一个新文件夹 libs
并将 jar 保存在其中。然后将以下内容添加到您的 build.gradle 下的 dependencies:
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
}
获取IP地址的命令
多亏了this answer,你可以对ifconfig
输出做一些处理,得到Pepper头在wifi网络上的IP地址。
注意:目前我无法在物理 Pepper 上对此进行测试,因此请先通过 SSH 连接到 Pepper 并使用 运行 命令来进行检查。主要检查wlan0
是网络设备的正确名称。
ifconfig wlan0 | grep 'inet addr' | cut -d ':' -f 2 | cut -d ' ' -f 1
运行 这个命令在 Java
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.io.InputStream;
// Create SSH session
jsch = new JSch();
session = jsch.getSession("nao", "192.168.100.80", 22);
session.setPassword("nao");
// Avoid asking for key confirmation
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
session.setConfig(prop);
String command = "ifconfig wlan0 | grep 'inet addr' | cut -d ':' -f 2 | cut -d ' ' -f 1";
session.connect();
ChannelExec channelssh = (ChannelExec)session.openChannel("exec");
channelssh.setCommand(command);
InputStream stdout = channelssh.getInputStream();
// Execute command
channelssh.connect();
// Get output
StringBuilder output = new StringBuilder();
int bytesRead = input.read();
while (bytesRead != -1) {
output.append((char) bytesRead);
bytesRead = input.read();
}
// close SSH channel
channelssh.disconnect();
// Here's the IP address of the head, formatted as a string
String headIP = output.toString();