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时间。
   







  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值