【方法分享】如何修复ROS2录制的Bag文件
-
大家好,我是爱吃鱼香ROS的小鱼,今天有位小伙伴再社区提问关于ROS2包如何修复的问题。
当我们录制一个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文件了。
-