ROS:rosbag命令行指令详解(一)

目录

获取当前工作目录下bag文件的信息

在当前工作目录下创建bag文件

对指定话题进行录制


获取当前工作目录下bag文件的信息

1. 以列表的方式显示bag文件的信息:

指令格式:rosbag info BagFileName.bag

结果如下所示:

在这个信息列表中包含了“参与通信的消息类型types、话题名称topics以及两者的对应关系(topics:types)”。

2. 以yaml格式显示bag文件的信息:

指令格式:rosbag info -y BagFileName.bag

结果如下所示:

YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。

3. 基于yaml信息表示形式,提取bag文件的某类信息:

指令格式:rosbag info -y -k info_type BagFileName.bag

结果如下所示:

可提取的信息类型为:消息的类型types、话题相关信息topics、bag文件存放路径path、ROS的版本信息vision、录制持续时长duration、录制开始时间start/停止时间end、bag文件大小(以byte为单位)、录制消息总数量messages、文件的压缩格式compression、是否添加至索引列表indexed。

在当前工作目录下创建bag文件

1. 文件以“NAME_开始录制时的时间戳“的名称命名

指令格式:rosbag record -o base_name

执行结果:

2. 文件以“指定名称”的名称命名

指令格式:rosbag record -O name

执行结果:

对指定话题进行录制

1. 对指定话题进行录制

指令格式:rosbag record topic_name1 topic_name2…

2. 对所有话题进行录制

指令格式:rosbag record -a

3. 对符合要求的topic进行录制

指令格式:rosbag record -e –regex

其中–regex表示正则表达式,表征着我们想要匹配的条件,简单示例:

ROS中正则表达式的使用规则:

ROS中正则表达式的使用(rosbag record -e --regex)_超级霸霸强的博客-CSDN博客https://blog.csdn.net/weixin_45590473/article/details/123271341

指令格式:rosbag record -e –regex -x –regex

我们对比发现:-x指令意味着从-e指令筛选出的topic中排除一些符合条件的topic。

4. 当开始录制时,发布一条通知消息

当我们查看topic列表,会发现:

当开始录制bag文件时,会产生一个节点专门记录订阅主题,并将在这些主题上发布的所有消息的内容写入一个包文件:

并且在开始录制时,监听节点会向/begin_write全局消息发送一条string类型的消息。

5. 录制指定时间

--duration数值

录制时长

--duration=0

无限长时间录制

--duration=5s

录制5s

--duration=5m

录制5min

--duration=5h

录制5hour

使用rosbag record指令时,指定录制时间使用—duration开头,以“—duration=time_value”的形式输入,主要形式有以下几种:

命令

单位

—duration=5s

s

—duration=5m

min

—duration=5h

hour

当然,也可以对某一个特定的topic进行指定时间的录制:

虽然—duration=time_value topic_name可以对指定topic话题发布的消息录制指定的时长,但是当-a -e与其同时存在时,情况如下所示:

无论使用什么topic匹配指令,最后录制的话题都是所有录制话题的“并集“

6. 创建bag文件

7. 按照指定条件拆分bag文件

指令格式:--split –duration=time_value 或者 —size=size_value

由于文件的输出有两种(-o和-O),一种是base_name加时间戳后缀的,一种是指定base_name,这两种文件名格式生成的拆分bag文件如下所示:

--duration和--size只能存在一个,两者不可共存!

8. 指定最大生成文件拆分次数

指令格式:–max-split=max_split_number

我们一定要将最大文件拆分次数和最大生成文件总是区分开来,文件拆分次数与文件总数关系如下所示:

文件拆分次数

文件总数

备注

1

2

一刀两块

2

3

两刀三块

3

4

三刀四块

N

N+1

N刀(N+1)块

从上面的关系表格就可以得出–max-split数值与文件总数的关系:

–max-split

文件总数

备注

0

最多可以得到无穷多个文件

N

N+1

最多可以得到(N+1)个文件

9. 消息缓冲队列的大小

--buffsize数值

录制文件大小

--buffsize=0

无穷大

--buffsize=5

消息队列缓冲区的大小为5MB

命令示例:

下面这个命令也是开辟缓冲区,但是比起—buffsize更加先进:

--chunksize数值

录制文件大小

--chunksize=0

无穷大

--chunksize=5

消息队列缓冲区的大小为5KB

命令示例:

对于chunksize和buffsize的区别,我着实没有理解,如果大家有新的见解,敬请回复,在ROS wiki上两者的区别如下:

我这里只知道:消息队列是协调消息收发双方速度不匹配而分配的缓冲区。关于文件缓冲区,详见:[Linux]——文件缓冲区_lucky52529的博客-CSDN博客_文件缓冲区https://blog.csdn.net/lucky52529/article/details/90546674

10. 针对于topic录制指定数量的消息

对于全部topic进行指定消息数量的录制:

对于特定topic进行指定消息数量的录制:

我们可以使用rosbag info bag_file_name.bag来查看:

11. 记录特定节点接受的消息

其中/turtlesim_node节点所在的节点图如下所示:

其中/turtlesim_node节点订阅的话题也就两个“/turtle2/cmd_vel“和”/turtle1/cmd_vel“。

12. bag文件的压缩

BZ2压缩格式:

LZ4压缩格式:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥肥胖胖是太阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值