ROS2入门教程—理解话题(Topic)

  • 1 启动小海龟仿真器
  • 2 rqt_graph
  • 3 ros2 topic list
  • 4 ros2 topic echo
  • 5 ros2 topic info
  • 6 ros2 interface show
  • 7 ros2 topic pub
  • 8 ros2 topic hz

  ros2将复杂系统分解为许多模块化节点,而这些节点之间则是通过一个至关重要的通道完成数据交换的,这个通道就是“话题”。

  一个节点可以通过多个话题向外发布数据,也可以同时订阅多个其他节点发布的话题,相当于话题是一个多对多的订阅/发布模型。

  可见,话题是节点之间实现数据传输的重要途径,也是机器人各个子系统之间交换数据的重要方式。

1 启动小海龟仿真器

  打开新终端并运行:

ros2 run turtlesim turtlesim_node

  打开另一个终端并运行:

ros2 run turtlesim turtle_teleop_key

2 rqt_graph

  rqt_graph这个工具,可以从上帝视角看到整个系统的状态。使用rqt_graph来可视化显示节点和话题的连接关系, 在一个新的终端中,输入:

rqt_graph

  可以看到一个新的界面,里边清晰的展示了ROS计算图的网络形态。

  根据上图可以看到相关的节点和话题,先忽略图中的action。如果将鼠标悬停在最下面的topic上,您将看到如上图所示的颜色高亮显示。话题/turtle1/cmd_vel的发布者是/teleop_turtle节点,而订阅者是/turtlesim节点,这个话题中传输的数据就是我们按下键盘之后形成的速度指令。在更加复杂的机器人系统中,rqt_graph工具可以帮助我们快速理清节点之间通过话题的牵连。

3 ros2 topic list

  要查看当前系统中所有话题的名称可以使用以下命令:

ros2 topic list

  可以看到在终端中输出如下话题列表:

/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

  如果想要知道这些话题传输的是什么类型的数据,可以使用以下命令:

ros2 topic list -t

  这回我们不仅可以看到所有话题的列表,还可以清晰的看到每个话题传输的数据类型是什么。

/parameter_events [rcl_interfaces/msg/ParameterEvent]
/rosout [rcl_interfaces/msg/Log]
/turtle1/cmd_vel [geometry_msgs/msg/Twist]
/turtle1/color_sensor [turtlesim/msg/Color]
/turtle1/pose [turtlesim/msg/Pose]

  如果想知道所有这些话题在rqt_graph中的位置,可以取消选中“Hide”下的所有框:

4 ros2 topic echo

  如果想查看节点之间的话题到底发了什么数据内容,可以使用如下命令:

ros2 topic echo <topic_name>

  既然我们知道节点/teleop_turtle通过话题/turtle1/cmd_vel向节点/turtlesim发布数据,那么让我们使用echo对该topic进行查看:

ros2 topic echo /turtle1/cmd_vel

  一开始,这个命令不会返回任何数据。那是因为它在等待节点/teleop_turtle发布一些东西。返回运行turtle_teleop_key的终端,使用箭头移动turtle。观察echo运行的终端,你会看到为你的每一个动作发布的位置数据:

linear:x: 2.0y: 0.0z: 0.0
angular:x: 0.0y: 0.0z: 0.0---

  原来键盘控制节点将点击的键盘按键变成了线速度和角速度,通过话题发送给海龟仿真器,海龟才动起来的。

5 ros2 topic info

  话题不必只是点对点的通信;它可以是一对多,多对一,或多对多。类似查看节点的详细信息一样,我们也可以用如下命令查看话题的详细信息:

ros2 topic info /turtle1/cmd_vel

  可以在终端中看到该话题的详细信息:

Type: geometry_msgs/msg/Twist
Publisher count: 1
Subscription count: 1

6 ros2 interface show

  节点之间要想成功建立数据传输,必须发布和订阅同样数据类型的消息,发布者发布的是速度指令,订阅者想订阅位置信息可是行不通的。我们在运行ros2 topic list -t之后看到的话题类型让我们知道每个话题可以发送什么类型的消息。回想一下,cmd_vel话题的类型是:

geometry_msgs/msg/Twist

  熟悉ROS1的应该并不陌生,这就是在ROS中常用的标准速度指令,以上内容表示在geometry_msgs包的msg中有一个数据类型Twist。这个数据类型的具体数据结构什么样的,继续通过如下指令看一下:

ros2 interface show geometry_msgs/msg/Twist

  在终端中输出如下信息:

# This expresses velocity in free space broken into its linear and angular parts.Vector3  linear
Vector3  angular

  因此,Twist中包含了两个三维向量,分别表示线速度和角速度。

7 ros2 topic pub

  现在您已经知道了消息的具体结构,可以使用以下命令直接从命令行将数据发布到话题上:

ros2 topic pub <topic_name> <msg_type> '<args>'

  '<args>'参数是您将传递给话题的实际数据,需要使用YAML的语法来描述。比如要发布速度指令Twist,可以按如下方式输入完整命令:

ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

  --once是一个可选参数,表示“发布一条消息,然后退出”。
  运行上述命令之后,在海龟仿真器里面看到小海龟动起来了,

