ROS2多机通讯,基于两台VM虚拟机的多机通讯,通讯失败解决办法(适用于多台虚拟机或物理机间的互PING)

1、问题描述

在两台电脑上部署vm虚拟机,且在虚拟机Ubuntu中安装ROS2,两台电脑位于同一个局域网下。在ROS2中,理想情况是,多个机器上的不同节点只要在同一个ROS_DOMAIN_ID、同一个局域网下,既可以进行多机通讯,即在设备1上运行节点,在设备2上的命令行输入如下指令即可查看运行于设备1中的节点名称。

ros2 node list

然而在我的实验中却没生效,我几乎尝试了能想到的、网上能找到的所有方法,废了好大的功夫,最终成功解决问题。如果你也有同样的问题,那么这篇文章可能会帮助到你。

2、预备知识

如果你是计算机专业的,或学习过计算机网络相关知识,那你的知识储备是够用的。如果你像我一样,是传统工科专业,没有系统学习过相关知识,那么你需要先了解一下IP地址、子网掩码、组播等相关概念,以及vm虚拟机网络的桥接、NAT等模式代表的含义。最基本的还有命令行中的ping命令。

3、解决方法

基础要求:关闭win防火墙,并在 “网络和internet->状态->高级网络设置->网络和共享中心->更改高级共享设置”中启用网络发现和打印机共享。
win网络设置

3.1 方法一:虚拟机网络连接采用桥接(对我有效的方法)

虚拟机默认的NAT模式,可以使虚拟机与主机共用IP,可以访问局域网的其他主机,但局域网的其他主机无法访问虚拟机,虽然可以调整,但较为麻烦就没有尝试。
而桥接模式,则相当于直接连接主机的物理端口,虚拟机使用独立的IP,虚拟机和主机在局域网中属于平级关系,而桥接的设置流程主要如下:

3.1.1 VMware 虚拟机设置选项中把模式选为桥接

桥接设置

3.1.2 桥接的端口设置为实际物理采用的端口

比如我电脑的采用的物理端口名称为“Realtek PCIe GBE …”

物理端口名称

player 版 vm,桥接端口选项就在桥接模式旁。
配置桥接端口

pro版则在上方“编辑->虚拟网络编辑器”中设置。

3.1.3 确保相应虚拟网卡开启桥接服务

如不确定,则可以全部开启。

虚拟网卡
开启桥接

3.1.4 打开虚拟机Ubuntu,配置静态IP

sudo ifconfig ens33 192.168.1.155 netmask 255.255.255.0

其中 ens33 为虚拟机网口名称,192.168.1.155是为虚拟机设置的静态IP,需要与局域网其他机器处于同一个网络段,255.255.255.0为子网掩码,需要根据实际情况调整,网口名称可用ifconfig命令查看。

ifconfig #该命令会显示相关网络信息

查看是否设置成功

3.1.5 重启网络

sudo service network-manager restart

3.1.6 检查网络

ping 192.168.1.160#主机IP
ping 192.168.1.170#另一台虚拟机的IP,当然另一台虚拟机也要如上设置

3.1.7 运行节点并查看

此时,在一台设备上运行节点,在另外一台设备上即可查看

ros2 topic list

3.1.8 注意事项

上述设置的静态IP是临时的,重启虚拟机后将失效,如果想永久设置,则在临时设置的基础上,打开Ubuntu网络设置,将当前连接设置成自动连接。

Ubuntu设置
网络设置
设置自动连接

3.2 方法二:开启路由多播功能(其他情况可能有用的方法)

ros2的多机通讯需要开启多播功能,但有一些系统没有默认开启,官方提供解决办法,这里提供了截图和链接。
官方解决方法连接
开启多播

3.3 多播测试

可以通过多播测试,对ros2的多机通信进行测试,并检测多播是否有效。在一台设备上开启接收:

ros2 multicast reiceve

在令一台设备上发送:

ros2 multicast send

如果接收端收到信息,则代表网络通讯没有问题。

4 总结

ros2学习坑很多,还得慢慢踩。。。。。。

5 补充更新

在方法一中,设置完桥接之后,虽然虚拟机和其他机器可以相互PING通,但是却无法上网,那么有没有一种方法,可以在此基础上实现虚拟机的上网呢? 答案是肯定的,而且十分简单。
如图,在虚拟机设置中,添加一个新的网络适配器,并将新的网络适配器设置成NAT模式即可。
在这里插入图片描述

  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值