第3章 订阅和发布--话题通信探索(学习笔记)(未完成)
记得我刚开始做“鱼香 ROS”公众号的时候没有人关注,自己就经常推荐朋友订阅我的公众号,我也会每天发布技术相关的文章、图片或视频,推送给我的订阅者。
和公众号类似的订阅-发布机制用途非常广泛,比如在物联网等领域中常用到的 MQTT协议也是一种基于订阅和发布的通信协议。
在机器人的世界中,为了能够感知环境信息和执行动作,往往装载了很多传感器和执行器,常见的传感器有摄像头、雷达和惯性测量单元等,常见的执行器有各种类型的底盘、机械臂关节电动机和电动夹爪等。为了方便各类传感器和执行器数据在机器人系统中传递,ROS 2 也引入了一套订阅发布机制,即话题通信。本章将针对话题通信进行详细的讲解。
3.1 话题通信介绍
ROS 2 的话题机制有四个关键点,分别是发布者、订阅者、话题名称和话题类型。如图3-1 所示,发布者相当于公众号的作者,订阅者则是读者,话题名称相当于公众号名字,消息接口则相当于公众号的内容类型。
小鱼(发布节点) 话题名称(鱼香 ROS)消息接口(图文/视频) 读者(订阅节点)

图 3-1 话题机制与公众号类比
在第 1 章运行海龟模拟器和键盘控制节点时,我们通过 rqt工具看到,节点之间通过订阅和发布同名的话题来传输控制指令,但当时并未详细介绍。
下面继续以海龟模拟器为例,进一步讲解话题通信。
打开终端,输入代码清单 3-1 中的命令,打开海龟模拟器。
代码清单 3-1 打开海龟模拟器 $ ros2 run turtlesim turtlesim_node --- Warning: Ignoring XDG SESSION TYPE-wayland on Gnome. Use QT QPA PLATPORM-waylandl to run on Wayland anyway. [INFO] [1681383588.540304114] [turtlesim]: Starting turtlesim with node name / turtlesim [INFO] [1681383588.548572512] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
打开后,使用命令行来查看 turtlesim 节点的信息,打开新的终端,输入代码清单 3-2 中的指令。 代码清单 3-2 使用命令行查看节点信息
$ ros2 node info /turtlesim /turtlesim Subscribers: /parameter_events: rcl_interfaces/msg/ParameterEvent /turtlel/cmd_vel: geometry_msgs/msg/Twist Publishers: /parameter_events: rcl_interfaces/msg/ParameterEvent /rosout: rcl_interfaces/msg/Log /turtlel/color_sensor: turtlesim/msg/Color /turtlel/pose: turtlesim/msg/Pose
...
ros2 node info 指令用于查看节点的详细信息,其中 Subscribers 部分是 /turtlesim 节点订阅的所有话题,可以看出该节点订阅了名为/turtlel/cmd_vel的话题,用于接收控制指令,它的消息接口是geometry_msgs/msg/Twist。 Publishers部分下是该节点发布的所有话题,需要关注的话题是/turtlel/pose,该话题用于发布当前海龟的位置和速度,它的消息接口是turtlesim/msg/Pose,对于话题下面的服务和置动作相关的信息,这里先忽略。尝试使用命令订阅/turtlel/pose,实时输出海龟当前的位姿,在任意终端输入代码清单3-3中的命令。 代码清单3-3 输出海龟当前的位姿
https://gitee.com/powes/,作者:前沿风暴,转载请注明原文链接:https://www.cnblogs.com/Kreos/p/19490528
浙公网安备 33010602011771号