ROS学习笔记五:理解ROS topics

本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具。

例子展示

roscore

首先运行roscore系列服务,这是使用ROS所必需的基础

roscore

turtlesim

这里还要用到turtlesim例子,先运行其节点:

rosrun turtlesim turtlesim_node

turtle键盘遥控操作

我们可以运行一个例程,然后通过键盘遥控操作turtle运行:

rosrun turtlesim_teleop_key

然后就可以通过方向键来驱动小海龟运行了。下面来探究一下屏幕背后发生了什么。

ROS topics

上面例程中节点turtlesim_node和节点turtle_teleop_key通过一个ROS topic来互相通信。turtle_teleop_key节点在topic上面发布关键进程,turtlesim_node节点则订阅相同的进程来接收这些关键进程。可以利用rqt_graph工具来显示正在运行的节点和主题之间的关系。

使用rqt_graph

rqt_graph工具是rqt软件包的一部分,可以创建系统中正在运行的节点、主题之间的一个动态关系图。运行命令:

rosrun rqt_graph rqt_graph

然后就可以看到类似如下的关系图,可以看出节点turtle_teleop_key和节点turtlesim_node之间在turtle1/cmd_vel主题上进行通信。

使用rostopic

rostopic工具允许我们获取ROS topics的相关信息。rostopic -h可以知道有如下命令:

Commands:rostopic bw display bandwidth used by topicrostopic delay  display delay of topic from timestamp in headerrostopic echo   print messages to screenrostopic find   find topics by typerostopic hz display publishing rate of topic    rostopic info   print information about active topicrostopic list   list active topicsrostopic pub    publish data to topicrostopic type   print topic type

使用rostopic echo

rostopic echo显示发布在一个主题上的数据。

rostopic echo [topic]

在此可以利用此命令看一下由turtle_teleop_key发布的command_velocity数据。

rostopic echo /turtle1/cmd/vel

刚运行此命令,应该在屏幕上什么也不会出现,这是因为在这个主题上没有发布任何数据。通过按下方向键来使turtle_teleop_key节点在此topic上发布数据,此时在刚刚的窗口应该出现如下信息:

 rostopic echo /turtle1/cmd_vel
linear:
  x: -2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
---
linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: -2.0

回过头来再看一下rqt_graph中的关系图,发现又多了一个订阅节点,就是用来显示topic数据的节点。

通过命令列出节点:

rosnode list
/rosout
/rostopic_3763_1472092089570
/rqt_gui_py_node_3827
/teleop_turtle
/turtlesim

使用rostopic list

rostopic list命令显示了当前被订阅和被发布的主题列表。

rostopic list
/rosout
/rosout_agg
/statistics
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

ROS Messages

通过在节点之间发送ROS Messages实现节点之间的通信,发布和订阅节点之间发送和接收的数据类型必须一致,这意味着一个主题的数据类型由发布在其上的信息类型所决定。发布在主题上的信息类型可以由rostopic type topic1来显示。

使用rostopic type

rostopic type返回正在使用的主题上的信息的类型。

rostopic type /turtle1/cmd_vel
geometry_msgs/Twist

利用命令rosmsg可以查看信息的详细信息

rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linearfloat64 xfloat64 yfloat64 z
geometry_msgs/Vector3 angularfloat64 xfloat64 yfloat64 z

现在我们知道了turtlesim需要什么样的数据类型,所以我们可以发布命令给我们的小海龟。

rostopic continued

学习完ROS Messages之后,下面来学习一下rostopic和messages。

使用rostopic pub

rostopic pub直接发布数据到一个主题之上

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]'

给定速度参数竟然只能用逗号隔开,呵呵
上面的命令告诉小海龟按照线速度2角速度1.8进行移动,默认的持续时间是3秒钟,如下图

通过加入选项-r则可以一直向topic发布数据

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

再次看一下rqt_graph中发生了什么,其中rostopic pub节点在一直与rostopic echo节点和turtlesim节点进行通信。

使用rostopic hz

rostopic hz返回数据发布的速率。

rostopic hz [topic]

利用该命令查看turtlesim发布/turtle1/pose的速度

rostopic hz /turtle1/pose
subscribed to [/turtle1/pose]
average rate: 62.502min: 0.016s max: 0.016s std dev: 0.00006s window: 60
average rate: 62.501min: 0.016s max: 0.016s std dev: 0.00005s window: 123
average rate: 62.498min: 0.016s max: 0.016s std dev: 0.00005s window: 185

使用rqt_plot

rqt_plot是rqt软件包的一部分,可以动态绘制发布到某一个主题上的数据的图形

rosrun rqt_plot rqt_plot

在输入框中输入要绘制的主题名称,选择即可。

总结

这一节的内容较多,首先要理解ROS topics、ROS nodes、ROS Messages之间的关系。目前个人的理解是:ROS topics是ROS nodes之间进行通信的枢纽,ROS messages是ROS nodes订阅和发布数据的载体。两个ROS nodes欲实现通信,则其中一个节点向ROS topic发布ROS messages,另一节点则通过订阅此topic来接收messages,两者的message类型一定要相同,而message的类型由主题确定,通过rostopic type命令可以查看topic的数据类型。

