ROS 节点 运行 但一些连接已断开

ROS nodes running but some connections are broken

设置

我是 运行 ROS 节点在两台不同的机器上(我的笔记本电脑,运行 ROS melodic 在 Ubuntu 18.04 和 voxl computer 运行 ROS yocto 上的动力学)。

问题

voxl 计算机运行 roscore。两个设备之间的通信很好。相应的 IP 设置正确(ROS_IPROS_MASTER_URI 在每个设备上相应地明确设置)。

然而,有些节点(只有少数!)虽然启动正常,但似乎未连接,roswtf 生成错误:

ERROR The following nodes should be connected but aren't:
 * /node_x -> /node_y
 * ...

在网上搜索时,导致此类错误的原因通常是DNS相关问题,但在这里,两台设备都已成功连接到网络并且大多数节点都可以正常运行,除了其中一些...

此外,杀死与 rosnode kill node_z 通信有问题的节点并单独用 rosrun package node_z 重新启动它可以使其再次正常通信。

roscore 相关问题?

此外,采用工作配置(多个节点在同一设备上交互,在同一台机器上使用 roscore)没问题,但是 运行 相同的配置,但是这次,roscore 开启另一台设备断开了某些连接。是什么导致了这种差异?

对发射序列的敏感度

似乎节点或启动文件的调用顺序有影响。

结论

我不确定是什么原因导致了这里的问题,也不知道在哪里可以解决问题...

好的,看来这种行为可能是由于防火墙造成的,在本例中是 ufw。我不知道防火墙已启用,因为有些节点可以通信而有些节点不能通信,所以我没想先检查一下。

要解决通信问题,我所要做的就是禁用防火墙:

sudo ufw disable

在那之后,所有节点都能够正常通信并且roswtf不再报告任何错误。

错误 The following nodes should be connected but aren't: 是由于防火墙阻止了 inbound/outbound 连接。当我想从 windows PC (Windows 10) 中的 MATLAB ROS 节点 运行 到 [= 中的主节点 (roscore) 运行 进行通信时,我遇到了类似的问题16=] 机器 (Ubuntu 18.04)。在允许 MATLAB 通过防火墙通过网络进行通信后,我终于能够完成它。