ROS 中 rosbag 相关命令介绍

ROS 中 rosbag 相关命令介绍

rosbag既可以指命令行中数据包相关命令,也可以指 c++/pythond的 rosbag 库。这里的 rosbag 是指前者。

rosbag 主要用于记录、回放、分析 rostopic 中的数据。它可以将指定 rostopic 中的数据记录到.bag后缀的数据包中,便于对其中的数据进行离线分析和处理。

对于 subscribe 某个 topic 的节点来说,它无法区分这个 topic 中的数据到底是实时获取的数据还是从 rosbag 中回放的数据。这就有助于我们基于离线数据快速重现曾经的实际场景,进行可重复、低成本的分析和调试。

本文以简单的 turtlesim 为例,介绍如何用 rosbag 相关命令记录和回放 rostopic 。

录制数据
启动与 turtlesim 相关的两个 ros node

roscore rosrun turtlesim turtlesim_node rosrun turtlesim turtle_teleop_key

前者打开 turtle simulation 的平面仿真环境,后者是一个键盘操作节点。

在开始记录 rostopic 之前,放了方便起见,先创建一个专门的文件夹,存放数据包

mkdir ~/bagfiles

然后进入该文件夹,开始录制数据包:

cd ~/bagfiles rosbag record -a

其中-a选项表示将当前发布的所有 topic 数据都录制保存到一个 rosbag 文件中。

也可以只记录某些感兴趣的 topic,命令如下:

rosbag record /topic_name1 /topic_name2 /topic_name3

上述命令录制的数据包名字为日期加时间。如果要指定生成数据包的名字,则用-O /-o参数,如下:

rosbag record -O filename.bag /topic_name1

其中-O(大写的 O) 后跟录制数据包的名字。如果用-o(小写的 o),则只是给数据包的名字加前缀。

如果在 launch 文件中使用 rosbag record 命令,如下

默认存放路径是 ~/.ros 中。

上边命令开启了数据记录,然后回到turtle_teleop节点所在的终端窗口,控制 turtle 随处移动10秒钟左右。

在运行rosbag record命令的窗口中按Ctrl-C退出该命令,即结束数据记录。

现在在~/bagfiles目录中应该会看到一个以日期和时间命名并以.bag作为后缀的 rosbag 文件,它包含rosbag record运行期间发布的 topic。

检查和回放
rosbag info指令可以显示数据包中的信息:

rosbag info filename.bag

显示类似下边的信息:

bag: 2009-12-04-15-02-56.bag version: 1.2 start_time: 1259967777871383000 end_time: 1259967797238692999 length: 19367309999 topics: – name: /rosout count: 2 datatype: roslib/Log md5sum: acffd30cd6b6de30f120938c17c593fb – name: /turtle1/color_sensor count: 1122 datatype: turtlesim/Color md5sum: 353891e354491c51aabe32df673fb446 – name: /turtle1/command_velocity count: 23 datatype: turtlesim/Velocity md5sum: 9d5c2dcd348ac8f76ce2a4307bd63a13 – name: /turtle1/pose count: 1121 datatype: turtlesim/Pose md5sum: 863b248d5016ca62ea2e895ae5265cf9

这些信息包括 topic 的名称、类型和 message 数量。

接下来回放数据包中的 topic。

首先在turtle_teleop_key所在的终端窗口中按Ctrl+C退出该键盘控制节点。保留turtlesim节点继续运行。在终端中bag文件所在目录下运行以下命令:rosbag play
就能够回放出 bag 中包含的 topic 内容了。

如果想改变消息的发布速率,可以用下面的命令

rosbag play -r 2

这时的轨迹相当于以两倍的速度通过按键发布控制命令时产生的轨迹。-r后面的数字对应播放速率。

如果希望 rosbag 循环播放,可以用命令

rosbag play -l # -l == --loop

如果只播放感兴趣的 topic ,则用命令

rosbag play --topic /topic1

在上述播放命令执行期间,空格键可以暂停播放。

rosbag的命令
rosbag 常用命令列表如下:

命令 作用

check	    确定一个包是否可以在当前系统中进行,或者是否可以迁移。
decompress	压缩一个或多个包文件。
filter	    解压一个或多个包文件。
fix	        在包文件中修复消息,以便在当前系统中播放。
help		获取相关命令指示帮助信息
info		总结一个或多个包文件的内容。
play		以一种时间同步的方式回放一个或多个包文件的内容。
record		用指定主题的内容记录一个包文件。
reindex		重新索引一个或多个包文件。

