理解ROS话题(原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/

Description: 本教程介绍ROS话题(topics)以及如何使用rostopicrxplot 命令行工具。目录如下:

  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_nodeturtle_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 typerosmsg 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的更多相关文章

  1. 理解ROS话题

    首先需要打开一个终端在里面运行roscore: roscore 再打开一个终端,在里面运行一个turtlesim_node节点: rosrun turtlesim turtlesim_node 打开另 ...

  2. (六)ROS话题---节点之间通信的方式

    1. 理解 ROS 话题: (Ctrl+Alt+T 打开一个新终端) 运行下面的命令: $ roscore (Ctrl+Alt+T 打开一个新终端) $ rosrun turtlesim turtle ...

  3. ROS Learning-008 beginner_Tutorials ROS话题

    ROS Indigo beginner_Tutorials-07 ROS话题 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LT ...

  4. ROS学习(七)—— 理解ROS Topic

    一.准备工作 1.打开roscore roscore 2.turtlesim 打开一个turtulesim节点 rosrun turtlesim turtlesim_node 3.turtle key ...

  5. ROS知识(2)----理解ROS系统结构

    学习新事物,方法高于技术本身,如果没有把握"BIG PICTURE"的话很难理解进去.通过以下几点进行理解ROS: ROS实际上不是操作系统,他只是一个通信的框架,一个代码管理的架 ...

  6. ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)

    ROS Indigo beginner_Tutorials-10 编写 ROS 话题版的 Hello World 程序(Python版) 我使用的虚拟机软件:VMware Workstation 11 ...

  7. 由浅到深理解ROS(1)

    ROS机器人操作系统 ( Robot Operating System 或简称 ROS),可以帮助提高机器人软件的开发效率.ROS能够提供类似传统操作系统的诸多功能,如硬件抽象.底层设备控制.常用功能 ...

  8. ROS学习(六)—— 理解ROS节点

    一.准备工作 下载一个轻量级的模拟器 sudo apt-get install ros-kinetic-ros-tutorials 二.图概念的理解 1.Nodes:一个节点就是一个可执行文件,用来与 ...

  9. 由浅到深理解ROS(5)- launch启动文件的理解与编写

    ROS提供了一个同时启动节点管理器(master)和多个节点的途径,即使用启动文件(launch file).事实上,在ROS功能包中,启动文件的使用是非常普遍的.任何包含两个或两个以上节点的系统都可 ...

随机推荐

  1. .net+jquery+ashx实现客户端模拟登陆扩展

    客户端实现:login namespace LoginApp { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </su ...

  2. 在Mac OS X中使用mtr诊断路由节点问题

    这个工具是从阿里云客服那知道的,当时遇到阿里云CDN的一个节点出现丢包问题,用这个工具诊断路由节点问题. 1. 下载地址:http://rudix.org/packages/mtr.html(在园子里 ...

  3. 如何做一个像btbook.net这样的搜片神器?

    这几天btbook.net这个搜片神器网站火了, 让我这个无工作的人, 也想做一个出来, 不然时间不好打发, 本人的草稿站: fastbot.me (刚发布几个小时, 体验等几天再做) 现在说说这种搜 ...

  4. python的一些科学计算的包

    在安装numpy这类科学计算的包的时候,pip下载的东西有时候缺少一些东西. 可以到这里下载,根据提示信息,少哪个包,或者哪个包出现错误就安装哪个包. PIL到这里下载

  5. JAVA-JSP动作元素之param

    相关资料:<21天学通Java Web开发> 结果总结:1.用来传递参数,一般与<jsp:include>.<jsp:forward>联合使用.2.<jsp: ...

  6. redis的window客户端下载地址

    这里是window的版本,由微软维护的: https://github.com/MicrosoftArchive/redis/releases

  7. innobackupex参数之 --throttle 限速这个值设置多少合理 原创

    innobackupex参数之--parallel --throttle--parallel 此参数用于开启多个子进程并发备份多个数据文件(注意,一个数据文件只会有一个进程完成备份).可以加快备份速度 ...

  8. iOS边练边学--定时任务和HUD

    九宫格计算思路 利用控件的索引index计算出控件所在的行号和列号 利用列号计算控件的x值 利用行号计算控件的y值 HUD 其他说法:指示器.遮盖.蒙板 半透明HUD的做法 背景色设置为半透明颜色 定 ...

  9. 03 Files

    本章提要-----------------------------------------------组成 oracle 的 8 种主要文件(包括 instance 和 database)instan ...

  10. JavaScript裸体识别技术

    当第一次听说nude.js的时候,我非常怀疑这种浏览器端的裸体识别技术,有几个理由: 正常情况下,裸体识别应该在服务器端进行,这样,那些色情图片或色情视频才能在发送给浏览者前被发现. 我不相信完全依赖 ...