文章只是个人学习过程中学习笔记,主要参考ROS教程1


目录

  • 1、概念
  • 2、话题通信机制
  • 3、话题命令rostopic
  • 4、 话题通信实操 -- 键盘控制乌龟(turtlesim)运动
  • 5、话题命令实操
    • 5.1 rostopic list
    • 5.2 rostopic type
    • 5.3 rostopic echo
    • 5.4 rostopic pub
    • 5.5 rostopic hz
    • 5.6 rostopic bw
    • 5.7 rostopic info
    • 5.8 rostopic find

1、概念

  话题(Topics):节点可以将消息发布到话题,或者通过订阅话题来接收消息。话题是用于标识消息内容的名称。对某种数据感兴趣的节点会订阅到相应的话题。单个话题可能有多个并行发布者(publishers)和订阅者(subscribers),并且单个节点可以同时发布和订阅多个话题,单个节点也可以发布或订阅(监听)多个话题。通常,发布者和订阅者不知道彼此的存在。它们之间是属于解耦合的关系。从逻辑上讲,可以将话题视为强类型的消息总线。每条总线都有一个名称,只要类型正确,任何人都可以连接到总线以发送或接收消息。
  消息(Messages):订阅或发布话题时所使用的ROS数据类型。消息是由类型化字段组成。支持标准原始类型(整数、浮点、布尔值等),以及原始类型数组。消息可以包括任意嵌套的结构和数组(很像C结构)。

图1-1 话题(Topics)、发布者(Publisher)和订阅者(Subscriber)的概念图

  为了让事情更清楚,我将使用 FM收音机系统作为类比:广播电台(node)的发射器(publisher)将以某个固定频率(topic)传输你喜欢的频道(message)。假设你坐在车里,想收听你最喜欢的频道(message)。你将收音机接收器(subscriber)调谐到该频率(topic)。你既不知道广播电台的确切位置,广播电台也不想知道你在哪里。但你仍然可以在你喜爱的频道中欣赏音乐。

2、话题通信机制

  话题通信是ROS通信中最常用的一种基于发布和订阅模型的通信方式。用于实时性、周期性、少逻辑处理的数据传输场景。
  ROS Node想要通过topic方式来传递消息,首先 publisher 节点和 Subscriber 节点都要到ROS Master(节点管理器)中进行注册节点名称、话题名称、消息类型、URI地址和端口,然后ROS Master向 Subcriber 节点发送 publisher 节点信息, Subscriber 节点根据接收的 publisher 节点信息,向 publisher 节点请求直接连接,它们建立连接后, publisher 节点向 Subscriber 节点发送消息。节点间通信使用一种基于TCP/IP的消息传输,称为TCPROS

图2-1 话题(Topics)通信模型

3、话题命令rostopic

  rostopic命令工具能让你获取ROS话题的信息。

命令 功能
rostopic bw 列出消息发布带宽
rostopic delay display delay of topic from timestamp in header
rostopic echo 显示某个话题上发布的数据
rostopic find 根据消息类型查找话题
rostopic hz 报告数据发布的速率
rostopic info 获取指定Topic 当前发布的消息
rostopic list 列出当前所有的Topic
rostopic pub 把数据发布到当前某个正在广播的话题上
rostopic type 查看所有发布话题的消息类型

Tips:使用rostopic <command> -h 帮助选项获取更详细的用法。

4、 话题通信实操 – 键盘控制乌龟(turtlesim)运动

  通过ROS内置的turtlesim来进行话题通信的实操,该实操中涉及到两个节点,一个是控制乌龟运动的键盘节点turtle_teleop_key,另外一个是显示乌龟运动的显示节点turtlesim_node,它们之间通过话题通信,turtle_teleop_key(publisher)在话题上发布键盘按下的消息,turtlesim_node(subscriber)则订阅该话题以接收消息,实现乌龟运动。我们可以使用rqt_graph GUI来显示当前运行的节点和话题。

