描述:这篇教程主要讲解ROS系统中的话题及rostopic和rqt_plot等命令工具;

1. Setup安装
1.1 roscore

首先确保roscore已经启动运行,打开一个新的命令终端,输入如下指令:

$ roscore

如果此时你仍然运行着上一篇教程中的roscore,将会看到如下错误信息:
•        roscore cannot run as another roscore/master is already running.
•        Please kill other roscore/master processes before relaunching

这是没有什么问题的,因为只能有一个roscore运行;

1.2 turtlesim

在这篇教程,我们仍然使用turtlesim功能包,打开一个新的命令终端,输入如下指令:

$ rosrun turtlesim turtlesim_node

1.3 键盘遥控乌龟

我们需要采取一些措施来操纵乌龟,请在新的命令终端输入如下指令:

$ rosrun turtlesim turtle_teleop_key

•        [ INFO] 1254264546.878445000: Started node [/teleop_turtle],
pid [5528], bound on [aqy], xmlrpc port [43918], tcpros port [55936],
logging to [~/ros/ros/log/teleop_turtle_5528.log], using [real] time
•        Reading from keyboard
•        ---------------------------
•        Use arrow keys to move the turtle.

这样就可以使用键盘上的方向键来操控乌龟运动了,如果乌龟不动弹,则需要选中turtle_teleop_key窗口,确保按下的键被窗口采集到;

2. ROS系统中的话题

Turtlesim_node节点和turtle_teleop_key节点之间通过ROS系统的话题进行通信,turtle_teleop_key节点发布键盘的动作到话题,同时turtlesim订阅同样的话题来接收键盘动作。我们可以通过rqt_graph查看当前运行的节点和话题。

注意:如果采用electric或更早期的版本,是不支持rqt的,可以通过rxgraph来替代;

2.1 rqt_graph的用法

rqt_graph会产生一个关于系统正在运行的元素(注节点及话题等)的动态图表,它是rqt功能包的一部分,如果你还没有安装,可以通过如下方式安装:
•        $ sudo apt-get install ros-<distro>-rqt

替换指令中的<distro>为你的ROS的版本号,如fuerte,groovy等;
新打开一个命令终端,输入如下指令:

$ rosrun rqt_graph rqt_graph

可以看到如下类似的图像:

如果把鼠标放置到/turtle1/command_velocity上,ROS节点(蓝色和绿色显示的)及话题(红色显示的)会出现高亮,
如图所示,turtlesim_node和turtle_teleop_key节点通过名字为/turtle1/command_velocity的话题进行通信;

2.2 rostopic介绍

通过rostopic工具可以获取有关ROS话题的信息;

可以通过help参数获取有关rostopic的次级命令选项用法;
$ rostopic -h
•        rostopic bw    display bandwidth used by topic
•        rostopic echo  print messages to screen
•        rostopic hz    display publishing rate of topic   
•        rostopic list  print information about active topics
•        rostopic pub    publish data to topic
•        rostopic type  print topic type

下面我们使用这些次级命令来检测一下turtlesim节点;

2.3 rostopic echo的用法

Rostopic echo 列示出发布给话题的数据信息;

用法:
rostopic echo [topic]

我们在一个新的命令终端下查看节点turtle_teleop_key发布给/turtle1/command_velocity话题的数据:

$ rostopic echo /turtle1/command_velocity

你也许什么都看不到,因为节点没有正在发布数据给话题,还需要通过按方向键让turtle_teleop_key发布数据,需要注意的是,如果乌龟没有动弹,需要重新选中turtle_teleop_key的命令终端;

如果你按下向上的方向键,你可以看到如下的相关信息:
•        ---
•        linear: 2.0
•        angular: 0.0
•        ---
•        linear: 2.0
•        angular: 0.0
•        ---
•        linear: 2.0
•        angular: 0.0
•        ---
•        linear: 2.0
•        angular: 0.0
•        ---
•        linear: 2.0
•        angular: 0.0

现在再次查看一下rqt_graph(需要刷新一下),可以看到rostopic echo节点(红颜色所示)也在订阅trutle1/command_velocity话题了;

2.4 rostopic list的用法

rostopic list 会列示出当前提供订阅和发布的所有话题信息;

我们猜想一下list的次级命令是什么,在一个新的命令终端,输入如下指令:
$ rostopic list -h
•        Usage: rostopic list [/topic]
•       
•        Options:
•          -h, --help            show this help message and exit
•          -b BAGFILE, --bag=BAGFILE
•                                list topics in .bag file
•          -v, --verbose        list full details about each topic
•          -p                    list only publishers
•          -s                    list only subscribers

我们使用rostopic list的 verbose选项:

