ROS2话题入门
写在前面
- 当前平台文章汇总地址:ROS2机器人从入门到实战
- 获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取
- 教程配套机器人开发平台:两驱版| 四驱版
- 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn
话题是ROS2中最常用的通信方式之一,话题通信采取的是订阅发布模型。
1.订阅发布模型
一个节点发布数据到某个话题上,另外一个节点就可以通过订阅话题拿到数据。
除了上述这种一个节点发布,一个节点接受的形式外,ROS2话题通信其实还可以是1对n
,n对1
,n对n
的。
1对n
n对1(同一个话题可以有多个发布者)
n对n
还有一种就是ROS2节点可以订阅本身发布的话题
2. 消息接口
为了方便发送者和接收者进行数据的交换,ROS2帮我们在数据传递时做好了消息的序列化和反序列化(有关消息序列化相关内容请参考本章基础篇),而且ROS2的消息序列化与反序列化通信是可以做到跨编程语言、跨平台和跨设备之间的。
ROS2如何做到跨编程语言、跨平台和跨设备之间的数据收发呢?这就得益于通过定义消息接口文件了。
因为跨平台和设备实现较为复杂,小鱼这里简单说一下如何实现跨语言的。当我们定义好消息接口后,ROS2会根据消息接口内容生成不同语言的接口类,在不同编程语言中调用相同的类即可实现无感的消息序列化和反序列化。
通过对消息接口介绍,相信你肯定能猜到这样一条规则:同一个话题,所有的发布者和接收者必须使用相同消息接口。
3. ROS2话题工具
3.1 GUI工具
3.1.1 RQT工具之rqt_graph
ROS2作为一个强大的工具,在运行过程中,我们是可以通过命令来看到节点和节点之间的数据关系的。
运行我们第二章中的你说我听小demo。依次打开三个终端,分别输入下面三个命令。
ros2 run demo_nodes_py listener
ros2 run demo_nodes_cpp talker
rqt_graph
你将看到下面这张图
你可以尝试改变菜单栏的Hide或者Group选项,看一看下面图的变化,感受一下rqt_graph工具的强大。
这是一个很重要的工具,小鱼在学习和使用ROS2的过程中经常会用到它,来看一看数据到底是怎么走的,它可以帮我们搞清楚一个节点的输入和输出是什么。
3.2 CLI工具
还记得上一章的ros2 node指令吗?ros2也支持很多强大的topic指令。可以使用下面的指令查看。
ros2 topic -h
本着学以致用的目的,小鱼先对比较常用的几个命令进行介绍,其他的我们用到的时候小鱼再介绍(现在介绍反而不好理解)。
3.2.1 ros2 topic list 返回系统中当前活动的所有主题的列表
命令
ros2 topic list
结果
3.2.2 ros2 topic list -t 增加消息类型
命令
ros2 topic list -t
结果
3.2.3 ros2 topic echo <topic_name> 打印实时话题内容
命令
ros2 topic echo /chatter
结果
3.2,4 ros2 topic info <topic_name> 查看主题信息
命令
ros2 topic info /chatter
结果
3.2.5 ros2 interface show 查看消息类型
上面一个指令告诉大家这个消息是std_msgs/msg/String,那String里面有什么呢?不妨来试一试。
命令
ros2 interface show std_msgs/msg/String
结果
3.2.6 ros2 topic pub <topic_name> <msg_type> arg 手动发布命令
关闭发布者,我们受到来发布
命令
ros2 topic pub /chatter std_msgs/msg/String 'data: "123"'
结果
4.最后
了解完话题,下一节小鱼就会带大家来动手写一写话题通信代码。文章来源:https://www.toymoban.com/news/detail-761176.html
参考链接:Understanding ROS 2 topics — ROS 2 Documentation: Humble documentation文章来源地址https://www.toymoban.com/news/detail-761176.html
到了这里,关于【ROS2机器人入门到实战】ROS2话题入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!