【ROS2指南-21】测试ROS2跨机通信

【背景了解】

众所周知,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,机器人)