快速理解ROS2通信

 

在一个庞大的机器人系统中,通信是基础,是重中之重。如果连各个模板之间的通信概念都含糊不清,不能融会贯通。那么,对机器人的开发也会捉襟见肘。

本文将会介绍ROS2中的通信基础概念和模型,包括节点、话题、服务、动作

 

1. ROS2节点

ROS2节点,从本质上来说是一个可执行文件(C++或者Python)。它利用ROS2的通信网络能与其他节点进行通信(数据交互)。ROS中每一个节点应该负责一个单一的,模块化的用途(例如:一个节点用于控制电机,一个节点用于控制激光雷达),每个节点都可以通过主题、服务、动作或者参数向其他节点发送和接受数据。一个完整的机器人系统由许多协同工作的节点组成。如图1所示:

 

快速理解ROS2通信 图1

 

2. ROS2话题

ROS2将复杂的系统分解成许多模块化的节点,话题(Topic)是ROS2通信中的重要元素,充当节点交换信息的总线,如图2所示。

 

快速理解ROS2通信 图2

 

当然,一个节点可以向任意数量的主题发布数据并同时订阅任意数量的主题。因为在ROS2中,应用层方面,去中心化master后,所有的节点都是同一个级别。即可以实现一对多,多对一,多对多的通信模式。如图3所示。

 

快速理解ROS2通信 图3

 

话题是数据在节点之间通信的主要方式之一,因此可以在系统的不同部分之间进行流动。

 

3. ROS2服务
服务(Server)在ROS2的通信网络中,是节点的另一种通信方式。服务通信是基于C/S模型。而不是话题通信中的发布/订阅模型。服务仅仅在客户端调用时才提供。

图4展示了一对一的服务通信模型,图5展示了一对多的服务通信模型。

快速理解ROS2通信 图4 快速理解ROS2通信 图5

 

4. ROS2动作

动作通信是ROS2中的一种通信类型。用于长时间运行的任务。主要由三个部分组成:目标(goal)、反馈(feedback)、结果(result)。动作通信建立在话题和服务之上。类似与服务的C/S通信模型,但是不同之处在于,客户端可以随时取消动作。动作还提供稳定的反馈,而不是返回单一响应的服务。如图6所示。

 

快速理解ROS2通信 图6

结语

知其然,知其所以然。虽然ROS2的通信在底层做了修改,但是基础概念仍然沿用ROS1。因此,本文所提到的ROS2通信模型也适用于ROS1,可以帮助大家快速理解ROS的通信模型。

 

- End -

技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

上一篇:ROS2的C++包


下一篇:大学生因疫情被封宿舍,无聊?那就刷几道链表的算法题解解闷儿---Java实现