[plain] view plaincopyprint?$ rostopic list -v

$ rostopic list -v

这将会展示一个有关发布者及订阅者的详细列表及他们的类型。
•        Published topics:
•        * /turtle1/color_sensor [turtlesim/Color] 1 publisher
•        * /turtle1/command_velocity [turtlesim/Velocity] 1 publisher
•        * /rosout [roslib/Log] 2 publishers
•        * /rosout_agg [roslib/Log] 1 publisher
•        * /turtle1/pose [turtlesim/Pose] 1 publisher
•       
•        Subscribed topics:
•        * /turtle1/command_velocity [turtlesim/Velocity] 1 subscriber
•        * /rosout [roslib/Log] 1 subscriber

3. ROS消息

节点通过话题通信时是采用ROS消息的方式进行的,对于发布者turtle_teleop_key和订阅者turtlesim_node之间的通信,发布者和订阅者必须采用类型一致的消息。亦即话题通信类型是由发布方发送的消息类型决定的。发送给话题的消息类型可以通过rostopic
type检测到;

3.1 rostopic type的用法

rostopic type返回话题发布的任何一个消息的类型。

用法:
rostopic type [topic]

试着输入:

$ rostopic type /turtle1/command_velocity

•        You should get:
•        得到如下结果:
turtlesim/Velocity

可以通过rosmsg查看更详细的信息;

$ rosmsg show turtlesim/Velocity

•        float32 linear
•        float32 angular

现在我们知道了turtlesim需要什么类型的数据了,因此我们可以对小乌龟发布命令了;

4. rostopic补充讲解

我们知道了ROS消息,现在我们使用rostopic操作消息;

4.1 pub rostopic pub的用法

rostopic pub 发布数据给当前存在的话题;

用法:
rostopic pub [topic] [msg_type] [args]

示例:

$ rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity  -- 2.0  1.8

在指令中,发送一条消息给turtlesim,通知他采用2.0的线性速度及1.8的角速度运行;

这是一个比较奥复杂的指令,我们相信看一下每一个参数;
•        rostopic pub

表示发布消息到指定的话题;
•        -1

-1选项表示只发送一次消息,然后就停发;
•        /turtle1/command_velocity

指定要发送的话题;
•        turtlesim/Velocity

指定发送给话题的消息类型
•        --

“--”告诉解析器后面的参数不是选项了(而是消息的具体数值),当数值为负数时是非常有必要的;

•        2.0 1.8

如前面提到的,turtlesim/Velocity命令有两个浮点型的数据:线性速度和角速度,这是2.0表示线性速度,1.8表示角速度的数值,这些参数表示形式符合YAML语法,具体可以查看有关YAML的介绍;

你会注意到小乌龟已经停止运动了,因为它需要靠1Hz的数据流不断驱动,我们可以使用rostopic pub –r指令不断发送数据流:

$ rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0  -1.8

这条指令以1Hz的频率不断发布速度数据到速度话题;

我们可以通过rqt_graph查看什么正在运行,rostopic pub节点(红色所示)正和rostopic echo节点(绿色所示)不断通信;

这样,小乌龟不断的做圆周运行。打开一个新的命令终端,我们使用rostopic echo可以查看由tertlesim发布的数据信息;

4.1 rostopic hz的用法

rostopic hz会报告出数据发布的频率;

用法:
rostopic hz [topic]

我们查看一下turtlesim_node发布的/turtle1/pose有多快:

$ rostopic hz /turtle1/pose

可以看到如下执行结果:
•        subscribed to [/turtle1/pose]
•        average rate: 59.354
•                min: 0.005s max: 0.027s std dev: 0.00284s window: 58
•        average rate: 59.459
•                min: 0.005s max: 0.027s std dev: 0.00271s window: 118
•        average rate: 59.539
•                min: 0.004s max: 0.030s std dev: 0.00339s window: 177
•        average rate: 59.492
•                min: 0.004s max: 0.030s std dev: 0.00380s window: 237
•        average rate: 59.463
•                min: 0.004s max: 0.030s std dev: 0.00380s window: 290

现在我们可以看出turtlesim正以60Hz的频率发布数据给小乌龟,我们也可以通过rostopic type与rosmsg show 联合在一起的方式输出有关话题的更详细信息;

$ rostopic type /turtle1/command_velocity | rosmsg show

现在我们已经可以通过rostopit来检查话题了,我们还需要使用其他工具查看一下turtlesim发布的数据;

5. rqt_plot用法

注意:如果使用electric或者更早期的版本,rqt是不支持的,用rxplot替代;

rqt_plot展示出了有关数据随着时间输出的曲线。这里我们使用rqt_plot画出发布给/turtle1/pose的数据:

