最近在学习的过程中用到ROS Time的机会比较多,借此机会做个笔记.
参考(1):创客制造
(1)使用ros::Time::Now获取当前时间,计算程序/算法运行时间
startTime=ros::Time::Now() //程序开始
{程序算法中....}
endTime=ros::Time::Now();
double process_time=(endTime-starTime).toSec();
toSec()成员函数讲运行时间转换为单位秒.
(2)使用ros::Duration设置一段时间
ros::Duration time(0.5); //一段0.5秒的时间
(3)使用Timer代替ros::rate
通常情况下我们可以采用ros::rate设置一定的频率来循环(简单的发布或者订阅),用法如下;
ros::Rate loop_rate(10); // 10 hz
while (ros::ok())
{
... do some work ...
loop_rate.sleep();
}
以上程序表示以10hz的频率循环执行
wiki上建议用timer(定时器)来代替ros::rate,简单用法用下:
a.创建定时器:
ros::Timer timer = n.createTimer(ros::Duration(0.1), timerCallback);
ros::Timer timer2 = n.createTimer(ros::Duration(1.0), callback2);
b.在回调函数中处理:
void timerCallback(const ros::TimerEvent& e);
void callback2(const ros::TimerEvent&)
我们就可以在回调函数中以一定频率进行发布或者订阅.