apollo学习基础之二[ROS使用C++ 的Timers类定时器]

apollo学习基础之二[ROS使用C++ 的Timers类定时器]

       在学习apollo源码过程中,很多模块都用到ros定时器的使用。比如planning模块中,就用到了,所以我就来学习这知识点。


  roscpp定时器,它允许您安排一个回调发生周期性。就是以一定的频率执行你程序或者任务,类似我们之前学习发布、订阅的ros::rate,但是比ros::rate更加的灵活。但是定时器不是实时的线程/内核替换,也不能保证它们的准确度,因为系统负载/功能会有很大的变化。

使用定时器和我们ros学习订阅是类似的,如下:

ros::Timer timer = nh. createTimer ( ros::Duration ( 0.2 ), timer_callback);

回调函数timer_callback定义如下:

void timer_callback ( const ros::TimerEvent & ecen);

下面就让我们用一个简单例子来解释吧

#include "ros/ros.h"
void timer_cb1 ( const ros::TimerEvent & )
{
ROS_INFO ( "timer_cb 1 triggered" );
}

void timer_cb2 ( const ros::TimerEvent & )
{
ROS_INFO ( "timer_cb 2 triggered" );
}

int main ( int argc, char ** argv)
{
ros::init (argc, argv, "talker" );
ros::NodeHandle nh;

//增加两个定时器,一个200毫秒执行一次,一个1秒执行一次。
ros::Timer timer1 = nh. createTimer ( ros::Duration ( 0.2 ), timer_cb1);
ros::Timer timer2 = nh. createTimer ( ros::Duration ( 1.0 ), timer_cb2);

ros::spin ();
return 0 ;
}

运行效果如下:

[ INFO] 1251854032.562464000 : timer_cb 1 triggered
[ INFO] 1251854032.662169000 : timer_cb 1 triggered
[ INFO] 1251854032.762649000 : timer_cb 1 triggered
[ INFO] 1251854032.862853000 : timer_cb 1 triggered
[ INFO] 1251854032.962642000 : timer_cb 1 triggered
[ INFO] 1251854033.063118000 : timer_cb 1 triggered
[ INFO] 1251854033.262864000 : timer_cb 2 triggered
[ INFO] 1251854033.362643000 : timer_cb 1 triggered
[ INFO] 1251854033.463158000 : timer_cb 1 triggered


ros::TimerEvent结构体作为参数传入,它提供时间的相关信息,对于调试和配置非常有用
ros::TimerEvent结构体说明:
    ros::Time last_expected 上次回调期望发生的时间
    ros::Time last_real 上次回调实际发生的时间
    ros::Time current_expected 本次回调期待发生的时间
    ros::Time current_real 本次回调实际发生的时间
    ros::WallTime profile.last_duration 上次回调的时间间隔(结束时间-开始时间),是wall-clock时间。
   







猜你喜欢

转载自blog.csdn.net/ycy_dy/article/details/81038347