< >
Home » ROS与C++入门教程 » ROS与C++入门教程-Time(时间)

ROS与C++入门教程-Time(时间)

ROS与C++入门教程-Time(时间)

说明:

  • 介绍ros时间和持续时间的使用

时间和间隔

  • 查阅:ros::TimeBase API docs, ros::DurationBase API docs
  • ROS具有内置的时间和持续时间的原始类型,由roslib提供独立的ros::Time和ros::Duration类。
  • 时间是指某个时刻,如下午5点。持续时间是指一段时间,如5个小时,持续时间也是是负数。
  • 时间和持续时间具有相同的表示:
int32 sec
int32 nsec
  • ROS有能力设置一个模拟时钟的节点。
  • 替代使用平台的时间程序,你应该使用的roscpp时间程序访问当前时间,它能让模拟时钟以及普通时钟的时间无缝工作。

获取当前时间

  • 函数:ros::Time::now()
  • 作用:得到ros::Time实例化的当前时间
  • 示例:
ros::Time begin = ros::Time::now();

Time zero(时间0)

  • 使用模拟时钟的时候,now()返回时间0直到第一条消息在/clock已经收到。
  • 所以0意味着客户端不知道时钟时间。
  • 因此0值应区别对待,如循环now()直到非零返回。

时间和持续时间实例

  • 您可以为特定值创建一个时间或持续时间,也可以是浮点秒:
ros::Time a_little_after_the_beginning(0.001);
ros::Duration five_seconds(5.0);
  • 或通过两个整数构造函数:
ros::Time a_little_after_the_beginning(0, 1000000);
ros::Duration five_seconds(5, 0);

转换时间和持续时间实例:

  • 时间和持续时间的对象也可以变成浮点秒:
double secs =ros::Time::now().toSec();

ros::Duration d(0.5);
secs = d.toSec();

时间和持续时间算术运算

  • 与其他原始类型一样,可以在时间和持续时间上进行算术运算。
  • 人们经常混淆了这些实例是什么算术,所以很好的运行一些例子:
    • 1 hour + 1 hour = 2 hours (duration + duration = duration)
    • 2 hours - 1 hour = 1 hour (duration - duration = duration)
    • Today + 1 day = tomorrow (time + duration = time)
    • Today - tomorrow = -1 day (time - time = duration)
    • Today + tomorrow = error (time + time is undefined)
  • 时间和持续时间实例的算术类似于上面的例子:
ros::Duration two_hours = ros::Duration(60*60) + ros::Duration(60*60);
ros::Duration one_hour = ros::Duration(2*60*60) - ros::Duration(60*60);
ros::Time tomorrow = ros::Time::now() + ros::Duration(24*60*60);
ros::Duration negative_one_day = ros::Time::now() - tomorrow;

Sleeping and Rates(睡眠和速率)

  • 函数:bool ros::Duration::sleep()
  • 作用:为持续时间指定的睡眠时间
  • 示例:
ros::Duration(0.5).sleep(); // sleep for half a second
  • 函数:ros::Rate
  • 作用:roslib提供ros::Rate类,它方便实现按一定的频率来循环
  • 示例:
ros::Rate r(10); // 10 hz
while (ros::ok())
{
  ... do some work ...
  r.sleep();
}
  • 以10hz的速率来循环执行。
  • 注:一般建议使用Timers代替Rate。详情见Timers Tutorial

Wall Time(挂钟时间)

  • 如果你想获得实际的挂钟时间即使运行在模拟。
  • roslib提供所有时间版本构建:ros::WallTime, ros::WallDuration, 和ros::WallRate
  • 也分别有相同的接口:ros::Time, ros::Duration, and ros::Rate

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ROS与C++入门教程