文章目录

  • 录制数据(通过创建一个bag文件)
    • 录制所有发布的话题
  • 检查并回放bag文件
  • 录制数据子集
  • rosbag record/play 命令的局限性

录制数据(通过创建一个bag文件)

本小节将教你如何记录ROS系统运行时的话题数据,记录的话题数据将会累积保存到bag文件中。

首先,执行以下命令:

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

以上操作将会启动两个节点——一个turtlesim可视化节点和一个turtlesim键盘控制节点。在运行turtlesim键盘控制节点的终端窗口中你应该会看到如下类似信息:

Reading from keyboard
---------------------------
Use arrow keys to move the turtle.

这时按下键盘上的方向键应该会让turtle运动起来。需要注意的是要想控制turtle运动你必须先选中启动turtlesim键盘控制节点时所在的终端窗口而不是显示虚拟turtle所在的窗口。

录制所有发布的话题

首先让我们来检查看当前系统中发布的所有话题。要完成此操作请打开一个新终端并执行:

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 publisherSubscribed topics:* /turtle1/command_velocity [turtlesim/Velocity] 1 subscriber* /rosout [roslib/Log] 1 subscriber

上面所发布话题部分列出的话题消息是唯一可以被录制保存到文件中的的话题消息,因为只有消息已经发布了才可以被录制。/turtle1/command_velocity话题是teleop_turtle节点所发布的命令消息并作为turtlesim节点的输入。而/turtle1/color_sensor和/turtle1/pose是turtlesim节点发布出来的话题消息。

现在我们开始录制。打开一个新的终端窗口,在终端中执行以下命令:

mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a

在这里我们先建立一个用于录制的临时目录,然后在该目录下运行rosbag record命令,并附加-a选项,该选项表示将当前发布的所有话题数据都录制保存到一个bag文件中。

然后回到turtle_teleop节点所在的终端窗口并控制turtle随处移动10秒钟左右。

在运行rosbag record命令的窗口中按Ctrl-C退出该命令。现在检查看~/bagfiles目录中的内容,你应该会看到一个以年份、日期和时间命名并以.bag作为后缀的文件。这个就是bag文件,它包含rosbag record运行期间所有节点发布的话题。

检查并回放bag文件

现在我们已经使用rosbag record命令录制了一个bag文件,接下来我们可以使用rosbag info检查看它的内容,使用rosbag play命令回放出来。接下来我们首先会看到在bag文件中都录制了哪些东西。我们可以使用info命令,该命令可以检查看bag文件中的内容而无需回放出来。在bag文件所在的目录下执行以下命令:

rosbag info <your bagfile>

你应该会看到如下类似信息:

bag: 2009-12-04-15-02-56.bag
version: 1.2
start_time: 1259967777871383000
end_time: 1259967797238692999
length: 19367309999
topics:- name: /rosoutcount: 2datatype: roslib/Logmd5sum: acffd30cd6b6de30f120938c17c593fb- name: /turtle1/color_sensorcount: 1122datatype: turtlesim/Colormd5sum: 353891e354491c51aabe32df673fb446- name: /turtle1/command_velocitycount: 23datatype: turtlesim/Velocitymd5sum: 9d5c2dcd348ac8f76ce2a4307bd63a13- name: /turtle1/posecount: 1121datatype: turtlesim/Posemd5sum: 863b248d5016ca62ea2e895ae5265cf9

这些信息告诉你bag文件中所包含话题的名称、类型和消息数量。我们可以看到,在之前使用rostopic命令查看到的五个已公告的话题中,其实只有其中的四个在我们录制过程中发布了消息。因为我们带-a参数选项运行rosbag record命令时系统会录制下所有节点发布的所有消息。

下一步是回放bag文件以再现系统运行过程。首先在turtle_teleop_key节点运行时所在的终端窗口中按Ctrl+C退出该节点。让turtlesim节点继续运行。在终端中bag文件所在目录下运行以下命令:

rosbag play <your bagfile>

在这个窗口中你应该会立即看到如下类似信息:

