ROS 1 和 ROS 2 的bag包互转方法

一、bag包格式差异

  1. 文件格式
    • ros1:使用单一的 .bag 文件格式,基于自定义的二进制格式,包含消息数据、元数据(话题名称、时间戳等)和索引。
    • ros2:默认使用 SQLite3 数据库格式(.db3 文件),存储在目录结构中(例如 rosbag2_YYYY_MM_DD_HH_MM_SS)。也可以选择其他存储插件(如 MCAP 格式),更模块化。
  2. 存储方式
    • ros1:数据以连续的二进制流存储,消息按时间顺序写入。索引存储在文件末尾,用于快速定位(若索引损坏需 rosbag reindex 修复)。
    • ros2:使用数据库(如 SQLite3)存储,消息分表保存,元数据和数据分离。
      支持更灵活的查询和扩展,不依赖单一文件结构。
  3. 消息序列化
    • ros1:使用自定义的序列化格式(ros 1 的 raw 格式)。与 ros 1 的消息类型紧密耦合。
    • ros2:使用 CDR(Common Data Representation)格式,基于 DDS(Data Distribution Service)标准。更通用,与 ros 2 的中间件兼容。

二、bag包转换工具

rosbags-convertrosbags 库的一部分,而 rosbags 是一个纯 Python 实现的工具包,专注于处理 ros 的 rosbag 文件。rosbag 文件是 ros 中用于存储消息数据的文件格式,常用于记录传感器数据、话题消息等,以便后续分析或回放。rosbags-convert 的主要功能是将 ros 1 的 rosbag 文件(通常为 .bag 格式)转换为 ros 2 的 rosbag 文件(通常为目录结构或 .db3 文件),或者将 ros 2 的 rosbag 文件转换回 ros 1 格式。常用指令如下:

  1. rosbags 库可以通过 Python 的包管理工具 pip 安装,rosbags-convert 作为其命令行工具会随之可用。

    pip install rosbags
    ------------------------------------------
    # 同样可以指定其他源下载:
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple rosbags
    
  2. bag包互转

    rosbags-convert --src ros1.bag --dst ros2bag/
    ------------------------------------------
    # --src <输入路径>:源文件是 ros1格式.bag 或 ros2的bag目录。
    # --dst <输出文件>:目标转换文件的路径。
    
  3. 指定转换的话题

    rosbags-convert --src input.bag --dst output --topics /camera/image_raw /imu/data
    -------------------------------------------
    # --topics <topic1> <topic2>:指定要转换的 topic 列表,默认转换所有 topic
    
  4. 指定转换的时间范围

    rosbags-convert --src input.bag --dst output --start 5 --end 60
    -------------------------------------------
    # --start <seconds> 和 --end <seconds>:指定转换的时间范围,适合大文件部分转换。
    
  5. 请保持备份的好习惯,以防转换过程中出现问题,在转换后,请仔细检查并测试新的bag文件,避免数据源出现问题!!

小结

rosbags-convert不依赖 ROS 1 或 ROS 2 的运行环境,只需安装 Python 和 rosbags 库即可运行。专门设计用于 ROS 1 和 ROS 2 的 bag 文件互转,能够直接处理两种格式的差异,简单易用,社区支持较好。如有其他问题,欢迎在评论区交流!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值