ROS学习之 cpp定时器

来源:互联网 发布:封面ps软件 编辑:程序博客网 时间:2024/05/16 17:14

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而已

0 0
原创粉丝点击