Hit space to pause.
[ INFO] 1260210510.566003000: Sleeping 0.200 seconds after advertising /rosout...
[ INFO] 1260210510.766582000: Done sleeping.[ INFO] 1260210510.872197000: Sleeping 0.200 seconds after advertising /turtle1/pose...
[ INFO] 1260210511.072384000: Done sleeping.[ INFO] 1260210511.277391000: Sleeping 0.200 seconds after advertising /turtle1/color_sensor...
[ INFO] 1260210511.477525000: Done sleeping.

默认模式下,rosbag play命令在公告每条消息后会等待一小段时间(0.2秒)后才真正开始发布bag文件中的内容。等待一段时间的过程可以通知消息订阅器消息已经公告了消息数据可能会马上到来。如果rosbag play在公告消息后立即发布,订阅器可能会接收不到几条最先发布的消息。等待时间可以通过-d选项来指定。

最终/turtle1/command_velocity话题将会被发布,同时在turtuelsim虚拟画面中turtle应该会像之前你通过turtle_teleop_key节点控制它一样开始移动。从运行rosbag play到turtle开始移动时所经历时间应该近似等于之前在本教程开始部分运行rosbag record后到开始按下键盘发出控制命令时所经历时间。你可以通过-s参数选项让rosbag play命令等待一段时间跳过bag文件初始部分后再真正开始回放。最后一个可能比较有趣的参数选项是-r选项,它允许你通过设定一个参数来改变消息发布速率。如果你执行:

rosbag play -r 2 <your bagfile>

你应该会看到turtle的运动轨迹有点不同了,这时的轨迹应该是相当于当你以两倍的速度通过按键发布控制命令时产生的轨迹。

录制数据子集

当运行一个复杂的系统时,比如PR2软件系统,会有几百个话题被发布,有些话题会发布大量数据(比如包含摄像头图像流的话题)。在这种系统中,要想把所有话题都录制保存到硬盘上的单个bag文件中是不切实际的。rosbag record命令支持只录制某些特别指定的话题到单个bag文件中,这样就允许用户只录制他们感兴趣的话题。

如果还有turtlesim节点在运行,先退出他们,然后重新启动(relaunch)键盘控制节点相关的启动文件(launch file):

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

在bag文件所在目录下执行以下命令:

rosbag record -O subset /turtle1/command_velocity /turtle1/pose

上述命令中的-O参数告诉rosbag record将数据记录保存到名为subset.bag的文件中,同时后面的话题参数告诉rosbag record只能录制这两个指定的话题。然后通过键盘控制turtle随处移动几秒钟,最后按Ctrl+C退出rosbag record命令。

现在检查看bag文件中的内容(rosbag info subset.bag)。你应该会看到如下类似信息,里面只包含录制时指定的话题:

bag: subset.bag
version: 1.2
start_time: 3196900000000
end_time: 3215400000000
length: 18500000000
topics:- name: /turtle1/command_velocitycount: 8datatype: turtlesim/Velocitymd5sum: 9d5c2dcd348ac8f76ce2a4307bd63a13- name: /turtle1/posecount: 1068datatype: turtlesim/Posemd5sum: 863b248d5016ca62ea2e895ae5265cf9

rosbag record/play 命令的局限性

在前述部分中你可能已经注意到了turtle的路径可能并没有完全地映射到原先通过键盘控制时产生的路径上——整体形状应该是差不多的,但没有完全一样。造成该问题的原因是turtlesim的移动路径对系统定时精度的变化非常敏感。rosbag受制于其本身的性能无法完全复制录制时的系统运行行为,rosplay也一样。对于像turtlesim这样的节点,当处理消息的过程中系统定时发生极小变化时也会使其行为发生微妙变化,用户不应该期望能够完美的模仿系统行为。

现在你已经学会了如何录制和回放数据,接下来我们开始学习如何使用 roswtf来检查系统故障

