【ROS2指南-21】测试ROS2跨机通信(多网卡多路由)

ROS2通过DDS中间件实现跨机通信,无需额外配置,只要在同一局域网内即可自动共享消息。通过设置不同的ROS_DOMAIN_ID可以控制终端间的消息互通。这种分布式架构在多机器人群体协同中展现出强大的灵活性和便利性。
摘要由CSDN通过智能技术生成

【背景了解】

众所周知,ROS1想要实现跨机通信,可以选择配置单Master或者多Master网络环境,但是不管哪种,用起来都繁琐且低效。现在升级ROS2了,当我们面临同样的跨机通信需求时,恭喜你,啥也不需要做,只要终端都在同一个局域网,他们的话题消息就是共享的!!

【测试准备】

根据你的ROS2版本,安装相应的测试包代码(这里以 foxy 为例)

sudo apt install ros-foxy-examples-rclpy-minimal-publisher

【测试方法】

在机器A上运行一个 发布者

 ros2 run examples_rclcpp_minimal_publisher publisher_member_function

在机器B上运行一个 订阅者

ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function

此时,你会惊奇的发现,他们仿佛在一台电脑上一样,已经实现了消息互通

【进阶知识】

那么,如果你不想让两个终端消息互通该怎么做呢?也是非常简单的!

在机器A的 ~/.bashrc 中添加

export ROS_DOMAIN_ID=1

在机器B的 ~/.bashrc 中添加

export ROS_DOMAIN_ID=2

此时,再分别打开终端,运行上面的测试程序,就会发现,消息断开了!

这是为什么呢?

原来 ROS2 跨机通信使用的是 DDS 中间件,而 DDS 依赖一个 DOMAIN_ID 作为终端区分的标识符,所以,当终端的 DOMAIN_ID 设置为不同的数字时(可选范围 0 ~ 101),他们便不能相互发现并进行通信了!

【分布式通信】

众所周知,ROS2是基于分布式架构通信设计的,也就是不依赖Master节点,这一点很重要!因为当我们的机器人群体同时携带多个网卡和多个路由的时候,就可以在不动上层代码的前提下,自动组成网络回环,进而形成一些比较酷的分布式群体协同策略!!!我不知道读者们是否明白这一点在分布式应用工程实现上带来的便利,我只能说我大受震撼!

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
ROS机器人操作系统)是一个用于开发机器人软件的框架,而STM32是一款常见的嵌入式微控制器。它们可以进行通信以实现机器人系统的控制和数据传输。 要实现ROS与STM32的通信,通常有两种方式:串口通信ROS网络通信。 一种常见的方式是通过串口连接ROS主机和STM32。ROS主机可以使用基于Linux系统的计算机,如Ubuntu等。使用ROS提供的串口通信库,可以在ROS主机上编写节点程序,通过串口与STM32进行数据交换。在ROS主机上,可以将STM32作为一个外设设备接入ROS系统,通过串口读取STM32发送的数据,并将ROS主机的控制指令发送给STM32。 另一种方式是通过ROS网络通信。在STM32上运行一个ROS节点,该节点通过TCP/IP协议与ROS主机上的其他ROS节点进行通信ROS节点可以通过STM32上的网卡或Wi-Fi模块连接到ROS主机所在的局域网。在ROS主机上,可以使用ROS提供的网络通信库与STM32节点进行通信,发送控制指令或接收传感器数据。 不论是串口通信还是网络通信ROS与STM32的通信都需要定义消息格式。可以根据具体的需求,定义自己的ROS消息类型,包括控制指令、传感器数据等。在ROS主机上,可以使用ROS消息库来解析和处理这些消息。 总之,通过串口通信ROS网络通信,可以实现ROS与STM32的通信,实现机器人系统的控制和数据传输。这种通信方式可以用于各种机器人应用,如无人车、机器人臂等。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值