图4-1 使用rqt_graph显示当前运行的节点和话题

  实现的步骤如下:
  步骤1:在新终端中启动roscore

roscore

  步骤2:在新终端中启动turtlesim_node

rosrun turtlesim turtlesim_node

  步骤3:在新终端中启动键盘turtle_teleop_key

rosrun turtlesim turtle_teleop_key

  步骤4:在turtle_teleop_key终端中(一定要选中该终端窗口,确保按键输入能够被捕获),按下键盘上的方向键来控制乌龟运动。

图4-2 键盘控制乌龟(turtlesim)运动

5、话题命令实操

  使用控制乌龟(turtlesim)运动案例来实操话题命令。

5.1 rostopic list

   rostopic list 能够列出当前已被订阅和发布的所有话题。

# (1) 列出当前已被订阅和发布的所有话题。
rostopic list
# (2) 列出所有发布和订阅的主题及其类型的详细信息。
rostopic list -v

5.2 rostopic type

   rostopic type [topic] 命令用来查看所发布话题的消息类型。

# (1) 查看所发布话题[/turtle1/cmd_vel]的消息类型。
rostopic type /turtle1/cmd_vel
# (2) 使用rosmsg查看消息的详细信息
rosmsg show geometry_msgs/Twist

5.3 rostopic echo

   rostopic echo [topic] 可以显示在某个话题上发布的数据。

rostopic echo /turtle1/cmd_vel

   当输入命令后,你可能会看到什么都没发生,因为现在还没有数据被发布到该话题上。可以通过按下键盘方向键让turtle_teleop_key节点发布数据。记得如果不能控制乌龟,请选中turtle_teleop_key的终端窗口以确保按键输入能够被捕获。当按下向右和向上键时,应该看到以下内容:

现在让我们再看一下rqt_graph。先按下左上角的刷新按钮以显示新节点。正如你所看到的,rostopic echo(这里以红色显示)现在也订阅了turtle1/cmd_vel话题。

5.4 rostopic pub

   rostopic pub [topic] [msg_type] [args] 命令可以把数据发布到当前某个正在广播的话题上。

# 命令会发送一条消息给turtlesim,告诉它以2.0大小的线速度和1.8大小的角速度移动。
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
  • -1:这一选项会让rostopic只发布一条消息,然后退出。
  • /turtle1/cmd_vel:这是要发布到的话题的名称
  • geometry_msgs/Twist:这是发布到话题时要使用的消息的类型。
  • --:这一选项(两个破折号)用来告诉选项解析器,表明之后的参数都不是选项。如果参数前有破折号(-)比如负数,那么这是必需的。

还有一种快速输入的方法:先输入以下命令,然后双击Tab键,最后使用<-和->键修改linearangular

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist


  下面我们用 rostopic pub -r 命令来发布源源不断的命令:

# 命令以1Hz的频率发送消息给turtlesim,保证乌龟持续做圆周运动
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

5.5 rostopic hz

   rostopic hz [topic] 命令用来报告数据发布的速率。

rostopic hz /turtle1/cmd_vel

5.6 rostopic bw

   rostopic bw [topic] 显示指定话题的消息数据带宽(bandwidth)。

rostopic bw /turtle1/cmd_vel

5.7 rostopic info

   rostopic info [topic] 获取指定Topic 当前发布的消息 。

5.8 rostopic find

   rostopic find [msg_type] 根据消息类型查找话题。

rostopic find geometry_msgs/Twist


  1. ROS.otg. ROS教程[EB/OL]. 2020-12-22[2022-7-5].
    http://wiki.ros.org/cn/ROS/Tutorials. ↩︎

