使用NAOqi通过ALProxy访问虚拟NAO机器人时出现Socket未连接错误
问题重现
开发对接NAO机器人的Python API,在Choregraphe虚拟机器人上测试,24小时前程序突然失效:执行foo = ALProxy(ALfunction, ip, port)后调用foo.do(),抛出错误:
RuntimeError: ALfunction::do
Socket is not connected
实际示例代码:
def sayText(args, ip, port): tts = ALProxy("ALTextToSpeech", ip, port) print(str(args[0])) tts.say(str(args[0]))
运行时报错:
File "C:\Python27\lib\site-packages\naoqi.py", line 371, in method_missing
raise e
RuntimeError: ALTextToSpeech::say
Socket is not connected
此前用PC开发正常,笔记本从一开始就有此问题,排除防火墙设置原因。
排查及解决方法
核对虚拟机器人的IP与端口
Choregraphe虚拟机器人默认监听127.0.0.1:9559,确认代码中传入的ip和port参数与Choregraphe右上角显示的连接信息完全一致。可以先硬编码"127.0.0.1"和9559进行测试,排除参数传递错误。重启虚拟机器人服务
Choregraphe虚拟机器人的NAOqi进程可能出现异常,导致端口未正常监听。关闭Choregraphe及所有相关后台进程,重新启动虚拟机器人,等待1-2分钟让服务完全初始化后再执行代码。匹配Python SDK与Choregraphe版本
你使用的是Python2.7,需确保安装的naoqi.py版本与当前使用的Choregraphe版本完全兼容。版本不匹配会导致通信协议不兼容,卸载现有naoqi库,重新安装对应版本的NAO机器人Python SDK。排查网络接口冲突
笔记本多网络接口(有线、无线、虚拟网卡)可能导致连接请求路由异常。禁用多余的网络接口,仅保留本地回环接口,确保程序连接请求发送到127.0.0.1。检查端口占用情况
用Windows命令行执行netstat -ano | findstr :9559,查看9559端口是否被其他进程占用。若有占用,结束对应进程或在Choregraphe中修改虚拟机器人的监听端口。
测试代码示例
def sayText(args): # 硬编码正确的本地地址和端口 tts = ALProxy("ALTextToSpeech", "127.0.0.1", 9559) print(str(args[0])) tts.say(str(args[0]))
内容的提问来源于stack exchange,提问作者Rrrrr

