鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    【方法分享】如何修复ROS2录制的Bag文件

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    ros2 bag metadata 修复 reindex
    1
    1
    1.3k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬
      最后由 编辑

      大家好,我是爱吃鱼香ROS的小鱼,今天有位小伙伴再社区提问关于ROS2包如何修复的问题。

      72a14de5-ed49-4319-8a39-8e4cf17ffa42-image.png

      当我们录制一个ros2的bag时可以得到一个文件夹,文件夹里包含ROS2的功能包的sqlite3数据库文件,和一个配置文件``

      小鱼特地跑去测试了下,在最新的humble版本ROS2上,ros2 bag是支持一个叫做reindex的指令的,通过这个指令可以重建ROS2录制的功能包的metadata.yaml。

      内容大概是下面这样

      rosbag2_bagfile_information:
        version: 5
        storage_identifier: sqlite3
        duration:
          nanoseconds: 6546711316
        starting_time:
          nanoseconds_since_epoch: 1667814329449907668
        message_count: 29
        topics_with_message_count:
          - topic_metadata:
              name: /chatter
              type: std_msgs/msg/String
              serialization_format: cdr
              offered_qos_profiles: "- history: 3\n  depth: 0\n  reliability: 1\n  durability: 2\n  deadline:\n    sec: 9223372036\n    nsec: 854775807\n  lifespan:\n    sec: 9223372036\n    nsec: 854775807\n  liveliness: 1\n  liveliness_lease_duration:\n    sec: 9223372036\n    nsec: 854775807\n  avoid_ros_namespace_conventions: false"
            message_count: 7
          - topic_metadata:
              name: /rosout
              type: rcl_interfaces/msg/Log
              serialization_format: cdr
              offered_qos_profiles: "- history: 3\n  depth: 0\n  reliability: 1\n  durability: 1\n  deadline:\n    sec: 9223372036\n    nsec: 854775807\n  lifespan:\n    sec: 10\n    nsec: 0\n  liveliness: 1\n  liveliness_lease_duration:\n    sec: 9223372036\n    nsec: 854775807\n  avoid_ros_namespace_conventions: false"
            message_count: 22
        compression_format: ""
        compression_mode: ""
        relative_file_paths:
          - rosbag2_2022_11_07-17_45_29_0.db3
        files:
          []
      

      这个文件其实是对sqlite文件内容的描述,因为我们如果只看sqlite文件是没办法直观得到看到话题的信息的。

      所以我们可以通过读取sqlite文件之后再生成这个描述文件,代价就是需要读取一次。

      ROS2提供了这一个指令,你可以试一下,先随便录制一个包,然后把原有的metadata.yaml删掉,接着再文件夹的上一级进行重建metadata.yaml文件。

      发布话题

      ros2 run demo_nodes_py talke
      

      录制包,打断并删除重建

      ros2 bag record --all
      Ctrl+C
      # 删除文件
      rm -rf rosbag2_2022_11_07-17_45_29/metadata.yaml
      # 重建索引
      ros2 bag reindex rosbag2_2022_11_07-17_45_29/ sqlite3
      

      这样你打开文件夹之后就会得到一个新的metadata.yaml文件了。

      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

      1 条回复 最后回复 回复 引用 1
      • 小鱼小 小鱼 在 中 引用了 这个主题
      • 第一个帖子
        最后一个帖子
      皖ICP备16016415号-7
      Powered by NodeBB | 鱼香ROS