跨网络连接远程Pepper机器人:Choregraphe/Python脚本连接失败求助
解决Pepper机器人在受限网络下的Choregraphe/Python连接问题
你已经搞定了SSH连接,但Choregraphe和Python脚本连不上的核心问题在于Pepper的NaoQi服务依赖的9559端口可能未开放入站权限,且机器人无法主动发起出站连接(导致自动发现机制完全失效)。下面分两种场景给出具体解决方案:
一、Choregraphe连接方案
1. 手动指定IP+端口直接连接(优先尝试)
因为机器人出站被禁,Choregraphe默认的Bonjour自动发现功能完全失效,必须手动指定连接参数:
- 打开Choregraphe,点击顶部工具栏的「Connect」按钮,选择「Connect to a robot manually」
- 在弹出的窗口中,输入机器人的外部IP
222.222.222.222,端口填写9559(NaoQi服务的默认端口) - 点击「Connect」,如果机器人的防火墙已经允许你的IP(111.111.111.111)访问9559端口,应该就能成功连接。
2. SSH端口转发(如果直接连9559失败)
如果机器人的9559端口未开放,或者网络策略限制了该端口的直接访问,利用已有的SSH连接做端口转发是最可靠的办法:
- 在你的本地终端执行端口转发命令:
这个命令会把你本地的9559端口流量,通过SSH隧道转发到机器人的localhost:9559端口ssh -L 9559:localhost:9559 nao@222.222.222.222 - 保持这个SSH会话打开,然后在Choregraphe中选择手动连接,输入
localhost和端口9559即可连接到机器人。
二、Python脚本连接方案
Python的NaoQi库同样依赖9559端口,解决思路和Choregraphe一致:
1. 直接指定机器人IP连接(如果9559端口可访问)
确保你的脚本中使用正确的IP和端口:
from naoqi import ALProxy # 初始化代理,连接机器人的外部IP和9559端口 motion_proxy = ALProxy("ALMotion", "222.222.222.222", 9559) # 测试连接:让机器人动一下头部 motion_proxy.setAngles("HeadYaw", 0.5, 0.1)
2. 通过SSH端口转发连接(如果直接连失败)
先在本地终端执行和Choregraphe相同的端口转发命令:
ssh -L 9559:localhost:9559 nao@222.222.222.222
然后修改脚本中的连接地址为localhost:
from naoqi import ALProxy # 连接本地转发后的端口 motion_proxy = ALProxy("ALMotion", "localhost", 9559) motion_proxy.setAngles("HeadYaw", -0.5, 0.1)
关键前置检查
在尝试上述方案前,先通过SSH登录机器人完成以下检查:
- 确认NaoQi服务正在运行:执行
netstat -tulpn | grep 9559,如果能看到naoqi进程监听9559端口则正常;如果没有,执行sudo systemctl start naoqi(部分Pepper版本可能用qicli call ALSystem.launch "naoqi")启动服务。 - 开放9559端口的入站权限:
- 如果机器人用ufw防火墙:执行
ufw allow from 111.111.111.111 to any port 9559,然后ufw reload - 如果用iptables:执行
iptables -A INPUT -s 111.111.111.111 -p tcp --dport 9559 -j ACCEPT,然后iptables-save > /etc/iptables/rules.v4保存规则
- 如果机器人用ufw防火墙:执行
- 确认Choregraphe/naoqi版本匹配:执行
naoqi --version查看机器人的NaoQi版本,确保你本地的Choregraphe和Python naoqi库版本与之一致(版本不兼容会导致连接失败)。
内容的提问来源于stack exchange,提问作者dim
相关产品推荐
相关产品推荐

