[ROS]using rosbag and rosplay

本贴最后更新于 3036 天前,其中的信息可能已经时异事殊

####1.记录数据(创建 bag 文件)

本教程将指导如何记录正在 ROS 系统中运行的主题的数据。主题的数据将保存在 bag 文件中。
首先,执行以下命令:

roscore
rosrun turtlesim turtlesim_node 
rosrun turtlesim turtle_teleop_key

上述命令将启动 2 个节点,turtlesim 仿真窗口和键盘方向控制窗口。如果你选择启动 turtle_keyboard 的窗口,可以看到下面的内容:

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

在 turtle_keyboard 窗口按下方向键将看到小乌龟在移动。注意要选择键盘控制的窗口。
#####1.1 记录所有的主题

首先检查下当前系统已经发布的主题有那些。执行:

rostopic list -v

可以看到下面的内容:

Published topics:
 * /turtle1/color_sensor [turtlesim/Color] 1 publisher
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
 * /rosout [rosgraph_msgs/Log] 2 publishers
 * /rosout_agg [rosgraph_msgs/Log] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
 * /rosout [rosgraph_msgs/Log] 1 subscriber

列出来的已发布的主题是仅有的潜在的能被记录到数据日志文件的数据类型,同时发布的数据也会记录。teleop_turtle 发布的/turtle1/cmd_vel 命令数据是作为 turtlesim 进程的输入。/turtle1/color_sensor 和/turtle1/pose 是 turtlesim 输出的数据。
现在,我们将记录发布的数据。打开一个新的命令行窗口。执行:

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

这里我们这是创建了一个临时的目录用来保存数据,然后运行 rosbag record -a,-a 表示保存所有的已发布的主题的数据到一个 bag 文件里。

返回 turtle_teleop 窗口,移动小乌龟 10S 左右。

在运行 rosbag 的窗口按下 ctrl+c。现在,检查下 ~/bagfiles 目录下的内容。你可以看到一个以年、数据、时间、后缀为.bag 为名字的文件。这个文件保存了 rosbag record 执行期间所有已任意节点发布主题的数据。

####2.检验和播放 bag 文件

前文通过 rosbag record 命令已经将数据保存到了 bag 文件,现在我们通过 rosbag info 和 rosbag play 文件来检查和回放数据。首先查看 bag 文件保存了什么。可以使用 rosbag info 来查看,这个命令将检查 bag 文件的内容而不用回放。在 bag 文件的目录下执行:

rosbag info <bag文件名>

可以看到类似的信息:

path:        2014-12-10-20-08-34.bag
version:     2.0
duration:    1:38s (98s)
start:       Dec 10 2014 20:08:35.83 (1418270915.83)
end:         Dec 10 2014 20:10:14.38 (1418271014.38)
size:        865.0 KB
messages:    12471
compression: none [1/1 chunks]
types:       geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
             rosgraph_msgs/Log   [acffd30cd6b6de30f120938c17c593fb]
             turtlesim/Color     [353891e354491c51aabe32df673fb446]
             turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]
topics:      /rosout                    4 msgs    : rosgraph_msgs/Log   (2 connections)
             /turtle1/cmd_vel         169 msgs    : geometry_msgs/Twist
             /turtle1/color_sensor   6149 msgs    : turtlesim/Color    
             /turtle1/pose           6149 msgs    : turtlesim/Pose

上面显示了主题的名字,类型,以及包含在 bag 文件中的每一种消息的数目。我们可以看到在 rostopic 输出里广播的主题,五分之四的主题在我们记录间隔里实际发布。通过 rosbag record -a 命令将记录所有节点发布的所有消息。

接下来的教程将回放 bag 文件,重现系统运行时的行为。首先你停止 turtle_teleop 窗口,保持 turtlesim 窗口运行。在命令行窗口,在 bag 文件的目录下运行:

rosbag play <your bagfile>

可以看到类似:

[ INFO] [1418271315.162885976]: Opening 2014-12-10-20-08-34.bag

Waiting 0.2 seconds after advertising topics... done.

Hit space to toggle paused, or 's' to step.

rosbag play 的默认模式下将等待 0.2 秒之后才开始播放 bag 文件的内容。等待的这一段时间允许消息的任意订阅者提示接下来将发布的消息以及接下来的具体的消息。如果 rosbag play 立马发布消息,订阅将收不到一开始发布的消息。具体要等待多久可以通过-d 选项来设置。
最终,回放的效果跟实际通过鼠标控制的效果是一样的。也可以通过-s 选项来选择开始播放的时间点。-r 选项是选择播放的速度:

rosbag play -r 2 <your bagfile>

可以看到运行的效果跟之前的不一样,这是因为回放是以 2 倍的速度去点击键盘的。

####3.保存数据的子集

当运行复杂系统的时候,比如 pr2 软件集,将有成百的主题发布。对于一些主题,比如摄像头图片流,有可能发布大量的数据。这样的系统写入所有主题的日志文件到一个单独的 bag 文件是不可行的。rosbag record 命令支持部分主题的日志输出,仅仅只记录用户关注的主题。
执行:

rosrun turtlesim turtlesim_node 
rosrun turtlesim turtle_teleop_key

在 bag 文件的目录下执行:

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

-O 选项指定保存日志到 subset.bag 文件,topic 参数指定了需要记录的两个主题。通过键盘的方向键移动小乌龟,然后按下 Ctrl+c 终止记录。

现在通过使用 rosbag info subset.bag 来检查 bag 文件的内容。可以看到类似的:

path:        subset.bag
version:     2.0
duration:    12.6s
start:       Dec 10 2014 20:20:49.45 (1418271649.45)
end:         Dec 10 2014 20:21:02.07 (1418271662.07)
size:        68.3 KB
messages:    813
compression: none [1/1 chunks]
types:       geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
             turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]
topics:      /turtle1/cmd_vel    23 msgs    : geometry_msgs/Twist
             /turtle1/pose      790 msgs    : turtlesim/Pose

####4.rosbag record/play 的限制

在之前的教程中可以看到小乌龟的运行路径不是很准确的跟着原始的键盘输入运行,大概的形状可能看起来一样,但是小乌龟的运行的不是准确的路径。造成这样的原因是:小乌龟的运行路径对系统时间小的改变敏感,rosbag 不能很精确的记录系统运行时的行为,比如消息被 roscord 记录和处理,被 rosplay 产生和处理。对于像 turtlesim 一样的节点,当命令消息处理的时候,监视器的时间改变会微妙的改变行为,所以不要期望会精确的复现行为。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 4 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 632 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1435 引用 • 10056 回帖 • 489 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 780 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    196 引用 • 540 回帖 • 1 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    545 引用 • 672 回帖
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 倾城之链
    23 引用 • 66 回帖 • 138 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 7 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖 • 1 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 158 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 4 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 172 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • 音乐

    你听到信仰的声音了么?

    61 引用 • 511 回帖 • 1 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 72 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 2 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 221 关注
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 632 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 5 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖 • 5 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    126 引用 • 169 回帖
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    171 引用 • 512 回帖