[ROS](06)ROS通信 —— 话题(Topic)通信相关推荐

  1. ROS学习小笔记(Topic通信 ,service通信,参数服务器)

    (菜鸡整理的学习笔记,原文链接已经挂上,不小心过来的朋友建议去博主那边学习,谢谢) 原文链接:https://blog.csdn.net/LoongEmbedded/article/details/1 ...

  2. ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令

    ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令 ROS是什么 ROS文件系统 文件系统工具:rospack.roscd.rosls 创建ROS 软件包 catkin是什么 创建和构建一 ...

  3. ROS通信机制(一) —— 话题(topic)与msg文件

    文章目录 简述 特点 相关常用命令 通信模型 核心元素 通信过程 代码示例(发布者和订阅者) 发布者(talker.cpp) 订阅者(listener.cpp) 配置 CMakeLists.txt 编 ...

  4. 五、ROS使用serial包进行串口通信

    五.ROS使用serial包进行串口通信 1.下载串口调试助手CuteCom 2.下载虚拟串口模拟器socat 3.下载串口调试助手minicom 4.安装serial串口功能包 5.创建工作空间 6 ...

  5. ROS笔记(8) 服务通信

    ROS笔记(8) 服务通信 1. 自定义服务请求与应答 2. 服务端 Service 3. 客户端 Client 4. 服务通信 1. 自定义服务请求与应答 在 hh_ros 功能包 srv 文件夹中 ...

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

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

  7. ROS 之话题topic中 命令小总结

    1.查看ROS正在发布的话题 rostopic list 我的正在发布如下话题. 2.具体查看某个话题,比如查看改话题的发布者(Publishers)和订阅者(Subscribers)以及话题的类型( ...

  8. ROS 搞懂多话题回调机制以及消息队列

    ROS 消息队列的运行机制 下面只是自己的理解,如果有误望大家指正! 大部分内容参考于 https://blog.csdn.net/qq_42700518/article/details/104453 ...

  9. 13.ROS编程学习:话题发布控制乌龟

    目录 准备工作 c++控制乌龟运动 python控制乌龟运动 参考学习资料:赵虚左的课程+古月的ROS机器人开发实践P56的例程. 准备工作 打开ROS乌龟仿真器 roscore rosrun tur ...

最新文章

  1. Javascript操作DOM常用API总结
  2. 笔记-项目沟通管理-高效的会议方案
  3. Linux入门笔记——echo
  4. 运行mapreduce程序yarn的web端显示进度
  5. IWorkbook 引入_如果引入国内,你会买单吗?日产全新小型SUV亮相|小型suv|日产|轩逸|新车|本田|丰田...
  6. Gitlab Java API 使用示例
  7. srgan要训练多久_有氧运动要多久才开始消耗脂肪?
  8. Lync Server 2013 实战系列之二:标准版-前期准备
  9. 大数据行业包含的岗位有哪些
  10. Angular------使用IDEA开发Angular
  11. Effective Modern C++笔记汇总
  12. Nodejs之NestJS之pkg打包
  13. 北京CMMB信号ESG的Schedule据文件--8月份数据
  14. DeepLearning论文阅读笔记(一):Cyclical Learning Rates for Training Neural Networks(CLR)
  15. 前端 day02 CSS
  16. 1024程序员节CSDN活动征文:数据结构之顺序表
  17. 女神节礼品:大学男神创作“专属情诗app”
  18. ROC:Receiver operating characteristic Curve接受者操作特征的理解
  19. python能在业余时间赚钱吗?分享自己的接私活经验及学习经验
  20. 2014智联卓聘积分获取新攻略

热门文章

  1. STM32的光敏检测自动智能窗帘控制系统proteus设计
  2. 计算机科学与技术的需求,计算机科学与技术专业市场需求分析
  3. 姚晨为何可以新浪微博排名第一
  4. javascript原型、原型链神图
  5. IPFS为数据隐私保驾护航
  6. Redmi Note 11T什么时候发布 Redmi Note 11T配置如何
  7. 12c oracle 01109,Oracle 12c redo 丢失恢复
  8. C++ 解决rand()函数生成的随机数每次都一样的问题
  9. JIRA的使用介绍(一)- 概念篇(笔记)
  10. 各种LED显示模组的技术分析