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();的时候, 把订阅者的嘴们张开,开始订阅话题并产生回调。
原文链接:https://blog.csdn.net/weixin_44684139/article/details/105555031