ROS话题 消息通讯机制

ROS节点间通过话题通信流程简图

在这里插入图片描述

通过示例理解话题及其命令行工具

我们继续接着前面的示例来深入理解一下什么是话题,由于前面的三个软件包都是发布者,我们需要酌情修改一 下,然后增加一个订阅者节点,这样就能真实的感受到ROS中节点如何通过话题进行通信了
在这里插入图片描述
接下来修改一下third_pkg软件包,由于最初的代码编写时发送的话题类型为字符串,这里我们需要将其修改为整 型,这样方便我们后面使用rqt_plot画图软件将话题数据可视化演示,在这里我们修改如下:

  • 将默认的话题类型从String修改为Int32;
  • 将话题名称从third_pkg修改为third_pkg_topic,方便我们与节点third_pkg区别开;
  • 将发送话题的频率从10Hz改为2Hz,500ms发送一次
  • 话题中的数据内容从0到4循环发送,这样方便我们查看动态发布过程
修改third_pkg.cpp源码文件

在这里插入图片描述

修改subscribe.cpp 源码文件

在这里插入图片描述

修改的配置文件

在这里插入图片描述

修改third_pkg的launch文件,增加启动subscribe_pkg_node

在这里插入图片描述

当编译工作空间完成后,通过执行third_pkg.launch文件查看运行后的效果

执行命令:roslaunch third_pkg third_pkg.launch
在这里插入图片描述

接下来通过rqt_graph来查看当前ROS系统中运行的节点及其直接话题通信概览图,直接在终端中输入rqt_graph即可启动该工具

在这里插入图片描述

rostopic命令工具使用

在这里插入图片描述

  • rostopic echo 可以显示在某个话题上发布的数据
    在这里插入图片描述
    rostopic echo是在终端命令行中显示节点的log信息,在ROS中还有一个可视化界面rqt_console也可以显示各节点的log信息,直接在终端中输入rqt_console即可启动该软件:
    在这里插入图片描述

  • rostopic hz命令可以用来查看话题数据发布的频率
    在这里插入图片描述

  • rostopic info命令可以查看当前话题的消息类型及订阅和发布者信息
    在这里插入图片描述

  • rostopic list能够列出所有当前订阅和发布的话题
    在这里插入图片描述

  • rostopic pub可以把数据发布到当前某个正在广播的话题上,该命令用法如下: rostopic pub [topic] [msg_type] [args]
    在这里插入图片描述
    如果要想周期性的往话题中发布消息可以添加-r选项
    在这里插入图片描述

  • 使用rqt_plot工具使话题数据实时显示可视化
    在这里插入图片描述

理解topic的发布和订阅机制
解析发布者publisher节点代码

在这里插入图片描述

解析订阅者subscriber节点代码

在这里插入图片描述

理解ROS的自定义消息msg
了解msg的基本概念

msg文件:是一个描述ROS中所使用消息类型的简单文本,它们会被用来生成不同语言的源代码。
msg文件存放在软件包的msg目录下,msg文件实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:

  • int8, int16, int32, int64 (plus uint*)
  • float32, float64
  • string
  • time, duration
  • other msg files
  • variable-length array[] and fixed-length array[C]
rosmsg命令行工具

在这里插入图片描述

  • rosmsg list:列出当前ros系统中所有的消息格式,通过wc可以统计共有多少条消息
    在这里插入图片描述
    在这里插入图片描述
  • rosmsg show:显示出消息的定义格式
    在这里插入图片描述
    下图中,linearangular 都是复合域,其数据类型是 geometry_msgs/Vector3
    一个复合域是由简单的一个或多个子域组合而 成,其中的每一个子域可能是另一个复合域或者独立的域,而且它们也都由基本数据类型组成
    在这里插入图片描述
通过示例来理解如何创建和使用msg

现在我们来创建一个自定义的消息来演示整个过程如何操作:

首先来创建目录来存放我们将要创建的msg文件

在这里插入图片描述

接下来要确保msg文件被转换成为C++,Python和其他语言的源代码,要修改package.xml和CMakeLists.txt

在这里插入图片描述
在这里插入图片描述
在 CMakeLists.txt文件中,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了。 你可以直接在COMPONENTS的列表里增message_generation

然后就可以先将刚才添加的消息编译,然后查看ROS是否已经可以识别我们添加的自定义消息, 编译过程跟编译软件包相同,仍然是catkin_make编译整个工作空间,当编译成功后开始利用学到的rosmsg list查看有没有我们的消息

编译完成后记得执行source devel/setup.bash,使环境变量生效
在这里插入图片描述

当系统可以识别我们自定义的消息后,就可以开始修改测试代码了,往话题中发布我们自定义格式的消息

在这里插入图片描述

修改订阅者的代码,修改接收话题的数据格式

在这里插入图片描述

修改package.xml和CMakeLists.txt文件

在这里插入图片描述

编译代码,查看效果

在这里插入图片描述

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值