wiki链接: http://wiki.ros.org/roscpp/Overview/Time
time是一个具体的时刻(上午9:30)而duration是一段时间(5个小时)duration可以是负值.
Time和duration有相同的表示。
int32 sec
int32 nsec
ros可以为节点提供一个模拟的时钟。用户应该使用roscpp的时间函数获取当前时间。
1)获取当前时间
ros::Time::now() 返回一个ros::Time实例。
2)创建Time和Duration实例
通过给定具体的浮点数,来初始化实例对象:
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);
3)转化Time和Duration实例
Time和Duration对象可以被转化成相应的浮点秒数:
double secs =ros::Time::now().toSec();
ros::Duration d(0.5);
secs = d.toSec();
4)Time和Duration计算
与其它原始数据类型一样,可以对time和duration进行算术操作。
几个小例子:
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代码中的表示:
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;
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();
}
注:通常建议使用Timer来代替Rate
如:ros::WallTime ros::WallDuration ros::WallRate
1.时刻和时间间隔
ROS有内建的时间和时间间隔原始类型,rsolib程序包提供了ros::Time和ros::Duration类time是一个具体的时刻(上午9:30)而duration是一段时间(5个小时)duration可以是负值.
Time和duration有相同的表示。
int32 sec
int32 nsec
ros可以为节点提供一个模拟的时钟。用户应该使用roscpp的时间函数获取当前时间。
1)获取当前时间
ros::Time::now() 返回一个ros::Time实例。
2)创建Time和Duration实例
通过给定具体的浮点数,来初始化实例对象:
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);
3)转化Time和Duration实例
Time和Duration对象可以被转化成相应的浮点秒数:
double secs =ros::Time::now().toSec();
ros::Duration d(0.5);
secs = d.toSec();
4)Time和Duration计算
与其它原始数据类型一样,可以对time和duration进行算术操作。
几个小例子:
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代码中的表示:
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;
2.睡眠和比率
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();
}
注:通常建议使用Timer来代替Rate
3.壁钟时间
如果在模拟时间中,想要获取实际的壁钟时间,roslib提供了Wall版本的time构造器。如:ros::WallTime ros::WallDuration ros::WallRate