理解ros话题--6
理解ROS话题(原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/)
Description: 本教程介绍ROS话题(topics)以及如何使用rostopic 和 rxplot 命令行工具。目录如下:
1.开始
1.1.首先确保roscore已经运行, 打开一个新的终端:
- root@zxwubuntu-Aspire-V3-572G:/usr# roscore
如果你没有退出在上一篇教程中运行的roscore,那么你可能会看到下面的错误信息: 这是正常的,因为只需要有一个roscore在运行就够了。
- roscore cannot run as another roscore/master is already running.
- Please kill other roscore/master processes before relaunching
1.2.turtlesim
在本教程中我们也会使用到turtlesim,请在一个新的终端中运行:
- root@zxwubuntu-Aspire-V3-572G:/usr# rosrun turtlesim turtlesim_node
1.3.通过键盘远程控制turtle
我们也需要通过键盘来控制turtle的运动,请在一个新的终端中运行:
- root@zxwubuntu-Aspire-V3-572G:/usr# rosrun turtlesim turtle_teleop_key
现在你可以使用键盘上的方向键来控制turtle运动了。如果不能控制,请选中turtle_teleop_key所在的终端窗口以确保你的按键输入能够被捕获。
现在你可以控制turtle运动了,下面我们一起来看看这背后发生的事。
2.ROS Topics
turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来互相通信的。turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息。下面让我们使用rqt_graph来显示当前运行的节点和话题。
注意:如果你使用的是electric或更早期的版本,那么rqt是不可用的,请使用rxgraph代替。
2.1.使用 rqt_graph
rqt_graph能够创建一个显示当前系统运行情况的动态图形。rqt_graph是rqt程序包中的一部分。如果你没有安装,请通过以下命令来安装:
- root@zxwubuntu-Aspire-V3-572G:/usr# sudo apt-get install ros-<distro>-rqt
- root@zxwubuntu-Aspire-V3-572G:/usr# sudo apt-get install ros-<distro>-rqt-common-plugins
请使用你的ROS版本名称(比如fuerte、groovy、hydr。indigo等)来替换掉<distro>。
在一个新终端中运行:你会看到类似下图所示的图形:
- root@zxwubuntu-Aspire-V3-572G:/usr# rosrun rqt_graph rqt_graph
如果你将鼠标放在/turtle1/command_velocity上方,相应的ROS节点(蓝色和绿色)和话题(红色)就会高亮显示。正如你所看到的,turtlesim_node和turtle_teleop_key节点正通过一个名为 /turtle1/command_velocity的话题来互相通信。
2.2.rostopic介绍
rostopic命令工具能让你获取有关ROS话题的信息。
你可以使用帮助选项查看rostopic的子命令:
- root@zxwubuntu-Aspire-V3-572G:/usr# rostopic -h
- root@zxwubuntu-Aspire-V3-572G:~# rostopic -h
- rostopic is a command-line tool for printing information about ROS Topics.
- Commands:
- rostopic bw display bandwidth used by topic
- 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'
- root@zxwubuntu-Aspire-V3-572G:~#
接下来我们将使用其中的一些子命令来查看turtlesim。
2.3.使用 rostopic echo
rostopic echo可以显示在某个话题上发布的数据。 用法: rostopic echo [topic]
让我们在一个新终端中看一下turtle_teleop_key节点在/turtle1/command_velocity话题(非hydro版)上发布的数据。
- root@zxwubuntu-Aspire-V3-572G:~# rostopic echo /turtle1/command_velocity
如果你是用ROS Hydro 及其之后的版本(下同),请运行:
- root@zxwubuntu-Aspire-V3-572G:~# rostopic echo /turtle1/cmd_vel
你可能看不到任何东西因为现在还没有数据发布到该话题上。接下来我们通过按下方向键使turtle_teleop_key节点发布数据。记住如果turtle没有动起来的话就需要你重新选中turtle_teleop_key节点运行时所在的终端窗口。
现在让我们再看一下rqt_graph(你可能需要刷新一下ROS graph)。正如你所看到的,rostopic echo(红色显示部分)现在也订阅了turtle1/command_velocity话题。
2.4.使用 rostopic list
rostopic list能够列出所有当前订阅和发布的话题。
让我们查看一下list子命令需要的参数,在一个新终端中运行:
- root@zxwubuntu-Aspire-V3-572G:~# rostopic list -h
在rostopic list中使用verbose选项:
- root@zxwubuntu-Aspire-V3-572G:~# rostopic list -v
这会显示出有关所发布和订阅的话题及其类型的详细信息。
3.ROS Messages
话题之间的通信是通过在节点之间发送ROS消息实现的。对于发布器(turtle_teleop_key)和订阅器(turtulesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定的。使用rostopic type命令可以查看发布在某个话题上的消息类型。
3.1.使用 rostopic type
rostopic type 命令用来查看所发布话题的消息类型。用法: rostopic type [topic]
运行(非hydro版):
- root@zxwubuntu-Aspire-V3-572G:~# rostopic type /turtle1/command_velocity
你应该会看到:- turtlesim/Velocity
hydro版请运行:
- root@zxwubuntu-Aspire-V3-572G:~# rostopic type /turtle1/cmd_vel
- 你应该会看到:
- geometry_msgs/Twist
我们可以使用rosmsg命令来查看消息的详细情况(非hydro版):
- root@zxwubuntu-Aspire-V3-572G:~# rosmsg show turtlesim/Velocity
- 你应该会看到:
- float32 linear
- float32 angular
hydro版:
- root@zxwubuntu-Aspire-V3-572G:~# 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
现在我们已经知道了turtlesim节点所期望的消息类型,接下来我们就可以给turtle发布命令了。
4.继续学习 rostopic
现在我们已经了解了什么是ROS的消息,接下来我们开始结合消息来使用rostopic。
4.1.使用 rostopic pub
rostopic pub可以把数据发布到当前某个正在广播的话题上。用法: rostopic pub [topic] [msg_type] [args]
示例(非hydro版):
- root@zxwubuntu-Aspire-V3-572G:~# rostopic pub - /turtle1/command_velocity turtlesim/Velocity -- 2.0 1.8
示例(hydro版):
- root@zxwubuntu-Aspire-V3-572G:~# rostopic pub - /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
以上命令会发送一条消息给turtlesim,告诉它以2.0大小的线速度和1.8大小的角速度开始移动(画圆)
这是一个非常复杂的例子,因此让我们来详细分析一下其中的每一个参数。
- rostopic pub 这条命令将会发布消息到某个给定的话题。
- - (单个破折号)这个参数选项使rostopic发布一条消息后马上退出。
- /turtle1/command_velocity 这是消息所发布到的话题名称。
- turtlesim/Velocity 这是所发布消息的类型。
- -- (双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。这在参数里面包含有破折号-(比如负号)时是必须要添加的。
- 2.0 1.8 正如之前提到的,在一个turtlesim/Velocity消息里面包含有两个浮点型元素:linear和angular。在本例中,.0是linear的值,.8是angular的值。这些参数其实是按照YAML语法格式编写的,这在YAML文档中有更多的描述。
你可能已经注意到turtle已经停止移动了。这是因为turtle需要一个稳定的频率为1Hz的命令流来保持移动状态。我们可以使用rostopic pub -r命令来发布一个稳定的命令流
(非hydro版):
- root@zxwubuntu-Aspire-V3-572G:~# rostopic pub /turtle1/command_velocity turtlesim/Velocity -r -- 2.0 -1.8
(hydro版):
- root@zxwubuntu-Aspire-V3-572G:~# rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
这条命令以1Hz的频率发布速度命令到速度话题上。
我们也可以看一下rqt_graph中的情形,可以看到rostopic发布器节点(红色)正在与rostopic echo节点(绿色)进行通信:
正如你所看到的,turtle正沿着一个圆形轨迹连续运动。我们可以在一个新终端中通过rostopic echo命令来查看turtlesim所发布的数据。
4.2.使用 rostopic hz
rostopic hz命令可以用来查看数据发布的频率。 用法: rostopic hz [topic]
我们看一下turtlesim_node发布/turtle/pose时有多快:
- root@zxwubuntu-Aspire-V3-572G:~# rostopic hz /turtle1/pose
现在我们可以知道了turtlesim正以大约60Hz的频率发布数据给turtle。我们也可以结合rostopic type和rosmsg show命令来获取关于某个话题的更深层次的信息
(非hydro版):
- root@zxwubuntu-Aspire-V3-572G:~# rostopic type /turtle1/command_velocity | rosmsg show
(hydro版):
- root@zxwubuntu-Aspire-V3-572G:~# rostopic type /turtle1/cmd_vel | rosmsg show
到此我们已经完成了通过rostopic来查看话题相关情况的过程,接下来我将使用另一个工具来查看turtlesim发布的数据。
5.使用 rqt_plot
注意:如果你使用的是electric或更早期的ROS版本,那么rqt命令是不可用的,请使用rxplot命令来代替。
rqt_plot命令可以实时显示一个发布到某个话题上的数据变化图形。这里我们将使用rqt_plot命令来绘制正在发布到/turtle1/pose话题上的数据变化图形。首先,在一个新终端中运行rqt_plot命令:
- root@zxwubuntu-Aspire-V3-572G:~# rosrun rqt_plot rqt_plot
这会弹出一个新窗口,在窗口左上角的一个文本框里面你可以添加需要绘制的话题。在里面输入/turtle1/pose/x后之前处于禁用状态的加号按钮将会被使能变亮。按一下该按钮,并对/turtle1/pose/y重复相同的过程。现在你会在图形中看到turtle的x-y位置坐标图。
按下减号按钮会显示一组菜单让你隐藏图形中指定的话题。本部分教程到此为止,请使用Ctrl-C退出rostopic命令,但要保持turtlesim继续运行。
理解ros话题--6的更多相关文章
- 理解ROS话题
首先需要打开一个终端在里面运行roscore: roscore 再打开一个终端,在里面运行一个turtlesim_node节点: rosrun turtlesim turtlesim_node 打开另 ...
- (六)ROS话题---节点之间通信的方式
1. 理解 ROS 话题: (Ctrl+Alt+T 打开一个新终端) 运行下面的命令: $ roscore (Ctrl+Alt+T 打开一个新终端) $ rosrun turtlesim turtle ...
- ROS Learning-008 beginner_Tutorials ROS话题
ROS Indigo beginner_Tutorials-07 ROS话题 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LT ...
- ROS学习(七)—— 理解ROS Topic
一.准备工作 1.打开roscore roscore 2.turtlesim 打开一个turtulesim节点 rosrun turtlesim turtlesim_node 3.turtle key ...
- ROS知识(2)----理解ROS系统结构
学习新事物,方法高于技术本身,如果没有把握"BIG PICTURE"的话很难理解进去.通过以下几点进行理解ROS: ROS实际上不是操作系统,他只是一个通信的框架,一个代码管理的架 ...
- ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)
ROS Indigo beginner_Tutorials-10 编写 ROS 话题版的 Hello World 程序(Python版) 我使用的虚拟机软件:VMware Workstation 11 ...
- 由浅到深理解ROS(1)
ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率.ROS能够提供类似传统操作系统的诸多功能,如硬件抽象.底层设备控制.常用功能 ...
- ROS学习(六)—— 理解ROS节点
一.准备工作 下载一个轻量级的模拟器 sudo apt-get install ros-kinetic-ros-tutorials 二.图概念的理解 1.Nodes:一个节点就是一个可执行文件,用来与 ...
- 由浅到深理解ROS(5)- launch启动文件的理解与编写
ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file).事实上,在ROS功能包中,启动文件的使用是非常普遍的.任何包含两个或两个以上节点的系统都可 ...
随机推荐
- SQLSERVER NULL值判断
sqlserver 在判断数据条件时,如果数据包含null的话则永远为false,null不参与判断,可以使用isnull(列,默认值)来判断null值的数据列,或者列 is null or 列的条件 ...
- RTX——第13章 事件标志组
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面的章节我们已经讲解了任务管理和时间管理,从本章节开始讲解任务间的通信和同步机制.首先讲解任务间的通信 ...
- BAT-SVN自动更新代码目录
1.安装“TortoiseSVN-1.7.15.25753-x64-svn-1.7.18.msi”. 2.“运行”->“cmd”->输入“svn help”->出现用说明代表正常,提 ...
- ios UITextField文本框基本使用,以及所有代理方法的作用
/* UITextField文本输入框 */ UITextField * textField = [[UITextField alloc]initWithFrame:CGRectMake(50, 50 ...
- RocketMQ集群搭建
1.RocketMQ介绍 1.1. 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅 ...
- Linux下chmod命令
命令格式 参数 描述 u User,即文件或目录的拥有者 g Group,即文件或目录的所属群组 o Other,除了文件或目录拥有者或所属群组之外,其它用户皆属于这个范围 a All,即全部的用户, ...
- 【WPF/C#】拖拽Image图片控件
需求:使得Image图片控件能够被拖动. 思路:关键是重写Image控件的几个鼠标事件,实现控制. 前台: <Image Source="C:\Users\Administrator\ ...
- C语言 · 淘淘的名单
算法提高 淘淘的名单 时间限制:100ms 内存限制:8.0MB 问题描述 by ZBY... :) 淘淘拿到了一份名单,他想对上面的名字进行处理,挑出一些特殊的名字,他请你来帮忙. ...
- 向大家推荐一个C/C++通用Makefile
在使用 Makefile 之前,只需对它进行一些简单的设置即可:而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动 Makefile.因此,即便是一个没有学习过 Makefile 书写规则的 ...
- 单网卡绑定多个ip, 多个网卡绑定成一块虚拟网卡
Linux网卡配置与绑定 Redhat Linux的网络配置,基本上是通过修改几个配置文件来实现的,虽然也可以用ifconfig来设置IP,用route来配置默认网关,用hostname来配置主机 ...