然后就是辅助查看ROS中节点关系和数据的工具:rqt_graph和rqt_plot,两者都是针对ROS类型的,其中rqt_graph工具会自动搜寻系统中正在运行的节点和主题,并动态绘制出关系图,rqt_plot则是绘制发布到topic上的数据的图形,因此两者使用的前提是有ROS的进程在运行。

运行节点:roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
查看节点关系图:rosrun rqt_graph rqt_graph

显示topic1上所发布的数据:rostopic echo topic1
列出当前处于激活状态的topic列表:rostopic list -v
显示topic1的数据类型:rostopic type topic1
显示类型更加详细的信息:rosmsg show type1
直接向主题topic1发布数据:rostopic pub [topic1] [msg_type] [args]
显示主题topic1上数据的发布速率:rostopic hz [topic1]

祝枫
2016年8月25日于哈尔滨

ROS学习笔记五:理解ROS topics相关推荐

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

    ROS学习手记 - 5 理解ROS中的基本概念_Services and Parameters 上一节完成了对nodes, Topic的理解,再深入一步: Services and Parameter ...

  2. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  3. ROS学习笔记26(ROS的命令行工具)

    需要说明的是:本篇博客内容来自于<ROS机器人编程 从基本概念到机器人应用程序编程实战>的第五章,本是打算参考和翻译官网相关资料,但官网资料的质量明显没有这本书描述的更为清楚,记录于此仅仅 ...

  4. ROS学习笔记02、ROS使用C++、Python来实现HelloWorld

    文章目录 前言 一.创建工程文件目录 二.实现helloworld 2.1.创建ROS包 2.2.C++版的HelloWorld 2.3.Python版的HelloWorld 三. 借助launch文 ...

  5. ROS学习笔记一(ROS的catkin工作空间)

    在安装完成ROS indigo之后,需要查看环境变量是否设置正确,并通过创建一个简单的实例来验证ROS能否正常运行. 1 查看环境变量 在ROS的安装过程中,我们执行了如下命令:(此命令就是向当前用户 ...

  6. ROS学习笔记九:ROS工具

    ROS有各种工具可以帮助用户使用ROS.应该指出,这些GUI工具是对输入型命令工具的补充.如果包括ROS用户个人发布的工具,那么ROS工具的数量很庞大.其中,本文讨论的工具是对于ROS编程非常有用的辅 ...

  7. ROS学习笔记02:ROS架构与基础

    文章目录 一.ROS架构 二.第一个ROS例程 (一)turtlesim功能包 1.话题与服务 2.背景色参数 (二)控制乌龟运动 1.启动节点管理器 2.启动乌龟仿真器节点 3.启动键盘控制节点 三 ...

  8. ROS学习笔记2(ROS文件系统和ROS常用命令)

    文章目录 1 预备工作 2 ros包文件系统概览 3 文件系统工具 3.1 rospack 3.2 roscd 3.3 roscd log 3.4 rosls 3.5 tab代码补全 4 总结 1 预 ...

  9. ROS学习笔记(一)补充篇 参考创客制造

    我将ROS的CPP部分分成7个部分: 1.基础的node param 2.动态调节参数 3.关于TF变换 4.actionlib 5.插件技术 6.movebase 7.nodelet技术 前言 相比 ...

最新文章

  1. 突破微信小程序五层层级限制的解决方案
  2. MySQL数据库介绍、安装(服务端软件安装、客户端软件安装(图形化界面客户端和命令行客户端))
  3. 剑指offer:和为S的连续正数序列
  4. The 2014 ACM-ICPC Asia Mudanjiang Regional Contest(2014牡丹江区域赛)
  5. Qtum量子链应邀出席2019棉兰区块链沙龙进军东南亚市场第一站
  6. ADO的几种数据库连接方式
  7. 搭建Android的jenkins持续集成环境
  8. RN与Android原生交互
  9. 腾讯开源最大规模多标签图像数据集,刷新行业数据集基准
  10. Ubuntu18.04 evo安装
  11. 密码学基础部分大归纳(密码学发展史,对称、非对称密码算法,数字签名、数字证书)
  12. SecureCRT信号灯超时问题解决办法
  13. 原型工具Axure常见问题
  14. 清理android根目录垃圾,安卓清理君——清除手机垃圾
  15. 国务院:推进太阳能光伏项目国际合作
  16. 红帽RHCE考试要注意的几点
  17. iOS6、7、8、9新特性总汇和适配说明
  18. NPOI导出EXCEL 合并单元格、统计列、单元格样式设置
  19. 前端本地静态模板下载功能
  20. android媲美微信扫码库

热门文章

  1. maven私服的使用
  2. 应用程序框架实战十八:DDD分层架构之聚合
  3. 【解决】Oracle服务器ip地址被占用
  4. 【重识 HTML + CSS】盒子模型相关知识点
  5. 【微型计算机原理与接口技术】80X86微处理器发展与内部结构
  6. 【MyBatis笔记】13-一对多左连接查询分步查询(查询所有客户及客户对应的订单)
  7. cgi web页面传入命令
  8. 中低频量化交易策略研发03_注意事项与应对
  9. java list 效率_Java中5种List的去重方法及它们的效率对比,你用对了吗?
  10. 插入排序 php,PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析