[ROS](06)ROS通信 —— 话题(Topic)通信

2023-05-16

  文章只是个人学习过程中学习笔记,主要参考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结构)。
话题(Topics)、发布者(Publisher)和订阅者(Subscriber)的概念图

图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

topic通信模型

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

3、话题命令rostopic

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

命令功能
rostopic bw列出消息发布带宽
rostopic delaydisplay 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来显示当前运行的节点和话题。
rqt_graph

图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终端中(一定要选中该终端窗口,确保按键输入能够被捕获),按下键盘上的方向键来控制乌龟运动。
topic turtlesim

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

5、话题命令实操

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

5.1 rostopic list

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

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

rostopic list

5.2 rostopic type

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

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

rostopic type

5.3 rostopic echo

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

rostopic echo /turtle1/cmd_vel

   当输入命令后,你可能会看到什么都没发生,因为现在还没有数据被发布到该话题上。可以通过按下键盘方向键让turtle_teleop_key节点发布数据。记得如果不能控制乌龟,请选中turtle_teleop_key的终端窗口以确保按键输入能够被捕获。当按下向右和向上键时,应该看到以下内容:
rostopic echo
现在让我们再看一下rqt_graph。先按下左上角的刷新按钮以显示新节点。正如你所看到的,rostopic echo(这里以红色显示)现在也订阅了turtle1/cmd_vel话题。
rqt_graph rostopic echo

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 one message
  下面我们用 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]'

rostopic pub continue message

5.5 rostopic hz

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

rostopic hz /turtle1/cmd_vel

rostopic hz

5.6 rostopic bw

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

rostopic bw /turtle1/cmd_vel

在这里插入图片描述

5.7 rostopic info

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

5.8 rostopic find

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

rostopic find geometry_msgs/Twist

rostopic find


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[ROS](06)ROS通信 —— 话题(Topic)通信 的相关文章

  • python中字符串及其格式转换技巧

    目录 python中字符串及其格式转换技巧其他数据转为字符串字符串的格式化带格式限定符的格式化字符串的连接字符串切片字符串转换为 ASCII 值 python中字符串及其格式转换技巧 在python语言中 xff0c 对字符串的处理可以说是

