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