在实现ROS的topic通信时,正常运行roscore,但在运行发布消息的程序时,出现如下报错:
Unable to register with master node [https://<主机ip地址>:11311 ]: master may not be running yet. Will keep trying.
首先,确保roscore是正确运行的:
roscore
应当出现类似如下的信息:
... logging to /home/your_username/.ros/log/.../roslaunch-...log
started with pid [...]
ros_comm version 1.14.13
SUMMARY
========
PARAMETERS
* /rosdistro: kinetic
* /rosversion: 1.14.13
NODES
auto-starting new master
process[master]: started with pid [...]
process[rosout-1]: started with pid [...]
如果是正常的,接下来排查网络配置问题,ROS 节点和主节点之间的网络通信可能存在问题,或者 ROS 的环境变量配置不正确,输入:
echo $ROS_MASTER_URI
如果输出ip不正确,输入:
export ROS_MASTER_URI=http://<主机ip>:11311
export ROS_HOSTNAME=<本机ip>
注意,一般
如果没有解决,可能是网络配置问题,尝试ping一下主机ip:
ping <主机ip>
如果可以ping通,看看是否有程序占用11311端口:
netstat -tuln | grep 11311
如果有,关闭进程:
fuser -k 11311/tcp
确保允许11311端口的通信:
sudo ufw allow 11311
确保机器能够访问到主机IP,并尝试连接到端口11311:
telnet 192.168.220.128 11311
检查终端环境配置:
# version替换为实际ROS版本,如melodic、noetic
source /opt/ros/<version>/setup.bash
使用以下命令查看节点是否注册:
rosnode list
也可以查看日志文件:
tail -f ~/.ros/log/*
如果出现“SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number
”,表明在尝试建立 SSL 连接时出现了版本不匹配的问题。检查ROS主节点使用的通信协议:确保 roscore
使用的是 HTTP 协议,默认情况下 ROS 使用 HTTP 协议进行通信,此时,确保你的 ROS 节点代码中没有错误地配置 HTTPS 协议。