随机推荐

  • Linux命令发送Http的get或post请求(curl和wget两种方法)

    xfeff xfeff Http请求指的是客户端向服务器的请求消息 xff0c Http请求主要分为get或post两种 xff0c 在Linux系统下可以用curl和wget命令来模拟Http的请求 下面就来介绍一下Linux系统如何模拟
  • 让bat文件后台运行

    让bat文件后台运行 文章目录 让bat文件后台运行 前言方法一方法二 前言 bat文件运行时会有一个黑黑的cmd exe窗口 xff0c 很吓人 xff0c 就算用start min命令去运行bat文件 xff0c 电脑的任务栏下仍然会有
  • 5.C语言中全局变量在多个文件中使用

    转自 xff1a https www eefocus com codevisionlife blog 13 12 300658 1a0b8 html 用C语言编写程序的时候 xff0c 我们经常会遇到这样一种情况 xff1a 希望在头文件中
  • 利用GitHub actions实现Docker Image的构建并传送到Docker Hub或者harbor

    目录 1 github actions的介绍 2 dockerfile 的编写 2 1 dockerfile 范例 2 2 其他指令 3 workflow的编写 3 1 上传到docker hub 3 2 上传到 harbor 4 结果展示
  • UCOSIII编写无人机飞控程序——第一篇

    研究无人机飞控已经接近两年 xff0c 作为一个业余的兴趣爱好 兴趣源于看到国外大神Raffaello D 39 Andrea在TED做的无人机演讲和展示 xff0c 感觉无人机很像工程师所施展的魔法 xff0c 给一向给人苦逼印象的工程师
  • 解决 Ubuntu :: Configure: Error: The QtCore Library >= 4.3.0 Could Not Be Found? 问题

    解决 Ubuntu Configure Error The QtCore Library gt 61 4 3 0 Could Not Be Found 问题 作者 19届YJF 日期 2020 10 2 这是我在打 robocup 2D仿真
  • 魔都,3年,程序员到CTO

    过一个平凡无趣的人生实在太容易了 xff0c 你可以不读书 xff0c 不冒险 xff0c 不运动 xff0c 不写作 xff0c 不外出 xff0c 不折腾 但是 xff0c 人生最后悔的事情就是 xff1a 我本可以 陈素封 我可以 在
  • 几种内存泄露检测工具的比较

    概述 内存泄漏 memory leak 指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况 xff0c 在大型的 复杂的应用程序中 xff0c 内存泄漏是常见的问题 当以前分配的一片内存不再需要使用或无法访问时 xff0c 但是却并没
  • ubuntu查看磁盘占用和分配情况

    1 df hl Filesystem Size Used Avail Use Mounted on udev 978M 0 978M 0 dev tmpfs 200M 3 6M 197M 2 run dev sda5 28G 12G 15G
  • Android Studio主菜单(Main Menu)消失后,恢复显示

    当出现这个情况的时候 xff0c 我按找一般软件的办法找了半天也没找到 xff0c 最后没办法只能用万能的百度了 这里只记录一下当前我个人认为比较不错的方法 在Android Studio软件的右上角找到搜索 xff0c 输入Menu xf
  • github响应时间过长,无法访问此网站[已解决]

    某一天或某个时段总是出现 github 响应时间过长 xff0c 无法访问此网站的问题 获取github可以使用的DNS域名 通过站长工具 下的DNS查询 获取TTL值最小的 修改hosts配置 找到hosts xff08 域名解析文件 x
  • STM32(F407)—— 堆栈

    目录 1 SRAM 2 堆栈的作用 3 堆栈的设置 4 堆栈的实现 5 双堆栈机制 堆栈 是一种数据结构 堆栈都是一种数据项按序排列的数据结构 xff0c 只能在一端 称为栈顶 top 对数据项进行插入和删除 xff0c 相应地 xff0c
  • zabbix4.0学习五:Zabbix监控邮箱发送设置

    zabbix4 0学习五 xff1a Zabbix监控邮箱发送设置 文章目录 zabbix4 0学习五 xff1a Zabbix监控邮箱发送设置 前言配置centos安装mailx配置zabbix用户与报警媒介绑定 前言 zabbix里报警
  • STM32(F407)—— 存储区映射和存储器重映射

    Arm Cortex M4 处理器采用哈佛结构 xff0c 可以使用相互独立的总线来读取指令和加载 存储 数据 指令代码和数据都位于相同的存储器地址空间 xff0c 但在不同的地址范围 程序存储器 xff0c 数据存储器 xff0c 寄存器
  • MarkDown语法汇总

    文章目录 总览标题1 使用 号创建标题2 使用 61 和 号创建标题 段落1 换行2 字体格式3 删除线4 脚注5 下划线6 首行缩进7 字体颜色 大小 字体类型8 文本高亮 块引用1 嵌套块引用2 具有其他元素的块引用 列表1 有序列表2
  • 【VCU】详解S19文件(S-record)

    目录 1 概述 2 S record格式 3 S record类型 4 S19文件示例 5 校验和计算示例 6 参考 1 概述 Motorola S record是由Motorola创建的一种文件格式 xff0c 它以 ASCII十六进制
  • [ROS](03)CMakeLists.txt详解

    文章只是个人学习过程中学习笔记 xff0c 主要参考ROS教程1 目录 1 概述2 CMakeLists txt文件2 1 遵循的格式和顺序2 2 文件解析2 3 find package 2 4 catkin package 1 概述 C
  • [ROS](01)创建ROS工作空间

    文章只是个人学习过程中学习笔记 xff0c 主要参考ROS教程1 1 创建catkin工作空间 Catkin工作空间是一个文件夹 xff0c 可以在其中修改 构建和安装 catkin 包 span class token function
  • [ROS](04)package.xml详解

    文章只是个人学习过程中学习笔记 xff0c 主要参考ROS教程1 1 概述 软件包 xff08 package xff09 清单 xff08 manifest xff09 是一个名为 package xml 2 的 XML 文件 xff0c
  • [ROS](06)ROS通信 —— 话题(Topic)通信

    文章只是个人学习过程中学习笔记 xff0c 主要参考ROS教程1 目录 1 概念2 话题通信机制3 话题命令rostopic4 话题通信实操 键盘控制乌龟 xff08 turtlesim xff09 运动5 话题命令实操5 1 rostop