$ rosrun rqt_plot rqt_plot /turtle1/pose/x:y
$ rosrun rqt_plot rqt_plot /turtle1/pose/theta

下面第一副图展示了x-y的位置随时间的关系,第二幅图展示了海龟的theta(方向角?)数值随时间的关系;

熟悉ROS系统中的话题的更多相关文章

  1. 奥比中光Astra Pro在ROS系统中的使用

    奥比中光Astra Pro在ROS系统中的使用 上一次介绍了Astra Pro在ubuntu中的使用,由于Astra Pro使用uvc传输彩色图像,所以当用rqt_image_view窗口 时,看不到 ...

  2. SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  3. ROS系统python代码测试之rostest

    ROS系统中提供了测试框架,可以实现python/c++代码的单元测试,python和C++通过不同的方式实现, 之后的两篇文档分别详细介绍各自的实现步骤,以及测试结果和覆盖率的获取. ROS系统中p ...

  4. ROS学习笔记二:ROS系统架构及概念

    本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...

  5. 【转载】ROS系统整体架构

    目录 1.从文件系统级理解 2.从计算图级理解 3.从开源社区级理解 由于ROS系统的组织架构比较复杂,简单从一个方面来说明很难说清楚.按照ROS官方的说法,我们可以从3个方面来理解ROS系统整体架构 ...

  6. ROS-2 : ROS系统层级结构

    一.ROS文件系统层级 ROS的文件和文件夹按如下层级来组织:

  7. 在ROS(indigo)中读取手机GPS用于机器人定位~GPS2BT在ubuntu和window系统下的使用方法~

    在ROS(indigo)中读取手机GPS用于机器人定位~GPS2BT在ubuntu和window系统下的使用方法~ 不需要额外购买GPS设备. 将手机GPS数据通过蓝牙传输给计算机使用,当然通过类似方 ...

  8. ROS机器人程序设计(原书第2版)补充资料 (贰) 第二章 ROS系统架构及概念

    ROS机器人程序设计(原书第2版)补充资料 (贰) 第二章 ROS系统架构及概念 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 由于工作事 ...

  9. 一个新人如何学习在大型系统中添加新功能和Debug

    文章背景: 今年七月份正式入职,公司主营ERP软件,楼主所在的组主要负责二次开发,使用的语言是Java. 什么叫二次开发呢?ERP软件的客户都是企业.而这些企业之间的情况都有所不同,一套标准版本的企业 ...

随机推荐

  1. openjudge noi 鸡尾酒疗法

    题目链接:http://noi.openjudge.cn/ch0105/18/ 总时间限制: 1000ms 内存限制: 65536kB 描述 鸡尾酒疗法,原指“高效抗逆转录病毒治疗”(HAART),由 ...

  2. C#调用存储过程详解(带返回值、参数输入输出等)

    CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGI ...

  3. 使用RStudio远程连接MySQL

    环境: 远程机: linux + Mysql 本地机: Windows + RStudio 问题: 1. 远程机为内网机器,需要跳板机连接,没有公网ip,无法连接 解决方案:修改跳板机的iptable ...

  4. linux每日命令(23):find命令之xargs

    在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...

  5. idea language level 介绍

    language level 介绍 其他 IDE 没有看到类似 language level 的设置,所以这个功能应该算是 IntelliJ IDEA 特有的,可是 IntelliJ IDEA 官网也 ...

  6. 【iCore4 双核心板_FPGA】例程八:乘法器实验——乘法器使用

    实验现象: 程序运行时,绿色led闪烁(目前,具体的乘法器调用请参考iCore3乘法器例程) 核心代码: module multiplier_ctrl( input clk_25m, input rs ...

  7. 配合angularjs中interceptor一劳永逸的加载$ionicloading的方法

    在我们日常的项目开发中,每当页面需要和服务端存在交互的时候,为了界面的友好,我们都会在界面中给个loading的加载图标,当从服务端获取到数据或者已经把本地数据送到服务端并且得到相应的回应的时候我们就 ...

  8. windows下svn钩子实现每次提交更新至web目录

    目的 找 到SVN Server中的仓库(Repositories)文件夹的位置,在相应的项目文件夹中找到hooks文件夹.在该文件夹中添加一个post- commit文件:当有commit动作发生时 ...

  9. Yii2中的composer

    1.下載composer 2.composer 插件或組件 3.有三處修改 a.composer require 的插件在vender下 b.同時vender下的composer文件修改 c.comp ...

  10. MAC下Myeclipse SVN插件安装

    1.下载SVN插件包:http://download.csdn.net/detail/frankyanchen/4512899 2.在myeclipse文件夹下创建一个文件夹为svntool并复制下载 ...