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時間。
   







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章