您的位置:首页 > 编程语言 > C语言/C++

ROS学习之 cpp定时器

2016-07-18 17:40 1421 查看
wiki链接: http://wiki.ros.org/roscpp/Overview/Timers
     http://wiki.ros.org/roscpp_tutorials/Tutorials/Timers
    关于定时器,在ROS学习之cpp教程(http://blog.csdn.net/shiyue0010/article/details/51925666)的第六部分已经学习过了,这里详细补充几点.

    1.创建一个定时器

        ros::NodeHandle::createTimer()方法创建定时器对象.

        createTimer()方法有很多重载方法,通常的原型如下:

        ros::Timer ros::NodeHandle::createTimer(ros::Duration period, <callback>, bool oneshot = false);

        参数说明:

        period:定义了定时器回调函数调用间隔,ros::Duration(0.1)定义了一个匿名类作为period参数,表示每隔0.1s调用一次定时器回调函数

        <callback>:定时器回调函数,可以是一般函数,类成员方法,仿函数对象等等

        oneshot:确定该定时器是一次性定时还是持续调用

    2.回调函数原型

        void callback(const ros::TimerEvent&);

        参数 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

            上次回调持续时间

    3.回调函数的类型

        与消息,服务回调函数类似,定时器回调函数也有三种类型,这里就不再赘述了

        1) 一般函数

        2) 类成员方法

        3) 仿函数对象

    4.壁钟定时器

        壁钟时间:相对于cpu时间,是指实际运行程序流逝的时间,包含了在执行程序时,实际发生的状况,比如此时有很多其它程序或者I/O操作等.

        cpu时间:是指运行程序指令所实际消耗的cpu的时间,不包含其它程序占用cpu时导致实际耗时增加的情况

        ros::Timer在可以获得ROS Clock的情况下会使用它(计算流逝时间),而通常,它只会运行在时间模拟情况,这导致定时的不准确.

        如果希望定时器一直使用壁钟时间,ros提供了ros::WallTimer,它与ros::Timer使用方法相同,仅仅把Timer改为WallTimer而已
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: