本文来源于:http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics

  1. ROS主题
    假设turtlesim节点已经运行,打开一个新终端,使用如下命令运行键盘控制节点

    $ rosrun turtlesim turtle_teleop_key
    

    则终端会弹出来如下窗口:

    表示从键盘读取输入来控制小海龟移动。
    将焦点选中到该窗口,即可使用键盘上的方向键来移动小 海龟。

    下来我们来分析一下在这背后,发生了什么。

  2. 理解ROS主题(Topic)
    上面有两个节点:turtlesim和turtle_teleop_key,他们通过ROS主题来进行通信。其中,turtle_teleop_key将键盘点击信息发布到消息中,turtlesim节点通过订阅该主题来接收键盘点击信息。
    1.  使用rqt_graph
      ROS提供了可视化工具,rqt_graph来查看ROS系统中运行了什么东西。该工具属于rqt_graph包,我们可以通过如下命令安装该包。

      $ sudo apt-get install ros-<distro>-rqt
      $ sudo apt-get install ros-<distro>-rqt-common-plugins

      其中,distro为ROS发行版本,本教程中使用kinetic版本。
      然后在新终端中运行:

      $ rosrun rqt_graph rqt_graph
      

      则会出现如下界面:

      如果将鼠标放在/turtle1/cmd_vel上,则界面中两个椭圆会颜色会发生如下变化:

      其中,变为红色的主题(Topics),蓝色和绿色的为节点(Nodes),其中蓝色为该主题的发布节点,绿色为该主题的订阅节点。

    2. rostopic
      ROS提供了rostopic命令来查看主题相关的信息。
      rostopic有一些子命令,可以使用rostopic -h查看,如下所示:
    3. rostopic echo
      其中,rostopic echo命令可以打印主题消息。语法如下:

      rostopic echo [topic]
      

      例如我们之前用rqt_graph查看到一个主题:/turtle1/cmd_vel,我们可以用如下命令来查看该中主题中的消息:

      如上图所示,运行了

      rostopic echo /turtle1/cmd_vel
      

      之后,将焦点中选中到键盘节点的窗口,点击方向键,则可以打印出该主题的消息内容。
      现在如果再运行rqt_graph,则显示如下:

      可以看出来多了一个节点来订阅/turtle1/cmd_vel主题,该节点即为rostopic echo节点。

    4. rostopic list
      rostopic list命令可以列出当前订阅或发布的主题,用法如下:

      若使用-v选项,则会列出来当前订阅和发布主题的完整信息。

    5. rostopic type
      节点之前通过订阅和发布主题来进行通信,而发送和接收的数据需要是同一类型的消息,通信的内容形式即为消息(Message)。
      这些消息的类型可以通过rostopic type命令查看,该命令用法为:
      rostopic type [topic]
      

      例如,我们可以查看/turtle1/cmd_vel中的消息类型:

      该主题的消息类型为:geometry_msgs/Twist。
      可以使用如下命令查看该消息类型的数据成员:

      spy@spy-pc:~$ rosmsg show geometry_msgs/Twist
      geometry_msgs/Vector3 linear
      float64 x
      float64 y
      float64 z
      geometry_msgs/Vector3 angular
      float64 x
      float64 y
      float64 z

      可以看出来该消息类型包含两个向量Vector3类型的结构体,分别表示速度和角速度。

    6. rostopic pub
      rostopic pub命令可以直接发布ros主题的消息。该命令用法如下:
      rostopic pub [topic] [msg_type] [args]
      

      例如:

      rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
      

      该命令表示发布类型为geometry_msgs/Twist的消息到/turtle1/cmd_vel主题,该消息参数为:'[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'表示速度为向前2.0,角速度为1.8,-1表示只发布一次消息。
      这组参数使用的是YAML语法,关于该语法的更多信息请参考YAML command line documentation.

      两个短杠--表示,后面的均是参数,不是选项,以防止解析器解析错误,例如含有符号的参数,如不加区分,解析器可能会按照选项来解析。
      在该命令下,小乌龟移动界面如下图所示:

      可以看出,小乌龟大约 移动了1/4段圆弧。

      为了使小乌龟持续移动,我们需要持续发布该消息,需要加入持续发布消息的频率参数,该参数可以使用-r选项指定,例如使用如下语句:

      rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
      

      就可以让乌龟持续转圈:

      再使用rqt_graph查看主题:

      可以看出来多了一个节点来发布/turtle1/cmd_vel主题到/turtlesim节点的。

    7. 消息数据的可视化
      1.  rostopic hz
        rostopic hz命令可以查看一个主题的发布频率,例如:

        rostopic hz /turtle1/pose
        subscribed to [/turtle1/pose]
        average rate: 62.485
        min: 0.004s max: 0.028s std dev: 0.00250s window: 63
        average rate: 62.495
        min: 0.004s max: 0.028s std dev: 0.00180s window: 125
        average rate: 62.489
        min: 0.004s max: 0.028s std dev: 0.00149s window: 188
        average rate: 62.495
        min: 0.002s max: 0.029s std dev: 0.00181s window: 250
        average rate: 62.500
        min: 0.002s max: 0.029s std dev: 0.00175s window: 313
        average rate: 62.501
        min: 0.002s max: 0.029s std dev: 0.00190s window: 375
        average rate: 62.501
        min: 0.002s max: 0.029s std dev: 0.00176s window: 438
        average rate: 62.501
        min: 0.002s max: 0.029s std dev: 0.00166s window: 501
        average rate: 62.501
        min: 0.002s max: 0.029s std dev: 0.00165s window: 563
        average rate: 62.502
        min: 0.002s max: 0.029s std dev: 0.00175s window: 626
        average rate: 62.498
        min: 0.002s max: 0.029s std dev: 0.00178s window: 688
        average rate: 62.501
        min: 0.002s max: 0.029s std dev: 0.00171s window: 751
        average rate: 62.498
        min: 0.002s max: 0.029s std dev: 0.00165s window: 813
        average rate: 62.501
        min: 0.002s max: 0.029s std dev: 0.00159s window: 876
        average rate: 62.500
        min: 0.002s max: 0.029s std dev: 0.00158s window: 938
        average rate: 62.499
        min: 0.002s max: 0.029s std dev: 0.00153s window: 1001
        average rate: 62.499
        min: 0.002s max: 0.029s std dev: 0.00149s window: 1064
        average rate: 62.500
        min: 0.002s max: 0.029s std dev: 0.00147s window: 1126
        average rate: 62.499
        min: 0.001s max: 0.032s std dev: 0.00161s window: 1189
        average rate: 62.499
        min: 0.001s max: 0.032s std dev: 0.00162s window: 1251
        average rate: 62.499
        min: 0.001s max: 0.032s std dev: 0.00159s window: 1314
        average rate: 62.501
        min: 0.001s max: 0.032s std dev: 0.00155s window: 1376
        average rate: 62.500
        min: 0.001s max: 0.032s std dev: 0.00152s window: 1439
        average rate: 62.500
        min: 0.001s max: 0.032s std dev: 0.00149s window: 1501
        average rate: 62.500
        min: 0.001s max: 0.032s std dev: 0.00147s window: 1564
        average rate: 62.500
        min: 0.001s max: 0.032s std dev: 0.00145s window: 1627
        average rate: 62.499
        min: 0.001s max: 0.032s std dev: 0.00142s window: 1689
        average rate: 62.500
        min: 0.001s max: 0.032s std dev: 0.00140s window: 1752
        average rate: 62.444
        min: 0.001s max: 0.041s std dev: 0.00155s window: 1813

        可以看出,turtlesim节点发布的/turtle1/pose主题频率约为62Hz,并且给出了统计特性,最大值,最小值和方差。

      2. rqt_plot
        该命令会把消息数据绘图:
        rosrun rqt_plot rqt_plot
        

        会弹出rqt_plot的界面,然后在界面中Topic后面的文本框中输入主题名,例如输入:/turtle1/pose然后就会显示/turtle1/pose主题中的消息数据曲线。

          

