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
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号