ros:time::now()详解

为什么有时候ros:time::now()输出值为0?

ROS设置了一个模拟时钟的节点,使用模拟时钟的时候,now()返回时间0直到第一条消息在/clock已经收到,所以当客户端不知道时钟时间时ros:time::now()输出为0。

 

ros:time::now()输出的值是什么?

ros:time::now()输出的值与参数use_sim_time有关。

use_sim_time为true时,ros:time::now()输出系统时间;

use_sim_time为false时,ros:time::now()输出输出仿真时间,如果回放bag则是bag的时间。

 

怎么设置参数use_sim_time?

launch文件设置:

<param name="use_sim_time" value="false" />

通过节点设置:

rosparam set use_sim_time true

 

如何直接使用系统时间?

使用 ros::WallTime::now() 

播放rosbag时,若参数/use_sim_time 为true,则此时

  • ros::WallTime::now()为当前的真实时间,也就是墙上的挂钟时间,一直在走。
  • ros::Time::now()为rosbag当时的时间,是由bag中/clock获取的。是仿真时间。

 

posted @ 2021-03-26 10:51  咸鱼翻身!  阅读(9802)  评论(0编辑  收藏  举报