ROS学习笔记6-理解主题的更多相关文章

  1. 微信小程序开发:学习笔记[7]——理解小程序的宿主环境

    微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器

  2. ROS学习笔记七:在ROS中使用USB摄像头

    下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...

  3. ROS学习笔记1-引言

    该学习笔记参考ROS官方wiki的内容,见:http://wiki.ros.org/ROS/Introduction 什么是ROSROS的全称是Robot Operating System,即机器人操 ...

  4. ROS学习笔记八:基于Qt搭建ROS开发环境

    1 前言 本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Q ...

  5. Java_JVM学习笔记(深入理解Java虚拟机)___重点

    http://chenzhou123520.iteye.com/category/196061 转载 JVM学习笔记(一):运行时数据区 JVM学习笔记(二):JVM中对象访问的两种方式 JVM学习笔 ...

  6. ROS学习笔记三(理解ROS节点)

    要求已经在Linux系统中安装一个学习用的ros软件包例子: sudo apt-get install ros-indigo-ros-tutorials ROS图形概念概述 nodes:节点,一个节点 ...

  7. ROS学习笔记2-基本概念

    本笔记来源于:http://wiki.ros.org/ROS/Concepts ROS文件系统级别文件系统级别主要包含了你能在ROS的磁盘上遇到的资源,包括: 包(Packages):包是ROS中资源 ...

  8. ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters

    上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameters 我不理解为何 ROS wiki 要把service与parameter放在一起介绍, 很想分 ...

  9. 学习笔记5——wp主题开发

    我觉得学习wordpress插件开发之前还是得先理解一下wp的主题开发,循序渐进才能学好wordpress开发,话不多说,接下来整理一下这两天学习的wordpress主题开发的一些心得和体会,与大家一 ...

