ROS2通信机制的简介、话题通信的实现、rqt计算图
需求:以固定频率发布学生信息功能包cpp01_topic的src目录下,新建C++文件demo03_talker_stu.cpp源码:注意CMakeLists需要修改然后还是编译,运行,这里就不再演示!需求:订阅发布方发布的学生消息,并输出到终端。功能包cpp01_topic的src目录下,新建C++文件demo04_listener_stu.cpp源码:然后还是编译,运行,这里就不再演示!注意C
文章目录
一、通信机制
1.节点
在通信时,不论采用何种方式,通信对象的构建都依赖于节点(Node),在ROS2中,一般情况下每个节点都对应某一单一的功能模块(例如:雷达驱动节点可能负责发布雷达消息,摄像头驱动节点可能负责发布图像消息)。一个完整的机器人系统可能由许多协同工作的节点组成,ROS2中的单个可执行文件(C++程序或Python程序)可以包含一个或多个节点。
2.话题
话题(Topic)是一个纽带,具有相同话题的节点可以关联在一起,而这正是通信的前提。并且ROS2是跨语言的,有的节点可能是使用C++实现,有的节点可能是使用Python实现的,但是只要二者使用了相同的话题,就可以实现数据的交互。
3.四种通信模型
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

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