ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

sync ros bag timestamps with ros system

asked 2014-01-28 00:20:49 -0600

Sentinal_Bias gravatar image

Currently I am publishing frames from a ROS bag file, using recorded timestamps. When I try a publish a pointcloud using from a current node. Frames do not exist to publish the topic, this is because the frames are being broadcast from a bagfile and hence have old time stamps.

One solution was the re-write the timestamps in the bag files and then play them. However by the time you parse and re-write the bag files and play them the time stamps will be too old again.

I am wondering if there was a way to force the ROS system time to equal the earliest time in the bagfile, once the bag file play command is given?

My current idea, to publish a time stamp message from the ROS bag file. Then all nodes will subscribe to this, therefore when something is published from my nodes, it can refer to the bagfile time stamp. This method would fall apart when you are rely on third party nodes to publish certain things eg pcd2pointcloud node.

Another method, would be to figure out the offset in time between the current time and the bagfile time, therefore you could publish a pointcloud to the correct time. This method would mean you cannot play the bagfile at half speed.

edit retag flag offensive close merge delete

3 Answers

Sort by » oldest newest most voted

answered 2014-01-28 00:40:05 -0600

Procópio gravatar image

updated 2014-01-28 19:36:20 -0600

Yes, there is a a way to force the ROS system time to use the time stored in your bagfile. To do this you must:

  1. set the use_sim_time parameter to true:

    rosparam set use_sim_time true

  2. play your bag file with the argument --clock:

    rosbag play xxxx.bag --clock

I hope this solve your issue. For further info you can check this page

more info: here and in the wiki

edit flag offensive delete link more

answered 2014-01-28 00:41:57 -0600

dornhege gravatar image

You should approach the problem from the other direction. Use the --clock option when playing a bag file. Depending on the nodes you start you might also want to set use_sim_time to true on the param server.

This will publish ROS time on the /clock topic and then ROS time will be the time from the bag file. System time doesn't exist any more unless explicitly requested by using a ros::WallTime.

edit flag offensive delete link more

answered 2022-12-06 12:48:52 -0600

ebrahim gravatar image

Hello as Procópio with detailed steps :
first step:


second step:

rosparam set use_sim_time true

third step:

rosbag play name_of_the_bag.bag --clock

if this command doesn't work well you can try:

rosbag play name_of_the_bag.bag
edit flag offensive delete link more

Question Tools



Asked: 2014-01-28 00:20:49 -0600

Seen: 19,132 times

Last updated: Dec 06 '22