本文主要是介绍[ROS 系列学习教程] rosbag 命令行介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ROS 系列学习教程(总目录)
本文目录
- rosbag 命令行
- 1.1 rosbag check
- 1.2 rosbag compress
- 1.3 rosbag decompress
- 1.4 rosbag filter
- 1.5 rosbag fix
- 1.6 rosbag info
- 1.7 rosbag play
- 1.8 rosbag record
- 1.9 rosbag reindex
有时我们需要将 topic 中的数据保存下来以便后面分析,为了提供这一功能,ROS提供了 rosbag
工具集。
rosbag提供了API接口和命令行工具,其中常见的API包括C++和Python。
rosbag 命令行
常用命令行
rosbag check 检查一个包是否可以在当前系统中播放
rosbag compress 压缩一个或多个bag文件
rosbag decompress 解压缩一个或多个bag文件
rosbag filter 根据条件过滤bag文件内容
rosbag fix 修复bag文件中的消息,以便在当前系统中播放
rosbag info 查看bag文件简要信息
rosbag play 以时间同步的方式播放一个或多个bag文件的内容
rosbag record 记录一个包含指定topic内容的bag文件
rosbag reindex 重新索引一个或多个bag文件
1.1 rosbag check
有时我们需要更新topic的msg,但对于已经录制的bag文件,它使用的是旧的msg,此时的bag文件会与系统的新msg发生冲突,ROS为了解决这一问题,设计了 bag migration
包迁移机制 。一个bag文件是否需要迁移则可以使用 rosbag check
命令检查。
1.2 rosbag compress
压缩一个或多个bag文件
目前支持 bz2
和lz4
格式,默认为 bz2
,使用 --lz4
选项可以选择 lz4
压缩格式。
另外,每次压缩文件之前,会备份每个包文件(扩展名为 .orig.bag),如果备份文件已存在(并且未指定 -f
选项),则该工具将不会压缩该文件。
该指令选项说明如下:
compress <bag-files>
使用bz2
格式压缩bag文件
rosbag compress *.bag
--output-dir=DIR
设置文件保存路径
rosbag compress --output-dir=compressed *.bag
-f, --force
强制重写备份文件
rosbag compress -f *.bag
-q, --quiet
抑制非关键信息
rosbag compress -q *.bag
-j, --bz2
使用bz2格式压缩数据
rosbag compress -j *.bag
--lz4
使用lz4格式压缩数据
rosbag compress --lz4 *.bag
1.3 rosbag decompress
解压缩一个或多个bag文件
每次解压缩文件之前,会备份每个包文件(扩展名为 .orig.bag),如果备份文件已存在(并且未指定 -f
选项),则该工具将不会解压缩该文件。
该指令选项说明如下:
decompress <bag-files>
使用bz2
格式压缩bag文件
rosbag decompress *.bag
--output-dir=DIR
设置文件保存路径
rosbag decompress --output-dir=compressed *.bag
-f, --force
强制重写备份文件
rosbag decompress -f *.bag
-q, --quiet
抑制非关键信息
rosbag decompress -q *.bag
1.4 rosbag filter
根据条件过滤bag文件内容
显示与指定python语法的逻辑表达式匹配的消息
rosbag filter input.bag output.bag "逻辑表达式"
rosbag filter input.bag output.bag "m.data=='foo'"
其中,input.bag
表示过滤之前的bag文件,output.bag
表示过滤之后的bag文件。
逻辑表达式中的 m
表示 msg
,另外,还有 topic
表示 topic
,t
表示 timestamp
。
该命令的选项说明如下:
--print=PRINT-EXPRESSION
将逻辑表达式的匹配情况打印出来
rosbag filter --print="'%s @ %d.%d: %s' % (topic, t.secs, t.nsecs, m.data)" big.bag small.bag "topic == '/chatter'"
1.5 rosbag fix
修复bag文件中的消息,以便在当前系统中播放
如前rosbag check
所述,如果bag文件需要迁移,则可以使用 rosbag fix
修复。
rosbag fix old.bag repaired.bag myrules.bmr
其中,old.bag
为修复之前的bag文件,repaired.bag
为修复之后的bag文件,myrules.bmr
为修复规则,修复规则相关详见 包迁移机制 。
1.6 rosbag info
查看bag文件简要信息
该命令的选项说明如下:
-y, --yaml
以 YAML 格式输出
rosbag info -y test.bag
-k KEY, --key=KEY
仅打印给定字段信息(需要配合-y
选项使用)
1.7 rosbag play
以时间同步的方式播放一个或多个bag文件的内容
rosbag play test1.bag test2.bag
在播放时可以随时按 空格键
以暂停播放,同时暂停播放后,可以按 s
键以单步播放。
该命令的选项说明如下:
-i, --immediate
立即播放所有topic
rosbag play -i recorded1.bag
--pause
以暂停模式开始播放
rosbag play --pause recorded1.bag
--queue=SIZE
使用大小为SIZE的传出队列 (defaults to 0. As of 1.3.3 defaults to 100).
rosbag play --queue=1000 recorded1.bag
--clock
发布时钟时间
rosbag play --clock recorded1.bag
--hz=HZ
已指定频率Hz发布 (default: 100).
rosbag play --clock --hz=200 recorded1.bag
-d SEC, --delay=SEC
每次调用发布者后等待SEC秒,以等待订阅者连接
rosbag play -d 5 recorded1.bag
-r FACTOR, --rate=FACTOR
将发布频率乘以 FACTOR.
rosbag play -r 10 recorded1.bag
-s SEC, --start=SEC
开始SEC秒进入bag
rosbag play -s 5 recorded1.bag
-u SEC, --duration=SEC
仅播放包文件中的 SEC 秒。
rosbag play -u 240 recorded1.bag
--skip-empty=SEC
跳过包中超过 SEC 秒没有消息的区域。
rosbag play --skip-empty=1 recorded1.bag
-l, --loop
循环播放
rosbag play -l recorded1.bag
-k, --keep-alive
在包结束后保持活动状态(对于发布锁定的主题很有用)。
rosbag play -k recorded1.bag
--try-future-version
即使用户不知道版本号,仍然尝试打开包文件
--topics
指定要播放的主题
rosbag play recorded1.bag --topics /topic1 /topic2 /topic3
--pause-topics
播放期间暂停的主题
--bags=BAGS
打包要播放的文件
--wait-for-subscribers
发布前等待每个主题至少有一个订阅者
--rate-control-topic=RATE_CONTROL_TOPIC
观察给定主题,如果上次发布时间超过 之前,则等到该主题再次发布才能继续播放
--rate-control-max-delay=RATE_CONTROL_MAX_DELAY
暂停前与 的最大时间差
1.8 rosbag record
记录一个包含指定topic内容的bag文件
如果以高带宽录制消息(例如来自摄像机),强烈建议在摄像机所在的同一台计算机上运行rosbag record
,并将文件目标指定为本地计算机磁盘上。
可以指定多个topic
rosbag record rosout tf cmd_vel
该命令的选项说明如下:
-a, --all
记录所有topic,订阅topic是通过轮询master注册topic实现的,rosbag record -a
可能会错过某些topic的初始消息。
rosbag record -a
-e, --regex
通过正则匹配topic
rosbag record -e "/(.*)_stereo/(left|right)/image_rect_color"
-p, --publish
New in ROS Melodic
排除与给定正则表达式匹配的主题(从-a
或-e
中减去)。
rosbag record -e "/wide_stereo(.*)" -x "(.*)/points(.*)"
-d, --duration
指定录制的包文件的最大持续时间。
rosbag record --duration=30 /chatter
rosbag record --duration=5m /chatter
rosbag record --duration=2h /chatter
--max-splits=MAX_SPLITS
New in ROS Kinetic
最多拆分包 MAX_SPLITS 次,然后开始删除最旧的文件。这将创建固定大小或持续时间的记录。
rosbag record --split --size 1024 --max-splits 3 /chatter
rosbag record --split --duration 10m --max-splits 6 /chatter
-b SIZE, --buffsize=SIZE
使用 SIZE MB 的内部缓冲区(默认值:256,0 = 无限)。这是在消息传递到包之前记录器对象的消息队列。降低此值可能会导致消息在到达记录进程之前被丢弃。
rosbag record -b 1024 /chatter
--chunksize=SIZE
记录到 SIZE KB 的块(默认值:768)。这是包文件对象内的缓冲区。降低该值将导致更多的磁盘写入。
rosbag record --chunksize=1024 /chatter
-l NUM, --limit=NUM
每个topic仅记录 NUM 条消息。
rosbag record -l 1000 /chatter
--node=NODE
记录指定节点订阅的所有主题
rosbag record --node=/joy_teleop
-j, --bz2
使用 BZ2 压缩。详细信息请参见 rosbag compress
rosbag record -j /chatter
--lz4
使用LZ4压缩。详细信息请参见 rosbag compress
rosbag record --lz4 /chatter
-tcpnodelay
订阅主题时使用 TCP_NODELAY 传输提示
--udp
订阅主题时使用 UDP 传输提示
1.9 rosbag reindex
用于修复损坏的包文件(或 ROS 版本 0.11 之前记录的包文件)。如果由于任何原因未完全关闭包,则索引信息可能会损坏。使用该工具重新读取消息数据并重建索引。
在重新索引包之前,会备份每个包文件(扩展名为.orig.bag
)。如果备份文件已存在(并且未指定-f
选项),则该工具将不会重新索引该文件。
该命令的选项说明如下:
--output-dir=DIR
指定保存的路径
rosbag reindex --output-dir=reindexed *.bag
-f, --force
强制重写备份文件
rosbag reindex -f *.bag
-q, --quiet
抑制非关键信息
rosbag reindex -q *.bag
这篇关于[ROS 系列学习教程] rosbag 命令行介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!