与例子无关的题外话
回放数据包时,如果想用 Rviz 可视化数据,可能会遇到时间不匹配的问题,出现如下错误信息:

... Message removed because it is too old (frame=..., stamp=...)

这是由于 ROS tf 的发布时间晚于 topic 的时间,Rviz 在做 msg 的 tf 变换时,默认把过时的 msg 丢掉。为了解决这一问题,可以让系统以 msg 对应的 simulated time 运行,而不是实际的 wall-clock time. 步骤如下:

启动 ROS master roscore 指定系统以 simulated time 运行rosparam set /use_sim_time true
官方的解释如下:

This basically tells nodes on startup to use simulated time (ticked here by rosbag) instead of wall-clock time (as in a live system). It avoids confusing time-dependent components like tf, which otherwise would wonder why messages are arriving with timestamps far in the past.

进行其他操作,例如 launch tf 文件,启动 Rviz 等 回放 rosbag 并发布 simulated time rosbag play --clock

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2144.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 计算机网络————IP地址分类以及网络地址的计算[通俗易懂]

    计算机网络————IP地址分类以及网络地址的计算[通俗易懂]一,IP地址分类 1.二进制与十进制的关系 2,IP地址的地址结构及分类IP地址结构:网络号+主机号网络号:中主机中指明中的所在物理网络的编号主机号:中中中主机在物理网络中的编号 IP地址分类:A类(大型),B类(中型),C类(小型),D类(组播),E类(保留地址-研究时使用) A类地址默认掩码:255.0.0.0/8B类地址默认掩码:2…

    2022年6月6日
  • Linux下修改配置文件内容

    Linux下修改配置文件内容文件操作之修改配置文件内容在一些系统或者游戏运行时经常遇到一些情况需要修改一下配置文件的内容,比如游戏中任务升级了,需要修改人物等级,那么这是怎么完成的呢?好,我还是老规矩先来介绍一个函数,strstr一样的查看手册可以看到,该函数有两个参数,第一个参数要查询的字符串,第二个参数是目标子字符串,返回值是一个指针,指向子字符串的开头,如果没有那么返回NULL,什么意思呢,举个例子,比如CHINAENGLISH字符串,我要查找ENGLISH,使用strstr后,返回一个字符指针,指到E位置。好,介绍完

    2022年7月26日
  • 弗洛伊德(Floyd)算法求图的最短路径「建议收藏」

    弗洛伊德(Floyd)算法求图的最短路径「建议收藏」弗洛伊德基本思想弗洛伊德算法作为求最短路径的经典算法,其算法实现相比迪杰斯特拉等算法是非常优雅的,可读性和理解都非常好。基本思想:弗洛伊德算法定义了两个二维矩阵:矩阵D记录顶点间的最小路径例如D[0][3]=10,说明顶点0到3的最短路径为10;矩阵P记录顶点间最小路径中的中转点例如P[0][3]=1说明,0到3的最短路径轨迹为:

    2022年6月4日
  • 数据结构导论第一遍重要吗_数据结构导论自考2018

    数据结构导论第一遍重要吗_数据结构导论自考2018根据以前的经验发现,看一本书,如果一天看一点,一天看一点,到最后也就看了一点点,所以这些天我决定吃个大力丸把《数据结构导论》这本书看完。      我很少能这样看完这样的一本厚厚的书的,如果是以前,可能得连续看半个月以上呢,就是不知道效果怎样而已,这个先不管,毕竟这些天也挺难熬的,大家都知道看书会困的嘛!所以睡不着的时候,床前备一本书,有备无患。这样,你会看到有些人的书上留了很多哈喇子的印记

    2022年8月18日
  • 浅析瀑布流布局及其原理视频_jquery瀑布流布局

    浅析瀑布流布局及其原理视频_jquery瀑布流布局一、什么是瀑布流很多时候我们会看到一些Vlog网站或者展示图片的网站,它们的图片明明每一张的高度大小都不同,但是却能自动地适应,排成一行一行地展示,并且下拉到底的时候,加载的图片也会自动适应,这就是瀑布流,比如下图。…

    2022年10月30日
  • phpstorm2021.12永久激活码【2021最新】

    (phpstorm2021.12永久激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号