一、通信机制

1.节点

在通信时,不论采用何种方式,通信对象的构建都依赖于节点(Node),在ROS2中,一般情况下每个节点都对应某一单一的功能模块(例如:雷达驱动节点可能负责发布雷达消息,摄像头驱动节点可能负责发布图像消息)。一个完整的机器人系统可能由许多协同工作的节点组成,ROS2中的单个可执行文件(C++程序或Python程序)可以包含一个或多个节点。

2.话题

话题(Topic)是一个纽带,具有相同话题的节点可以关联在一起,而这正是通信的前提。并且ROS2是跨语言的,有的节点可能是使用C++实现,有的节点可能是使用Python实现的,但是只要二者使用了相同的话题,就可以实现数据的交互。

3.四种通信模型

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

4.接口文件

在通信过程中,需要传输数据,就必然涉及到数据载体,也即要以特定格式传输数据。在ROS2中,数据载体称之为接口(interfaces)。通信时使用的数据载体一般需要使用接口文件定义。常用的接口文件有三种:msg文件、srv文件与action文件。每种文件都可以按照一定格式定义特定数据类型的“变量”。
在这里插入图片描述

二、通信实现的准备工作

还是创建工作空间:
在这里插入图片描述

三、话题通信的实现

1.话题通信原生消息

1.1 原生消息发布方的实现

前面的工作空间和功能包创建好之后,我们进入工作空间的src目录下,再新建一个C++的功能包,以供话题通信。
在这里插入图片描述

需求:以某个固定频率发送文本"hello world",文本后缀编号,没发送一条消息,编号递增1.
源码:
在这里插入图片描述

然后编译,结果如下:
原生消息发布方的实现就完成了!!!!!
在这里插入图片描述
这样并不能说明我们的消息发布成功,我们需要进一步验证
//3-1后面:我们的话题是topic
另开一个终端,使用ros2 topic echo /topic
如果有数据和左边对应,那么才说明我们发布消息没有问题!
在这里插入图片描述

1.2 原生消息订阅方的实现

功能包cpp01_topic的src目录下,新建C++文件demo02_listener_str.cpp

需求:需求:订阅发布方发布的消息,并输出到终端。
源码:
在这里插入图片描述
要注意的是,我们还需要修改CMakeLists
在这里插入图片描述

然后就可以编译了
在这里插入图片描述

2.话题同学自定义接口消息

2.1 准备工作

在这里插入图片描述

2.2 自定义接口消息发布方的实现

需求:以固定频率发布学生信息

功能包cpp01_topic的src目录下,新建C++文件demo03_talker_stu.cpp
源码:
在这里插入图片描述
注意CMakeLists需要修改
在这里插入图片描述

然后还是编译,运行,这里就不再演示!

在这里插入图片描述

2.3 自定义接口消息订阅方的实现

需求:订阅发布方发布的学生消息,并输出到终端。

功能包cpp01_topic的src目录下,新建C++文件demo04_listener_stu.cpp
源码:
在这里插入图片描述
然后还是编译,运行,这里就不再演示!
注意CMakeLists需要修改
在这里插入图片描述
运行结果:
在这里插入图片描述

四、rqt查看计算图

我们先让发布方和订阅方都跑起来
在这里插入图片描述
使用rqt
在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