时间相关:ROS::Time()、ROS::WallTime()、use_sim_time、clock、r
摘要:本文主要总结ros中的时间相关知识点。
一、ros中的两种时间
ROS::Time():表示的是ROS网络中的时间,可以被加速、减速、暂停,可以从由bag中/clock获取。 ROS::WallTime():墙上时间,表示绝对流动的时间,不可以被改变。
二、模拟时间的使用
若模拟时间开启:ros::param use_sim_time = true 然后开始数据播放:rosbag play xxx.bag --clock ROS::Time() :数值为bag中数据的时间戳,可以复原现场。
加上 --clock ,它将会根据bag中数据的时间戳,发送/clock topic,它配合use_sim_time 使用。 ROS::Time 监听 /clock ,使得时间变成bag 时间。 所以操作这个clock的发布者,可以实现一个让Node中得到ROS Time暂停、加速、减速的效果。
若不开启 use_sim_time ,则 ROS::Time() 和 ROS::WallTime() 数据一致,都表示绝对流动的时间。
三、关于播放速度
在我们播放bag的时候,有时候会加速,或者降速播放。比如:
rosbag play -r 2 xxx.bag 或者 rosbag play -r 0.5 xxx.bag
当2倍速播放的时候,bag中两帧数据播放出来的间隔,将会缩短到实际间隔的一半。 但是时间戳不会变,还是bag中的时间戳,并不会改变。
举个例子: 如果一个bag包,有10分钟,采用2倍速播放,5分钟就可以播放完。但是每帧数据的时间戳,并不会改变。
为什么要加速、减速? 有时候计算机算力不够,可以降速播放,保证计算机有更加充裕的时间处理每帧数据,保证下一帧数据来之前,前一帧数据已经处理完成。 如果算力足够,就没有必要额外的等待,可以加速播放,节省时间。
|