ROS Learning-008 beginner_Tutorials ROS话题
ROS Indigo beginner_Tutorials-07 ROS话题
我使用的虚拟机软件:VMware Workstation 11
使用的Ubuntu系统:Ubuntu 14.04.4 LTS
ROS 版本:ROS Indigo
1. 理解 ROS 话题:
我们来通过运行一个 ROS 的例子程序来 感受一下什么是 ROS 话题:
运行下面的命令:
(Ctrl+Alt+T 打开一个新终端)
$ roscore
(Ctrl+Alt+T 打开一个新终端)
$ rosrun turtlesim turtlesim_node
(Ctrl+Alt+T 打开一个新终端)
$ rosrun turtlesim turtle_teleop_key
我现在可以控制小海龟:(要在 turtle_teleop_key 所在的终端窗口,按键盘的 方向键 来控制小海龟运动。)
我们使用 rosnode list
命令来看看这个例子里,都运行了哪些节点:
输出:
/rosout
/teleop_turtle
/turtlesim
解释:
/teleop_turle
节点向 ROS 网络总线上发布话题;
/turtlesim
节点接收了 /teleop_turle
发布的这个话题。 那么这个话题具体是什么,我们怎样可以知道呢?
上面打开的终端窗口不要关闭,我们继续进行下面的教程。
2. 使用图形化工具可视化话题的发布接收:
我们可以使用 ROS 网络图形化工具来 直观 的感受这个话题的发布接收:
如果没有安装 rqt ,先安装。执行下面的命令进行安装:
$ sudo apt-get install ros-indigo-rqt
$ sudo apt-get install ros-indigo-rqt-common-plugins
现在重新打开一个终端, 运行下面的命令:
$ rosrun rqt_graph rqt_graph
# 或者,你也可以直接使用下面的命令。这两个命令是等价的。
$ rqt_graph
都能得到下面的GUI界面:
我们现在直观的看到了一个节点间通信的可视图。
3. rostopic 命令的使用:
rostopic
命令的帮助,里面罗列了 rostopic
命令的所有的参数:
rostopic --help
输出:
rostopic is a command-line tool for printing information about ROS Topics.
Commands:
rostopic bw display bandwidth used by topic
rostopic delay display delay of topic from timestamp in header
rostopic echo print messages to screen
rostopic find find topics by type
rostopic hz display publishing rate of topic
rostopic info print information about active topic
rostopic list list active topics
rostopic pub publish data to topic
rostopic type print topic type
Type rostopic <command> -h for more detailed usage, e.g. 'rostopic echo -h'
rostopic 命令各个参数的详细介绍:
3.1 list : (列出所有话题(包括发布的和订阅的))
(新开个终端)
$ rostopic list
能够列出所有当前正在订阅和发布的话题:
/rosout
/rosout_agg
/statistics
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
-v
可以得到当前正在订阅和发布的话题的详细内容介绍:
$ rostopic list -v
输出:
3.2 echo : (监听话题)
这个话题 /turtle1/cmd_vel 里面都是什么数据,要如何才能知道呢:
rostopic 这个命令的作用就是来打印指定话题内的通信内容的:
$ rostopic echo /turtle1/cmd_vel
运行效果: 当你在 turtle_teleop_key 所在终端上控制 方向键(发布 /turtle1/cmd_vel
话题), /turtle1/cmd_vel
话题内的数据就会打印出来:
这个时候,你在刷新一下 rqt_gragp 软件窗口 就可以看到,现在有2个节点订阅了 /turtle1/cmd_vel
话题:
3.3 type : (查看话题的消息类型)
发布器与订阅器之间发送和接收,必须使用相同的消息类型,那么如何得到这些消息的类型呢:使用下面的命令:
$ rostopic type /turtle1/cmd_vel
(首先先启动 roscore
、turtlesim_node
和 turtle_teleop_key
这3个程序)
输出:
geometry_msgs/Twist
你看到了,这里打印了当前 /turtle1/cmd_vel
的消息类型:geometry_msgs/Twist
。那这个东西又是什么:使用rosmsg
得到详细的信息:
$ 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
其中里面的 linear
是 线速度; angular
是 角速度。
这样,我们就知道了其实这个话题里面由两组信息组成: 1组线速度,1组角速度。
上面的两句命令可以浓缩成一句:
$ rostopic type /turtle1/cmd_vel | rosmsg show
3.4 pub : (publicer) 发布话题
下面我再教你一招:如何在终端上,在某个正在广播的话题上发布消息:
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
rostopic pub
就可以实现上面说的功能: 用法:
rostopic pub [话题] [消息类型] [发布的内容]
上面的命令里面的 -1
表示: 只发布一次,维持3秒。
下面这句里的 -r 1
指的是:以 1Hz 的速度循环发送 --
后面的信息。
这句运行之后,你可以看到小乌龟在画圈。
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
这个时候,让我们看看 rqt_graph 窗口,刷新它 :
3.5 hz :
如何得到某个正在广播的话题数据发布的频率:
$ rostopic hz [话题]
现在执行 rostopic list
罗列出所有的正在发布的话题,输出结果如下:
/rosout
/rosout_agg
/statistics
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
我们现在就来监听 /turtle1/pose
这个话题里面数据发布的频率。
执行下面的命令:
$ rostopic hz /turtle1/pose
执行完这条命令后,你会看到当前终端在不断的刷新下面的信息:
subscribed to [/turtle1/pose]
average rate: 62.542
min: 0.015s max: 0.017s std dev: 0.00047s window: 62
average rate: 62.500
min: 0.015s max: 0.017s std dev: 0.00043s window: 124
average rate: 62.509
min: 0.014s max: 0.017s std dev: 0.00047s window: 187
average rate: 62.519
min: 0.013s max: 0.019s std dev: 0.00056s window: 249
3.6 rqt_plot 数据转换成波形 :
上面一堆数据,怎么看啊,如果可以将数据转换成波形就好了。没错告诉你一个好消息,使用下面的命令, 就可以将正在广播的消息数据绘制成波形显示: (新开一个终端)
$ rosrun rqt_plot rqt_plot
执行完这个命令后,会弹出一个窗口,名字叫: rqt_plot_Plot-rqt:
在 Topic 项里面选择:turtle1/Pose,这个话题里包含了小海龟姿态的所有信息:
点击 加号图标,将这个 /turtle1/Pose 话题里面的所有数据产生的波形显示出来:
可以看到,现在 /turtle1/Pose 话题里面的所有数据的波形都被显示了出来:
但是,有些数据的波形,我们不需要,比如说:除了 /turtle1/pose/x
和 /turtle1/pose/y
以外的数据,我们都不需要。所以我们要将他们删除:
我只想绘制 /turtle1/pose/x
和 /turtle1/pose/y
数据的波形。删除其他数据波形的操作如下图所示:
现在,就只保留了小海龟在TurtleSim窗口中 X 和 Y轴坐标值变化的波形了:
本讲总结:
我们这一讲介绍了ROS节点之间,如何使用话题进行通信。其实节点之间的通信方式不只话题这一种方式:
节点之间通信的方式 : 话题(rostopic) 和 服务(rosservice)。
所以,我们下一讲来讲 节点之间如何使用服务(rosservice) 来进行通信。但是在这之前,我想通过一个实战实例来让大家加深对话题(rostopic)的理解和运用。
所以,请你在学习下一讲: ROS 服务 前,看看我写了另一边实战性的博文: Arduino For ROS 发布ROS话题—使用摇杆控制小海龟。
ROS Learning-008 beginner_Tutorials ROS话题的更多相关文章
- ROS Learning-009 beginner_Tutorials ROS服务 和 ROS参数
ROS Indigo beginner_Tutorials-08 ROS服务 和 ROS参数 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...
- ROS Learning-007 beginner_Tutorials ROS节点
ROS Indigo beginner_Tutorials-06 ROS节点 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LT ...
- ROS探索总结(一)——ROS简介
转自古-月 ROS探索总结(一)——ROS简介 一.历史 随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求.2010年Willow G ...
- ros中关于节点、话题、服务以及自定义消息等在终端中的常用命令
以下面的计算力图说明 节点相关常用命令 在终端中查看项目中有哪些节点命令:rosnode list 有了节点信息想要查看节点中到底发布订阅了哪些话题,作为服务端服务类型或者作为客户端需要的服务类型以上 ...
- 【ros】Create a ROS package:package dependencies报错
$rospack depends1 beginner_tutorials 报错:Erros:could notn call python function 'rosdep2.rospack.init_ ...
- 【2017.10.13 ROS机器人操作系统】ROS系统常用术语及资源
ROS机器人操作系统是一种后操作系统,提供了类似于软件开发中使用到的中间件的功能. ROS: Robot Operating System 机器人操作系统 Package: 功能包 Stack: 功能 ...
- ROS初探:(一)ROS架构
一.ROS架构 ROS架构上分为三个层级: 计算图级(Computation Graph level):体现进程与系统的关系,描述系统怎么运行. 文件系统级(Filesystem level):组织构 ...
- ROS二进制日志包 ROS binary logger package
原文网址: 1 http://www.ros.org/news/2017/02/ros-binary-logger-package.html 2 https://github.com/CNR-ITIA ...
- ROS与激光雷达入门-ROS中使用激光雷达(RPLIDAR)
激光雷达(RPLIDAR) 我这里用的是思岚(rplidar)A1,通过ros系统去驱动激光雷达,现在做了一个基本的入门. RPLIDAR是低成本的二维雷达解决方案,由SlamTec公司的RoboPe ...
随机推荐
- tensorflow定义神经网络损失函数MSE
import numpy as np import tensorflow as tf y_pred = np.array([[1], [2], [3]],dtype=np.float32) y_rea ...
- NFS各个版本之间的比较
NFS是一种网络文件系统,从1985年推出至今,共发布了3个版本:NFSv2.NFSv3.NFSv4,NFSv4包含两个次版本NFSv4.0和NFSv4.1.经过20多年发展,NFS发生了非常大的变化 ...
- HTML|CSS之CSS选择器及样式
知识内容: 1.CSS选择器 2.CSS常用样式 参考:http://www.cnblogs.com/yuanchenqi/articles/5977825.html 一.CSS选择器 1.基础选择器 ...
- python入门-类(一)
1 最简单的一个类 class Dog(): """一次模拟小狗的简单尝试""" def __init__(self,name,age): ...
- Mysql replace into
mysqlsql serverinsert 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果存在,则更新. 在 SQL Server 中可以 ...
- C# WEB.API 多图上传
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Ne ...
- left join 如何增加where条件(在on的后面),这很重要
SELECT [学号], [姓名],[备注2],[年级],专业,[学院],[x30] FROM [总表] left join k指标体系 on 学号 = x01 where 年级='2014'
- FMX TListView 搜索 Search
FMX,FireMonkey,平台框架下TListView控件搜索.过滤. 查找功能确实强大!! 设置SearchVisibe属性为true,就自动显示搜索框,输入文字,就开始检索了,不用写一行代码! ...
- 使用jquery.more.js来实现点击底部更多后, 底部加载出新的数据
<div class="bus-nav-bar ft12"> <div class="navt bor-r-c pos-rel {if $int == ...
- 机器学习入门-DBSCAN聚类算法
DBSCAN 聚类算法又称为密度聚类,是一种不断发张下线而不断扩张的算法,主要的参数是半径r和k值 DBSCAN的几个概念: 核心对象:某个点的密度达到算法设定的阈值则其为核心点,核心点的意思就是一个 ...