4.1ROS2话题介绍.md 4.6 KB

4.1 ROS2话题介绍

你好,我是小鱼。你还记得ROS镇的故事吗?后来ROS2镇长来了之后,王二订报的方式也发生了改变,让我们一起来看看吧。

1.讲个故事

李四是一名擅长写小说的作家,王二是一名喜欢看小说且单身多年的单身狗。王二最喜欢看李四写的《艳娘传奇》这个小说。

所以王二(Node)出于对《艳娘传奇》(Topic)的兴趣,订阅了(Subscribe)李四(Node)发布(Publish)的小说。

2.话题介绍

看完上面的内容,我们来总结一下,上面其实讲了一下ROS2中Topic通信方式。Topic是一种发布订阅模型。

这里的王二和李四可以理解为两个节点,这两个节点可以在同一个功能包下,也可以在不同的功能包下。

李四节点会创建一个发布者(Publisher)来发布一个话题(艳娘传奇,小鱼取个英文名叫sexy_girl)。王二也是一个节点,他创建了一个订阅者(Subscriber)来订阅李四发布的话题sexy_girl。

那艳娘传奇的内容是什么呢?我们暂且规定为由文字组成的字符串(连插图都没的那种)。

graph LR
A[Node李四] --发布-->B[艳娘传奇]
B -- 订阅 --> C[Node王二]

李四王二通信模型是一个一对一(一个发布者,一个订阅者)的模型,除此之外ROS2中其实还可以是1对n,n对1,n对n的。

2.1话题通信有哪些需要注意的规则呢?

需要满足以下规则:

  • 话题名字是关键,订阅者必须知道话题的名称才能完成订阅;
  • 同一个人可以订阅多个话题,同时也可以发布多个话题,就像一本书的作者也可以是另外一本书的读者;
  • 同一个小说不能有多个作者(版权问题),但跟小说不一样,同一个话题可以有多个发布者。

3.topic工具

3.1 查看节点关系查看rqt_graph

ROS2作为一个强大的工具,在运行过程中,我们是可以通过命令来看到节点和节点之间的数据关系的。

运行我们第二章中的你说我听小程序。依次打开三个终端,分别输入下面三个命令。

ros2 run demo_nodes_py listener
ros2 run demo_nodes_cpp talker
rqt_graph

你将看到下面这张图

3.1.1 rqt_graph

你可以尝试改变菜单栏的选项,看一看下面图的变化,感受一下rqt_graph工具的强大。

这是一个很重要的工具,小鱼在学习和使用ROS2的过程中经常会用到它,来看一看数据到底是怎么走的,它可以帮我们搞清楚一个节点的输入和输出是什么。

3.2 ros2 topic 指令

还记得上一节的ros2 node指令吗?ros2也支持很多强大的topic指令。可以使用下面的指令查看。

ros2 topic -h

image-20210803114102048

这里小鱼先简单介绍一下,大家可以手动在终端输入这几个命令来一起尝试。

ros2 topic list 返回系统中当前活动的所有主题的列表

命令

ros2 topic list

结果

image-20210803114705943

ros2 topic list -t 增加消息类型

命令

ros2 topic list -t

结果

image-20210803114756448

ros2 topic echo 打印实时话题内容

命令

ros2 topic echo /chatter

结果

image-20210803115124591

ros2 topic info 查看主题信息

命令

ros2 topic info  /chatter

结果

image-20210803115320265

ros2 interface show 查看消息类型

上面一个指令告诉大家这个消息是std_msgs/msg/String,那String里面有什么呢?不妨来试一试。

命令

ros2 interface show std_msgs/msg/String

结果

image-20210803115726942

ros2 topic pub arg 手动发布命令

命令

ros2 topic pub /chatter std_msgs/msg/String 'data: "123"'

结果

image-20210803115906116

4.最后

如果大家想要了解更多的命令,可以到官网来看一看,下一节小鱼就会带大家来手动写Python版本的话题通信。


参考链接:Understanding ROS 2 topics — ROS 2 Documentation: Foxy documentation