并且在终端中看到如下输出:

publisher: beginning loop
publishing #1: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=2.0, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=1.8))

  如果希望小海龟一直运动,那就得以某个频率持续发布:

ros2 topic pub --rate 1 /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

  这里的区别是删除了--once选项并添加了--rate 1选项,它告诉ros2 topic pub以1 Hz的频率发布命令。

8 ros2 topic hz

  如果我们想查看某一个话题的发布频率,可以通过命令行来实现:

ros2 topic hz /turtle1/pose

  在终端中可以看到/turtlesim节点发布/turtle1/pose话题的频率:

average rate: 59.354min: 0.005s max: 0.027s std dev: 0.00284s window: 58

ROS2入门教程—理解话题(Topic)相关推荐

  1. ROS2入门教程—创建一个简单的订阅者和发布者(C++版)

    ROS2入门教程-创建一个简单的订阅者和发布者(C++版) 1 创建功能包 2 创建发布者节点 3 设置发布者节点依赖项 4 设置发布者节点编译规则 5 创建订阅者 6 编译并运行   节点是通过RO ...

  2. ROS2入门教程—创建ROS2功能包(C++版)

    ROS2入门教程-创建ROS2功能包(C++版) 1 ROS2中的功能包 2 创建功能包 3 编译功能包 4 设置环境变量 5 运行功能包 6 功能包中的内容 7 修改package.xml文件    ...

  3. ROS2教程 04 话题Topic

    一.ROS2 话题Topic 示意图 ROS2的Topic可以是一对一,一对多,多对一,多对多,同一个话题Topic可以被不同的节点Node订阅与发布 二.与ros1区别 topic下有多种命令,以下 ...

  4. walking与Matlab入门教程-ros2命令

    系列文章目录 walking与Matlab入门教程-安装matlab 2022a软件 walking与Matlab入门教程-安装visual studio 2019软件 walking与Matlab入 ...

  5. 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用

    [一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...

  6. ROS2与C++入门教程-在C++包里增加python支持

    系列目录 ROS2与C++入门教程-目录 ROS2与C++入门教程-新建ros2工作空间 ROS2与C++入门教程-新建ros2包 ROS2与C++入门教程-编写订阅和发布 ROS2与C++入门教程- ...

  7. ROS2与C++入门教程-增加头文件

    系列文章目录 ROS2与C++入门教程-目录 ROS2与C++入门教程-新建ros2工作空间 ROS2与C++入门教程-新建ros2包 ROS2与C++入门教程-编写订阅和发布 ROS2与C++入门教 ...

  8. ros2与windows入门教程-windows上安装ROS2 foxy

    系列文章目录 ros2与windows入门教程-windows上安装ROS2 foxy ros2与windows入门教程-控制小乌龟 ros2与windows入门教程-监听和发布话题 ros2与win ...

  9. ros2与Python入门教程-使用消息 - 创客智造

    **ros2与Python入门教程-使用消息 ** 说明: 介绍如何python来测试消息 步骤: 如何创建消息 ,参考ROS2与C++入门教程-创建消息(msg)文件 利用python来测试消息 使 ...

最新文章

  1. Android 的NDK的Makefile编写
  2. Javascript正则匹配不含某子串
  3. LeetCode之Search Insert Position
  4. 前端学习(3120):react-hello-react的setstate的一个说明
  5. python接口测试jason_Python 接口测试之Json数据文件操作
  6. 大话设计模式-策略模式与简单工厂模式
  7. 《论文笔记》Robust Cooperative UAV Visual SLAM
  8. Android:adb进程问题
  9. python闹钟_用python做了个高级闹钟 欢迎借鉴
  10. 【解决】打印机只打印第一页纸的问题
  11. Python: SystemError: Unknown opcode
  12. web地图热力图理解
  13. Astah绘制UML图形
  14. 解决虚拟机win7安装VMtool失败
  15. 单片机基础知识大总结
  16. 如何用VBA寻找指定区域中的第一个非空单元格
  17. 业务流程图设计-Visio设计
  18. 网页怎么预先加载模型_修补预先训练的语言模型
  19. docker安装mysql 并挂载目录
  20. ICCV2021|底层视觉(图像生成,图像编辑,超分辨率等)相关论文汇总(附论文链接/代码)[持续更新]

热门文章

  1. linux 下如何添加用户、权限
  2. Bowtie2错误:Could not locate a Bowtie index corresponding to basename /home/s45/mouse
  3. vue3+ant design vue+ts实战【ant-design-vue组件库引入】
  4. PNETlab最新版介绍与下载
  5. Vue-2-计算属性、侦听器、过滤器、样式绑定
  6. Python地理数据处理 十五:基于arcpy的批量操作
  7. modelsim破解
  8. C语言初阶:define定义的常量和宏,关于指针的详细讲解,初步认识结构体的使用
  9. 原来漏斗分析应该这样用!
  10. wps.wrod.excel基本操作总结