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

    ROS2包修复

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    rosbag2 rosbag
    2
    2
    379
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 大昊大
      大昊
      最后由 编辑

      大家好,ROS2录制的包缺少了yaml文件,该怎么对它进行修复呢?

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @大昊
        最后由 编辑

        @大昊 请看下面文章

        @小鱼 在 【方法分享】如何修复ROS2录制的Bag文件 中说:

        大家好,我是爱吃鱼香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 条回复 最后回复 回复 引用 0
        • 第一个帖子
          最后一个帖子
        皖ICP备16016415号-7
        Powered by NodeBB | 鱼香ROS