ros::spin()的理解

ros::spin()的理解

在程序到達ros::spin()之前按照一系列規則,設定一系列話題訂閱者。

這些訂閱者就開始嗷嗷待哺,等待話題進來,但這時候訂閱者的嘴還沒有打開。

然後就到ros::spin(),這可以理解爲一個動作,打開訂閱者的嘴。這樣訂閱者們可以開始接受話題,最重要的是進入回調函數!

當然,最開始的時候,沒有話題進來,spin()是堵塞在這裏的。

一旦有話題進來,

一系列訂閱、回調、發佈等等動作在spin()這裏不斷在進行,只要有合適的話題,相應的訂閱者就訂閱,然後直接進行回調。

int main(int argc,char** argv)
{

    ros::init(argc, argv, "message_filter_node");  // 相當於給一個命名空間
    ros::Time::init();
    ros::NodeHandle n;
    Scan2 scan;  // 默認構造


    Odom_calib.Set_data_len(12000);
    Odom_calib.set_data_zero();
    ros::spin(); // 主程序到這裏往下不再進行,等待話題進來回調就行


    return 0;
}

Scan2 scan; 這一句默認構造構造出一系列的話題訂閱和發佈的規則,一系列訂閱者。但是嘴還沒張開。

程序會接着往下走,一直到:
ros::spin();的時候, 把訂閱者的嘴們張開,開始訂閱話題併產生回調。

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