【问题标题】:How can I synchronize two ROS bags?如何同步两个 ROS 包?
【发布时间】:2021-11-04 04:42:53
【问题描述】:

想象一下,我有一个 rosbag,上面记录了一些消息。

我想提取一些消息,对其进行一些操作,然后记录另一个“结果”包。

稍后我想rosbag play 两个包文件,我希望它们以相同的速度播放,因此同步。

我该怎么做?

【问题讨论】:

    标签: ros rosbag


    【解决方案1】:

    您可以使用rosbag api。如果您只是在编辑数据元素,您所要做的就是确保将std_msgs/Header 字段从输入复制到输出消息,因为这是存储时间戳的地方。如果要播放两个包文件,只需将它们作为普通参数传递给rosbag play,例如rosbag play *.bag,即可播放当前目录中的所有包文件。如果您有兴趣将它们组合成一个包文件,也可以查看rosbag cookbook

    【讨论】:

    • 我已经完成了所有这些。结果是我有两个包,具有相同的 Header 字段(如您所说复制)。问题是它们的长度和持续时间不同,因为我以 10 Hz 而非原始频率发布了第二个。
    • 除了以不同的速率记录之外,您没有其他可以做的不同。以 10Hz 运行的节点将比以 5Hz 运行的节点拥有更多消息
    【解决方案2】:

    Rosbag 在播放时会同步多个包。根据rosbag documentation

    如果使用两个单独的包文件,则根据时间戳将它们视为具有交错时间的单个包。这意味着如果您录制一个包,等待一个小时,然后录制第二个包,当您一起播放它们时,您将在播放中间有一个长达一小时的死区。

    如果在播放 rosbag 时,您想记录第二个包的时间戳与第一个包一致,请确保将 /use_sim_time 设置为 true。否则新包里的消息会被打上当前系统时间,这不是你想要的。

    rosparam set use_sim_time true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      相关资源
      最近更新 更多