想象一下,我有一个 rosbag,上面记录了一些消息。
我想提取一些消息,对其进行一些操作,然后记录另一个“结果”包。
后来我想要rosbag play
两个包文件,我希望它们以相同的速度播放,因此同步。
我怎样才能做到这一点?
Rosbag 在播放时会同步多个包。根据rosbag 文档:
如果使用两个单独的包文件,则根据时间戳将它们视为具有交错时间的单个包。这意味着如果您录制一个包,等待一个小时,然后录制第二个包,当您一起播放它们时,您将在播放中间有一个长达一小时的死区。
如果在播放 rosbag 时,您想记录第二个包的时间戳与第一个包一致,请确保设置/use_sim_time
为 true。否则新包里的消息会被打上当前系统时间,这不是你想要的。
rosparam set use_sim_time true
您可以使用rosbag api。如果您只是在编辑数据元素,您所要做的就是确保将std_msgs/Header
字段从输入复制到输出 msg,因为这是存储时间戳的地方。如果你想播放两个包文件,你只需将它们作为普通参数传递给rosbag play
例如rosbag play *.bag
播放当前目录中的所有包文件。如果你有兴趣做一些事情,比如将它们组合成一个单独的包文件,你也可以查看rosbag 食谱。