ROS入门(十五)录制与回放数据相关推荐

  1. R语言实战笔记--第十五章 处理缺失数据

    R语言实战笔记–第十五章 处理缺失数据 标签(空格分隔): R语言 处理缺失数据 VIM mice 缺失值(NA),是导致我们计算错误的一大来源,处理缺失数据在实际的应用中有着较为重要的作用. 基本方 ...

  2. 爬取全国未来十五天的天气数据(python3)

    爬取全国未来十五天的天气数据 一.网页分析 (一)请求分析(url) 1.观察 2.分析 3.结论 (二)行政区域分析 1.观察 2.分析 3.结论 (三)未来15日 天气数据分析 1.观察 2.分析 ...

  3. Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序

    Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序(一) 原文 | 下载本教程中的编码例子 | 下载本教程的PDF版 (以后比较长的部 ...

  4. Hadoop入门(十五)Mapreduce的数据排序程序

    "数据排序"是许多实际任务执行时要完成的第一项工作,比如学生成绩评比.数据建立索引等.这个实例和数据去重类似,都是先对原始数据进行初步处理,为进一步的数据操作打好基础 1 实例描述 ...

  5. python编程15讲答案,[Python编程:从入门到实践] 第十五章:生成数据 习题答案

    Python 小白提交答案,有不足请老鸟们指点,谢谢~ 15-8 同时投掷三个骰子:如果你同时掷三个D6骰子,可能得到的最小点数为3,而最大点数为18,.请通过可视化展示同时掷三个D6骰子的结果 &q ...

  6. 七十五、SpringBoot 的数据缓存cache(二)

    @Author:Runsen 来源:尚硅谷 下面建议读者学习尚硅谷的B站的SpringBoot视频,我是学雷丰阳视频入门的. 具体链接如下:B站尚硅谷SpringBoot教程 文章目录 springb ...

  7. 客快物流大数据项目(二十五):初始化业务数据

    目录 初始化业务数据 一.安装OGG源端 1.在Oracle中创建OGG相关的用户和表空间 2.OGG源端初始化

  8. Scott Mitchell 的ASP.NET 2.0数据教程之四十五::DataList和Repeater数据排序(三)

    第七步: 在自定义分页的Repeater 里添加排序功能 现在已经完成了自定义分页,我们再来添加排序功能.ProductsBLL类的GetProductsPagedAndSorted方法和GetPro ...

  9. MySQL入门笔记(五):另存数据为文件(导出数据)

    在select查询数据之后,要把结果数据保存到文件里,则需要另存数据为文件的操作,即导出数据 mysql> select user,host into outfile 'out.csv' fie ...

最新文章

  1. linux系统资源监控
  2. java 图形校验_java图形验证码生成工具类 web页面校验验证码
  3. java web 多语言_基于 Selenium WebDriver 实现多语言环境下自动化截图
  4. VS toolTip1控件的使用1
  5. mysql sql语句里连接符的使用_SQL中group_concat函数,用符号连接查询分组里字段值...
  6. 中国最富包租婆!每年坐地收租200亿,身家相当于十个老干妈
  7. iPhone 的续航有望加长!749 元的“磁吸充电宝”你会买吗?
  8. 大数据分析的误区有哪些
  9. ASP.NET DROPDOWNLIST无刷新联动(中文URL参数处理)
  10. 提高C#编程水平的50个要诀
  11. Java程序设计(面向对象)- 基本概念
  12. 电脑硬盘怎么测试软件,如何通过软件检测电脑硬盘坏道?
  13. 学生成绩管理系统mysql数据库表,(最新整理)学生成绩管理系统数据库设计
  14. SuperMap iClient3D for WebGL教程(特效)- 点光源
  15. ubuntu nvidia驱动更新
  16. 计算机术语int,整型(计算机语言)_百度百科
  17. 基于javaweb企业合同管理系统
  18. 逻辑回归实例,特征预处理
  19. USB billboard
  20. 海康威视工业相机MAC地址

热门文章

  1. 360天擎sql注入未授权访问
  2. U盘字符质量视觉检测视觉系统-东莞康耐德
  3. python:抓取必应高清壁纸第一张并设置为壁纸 修改注册表 重启壁纸不丢失
  4. css+js+ajax+html实现京东项目
  5. 万佳安联手腾讯云,传统安企开启 AI 新征程
  6. ​McDSP APB Royal Mu母带压缩、Royal Q 母带均衡演示
  7. golang学习笔记之WEB框架ECHO
  8. 885n虚拟服务器,TP-Link TL-WR885N V1-V3路由器桥接设置教程
  9. JVM(一)一文读懂Java编译全过程
  10. 轻松白嫖几十T硬盘空间,阿里云盘转本地硬盘小工具分享~