随机推荐

  1. Python 使用 prettytable 库打印表格(美化输出)

    pip install prettytable 每次添加一行 from prettytable import PrettyTable # 默认表头:Field 1.Field 2... # 添加表头 ...

  2. springboot2.x整合redis

    pom文件 <!--springboot中的redis依赖--> <dependency> <groupId>org.springframework.boot< ...

  3. Vue 项目 在局域网内访问

    之前在百度上看到过很多中  关于局域网访问项目的方法, 在这里,个人推荐两种比较喜欢的方法 一.直接在项目的package.json文件中进行配置 ,代码如下 "scripts": ...

  4. 14.浏览器屏幕缩放bug修复

    问题:浏览器缩放时,轮播图显示不全,滚动水平滚动条,发现图片缺失 解决:隐藏水平滚动条,页面都只提供垂直滚动条的需求 global.css /* 水平超出部分默认隐藏 */ #app { overfl ...

  5. [02]Sort选择排序

    选择排序 算法速度:通过大O表示法表示,O(n),n是操作数,表示算法执行的次数: 数组:是有序的元素序列:若将有限个类型相同的变量的集合命名,那么这个名称为数组名: 链表:是一种物理存储单元上非连续 ...

  6. c++ 读取、输出txt文件

    下面这段话转自:https://blog.csdn.net/lightlater/article/details/6326338 关于文本文件的文件头 第一 ANSI文件的文件头为空,不需要处理: 第 ...

  7. vue cavnas绘制矩形,并解决由clearRec带来的闪屏问题

    起因:在cavnas绘制矩形时 鼠标移动一直在监测中,所以鼠标移动的轨迹会留下一个个的矩形框, 要想清除矩形框官方给出了ctx.clearRect() 但是这样是把整个画布给清空了,因此需要不断 向画 ...

  8. 洛谷 P5019 铺设道路(差分)

    嗯... 题目链接:https://www.luogu.org/problem/P5019 首先简化一下题意: 给定一个长为N的数组,每次操作可以选择一个区间减去1,问最少多少次操作可以将数组中的数全 ...

  9. [WC2018]通道(乱搞,迭代)

    [洛谷题面]https://www.luogu.org/problemnew/show/P4221 这个题以及[CTSC2018 暴力写挂]都有类似的乱搞做法能通过考场数据. 具体搞法就是随一个起点, ...

  10. 实验一&#160;&#160;GIT 代码版本管理

    实验一  GIT 代码版本管理 实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2)   熟练掌握git的基本指令和分支管理指令: 实验内容: 1)安装git 2)初始配置git ,git ...