有关ros::spin()和ros::spinonce()若干感受

ros::spinonce()一般与loop_rate.sleep()同时出现,用来控制处理回调函数的频率,并且没有消息就收来时,就会程序堵塞,不会占用CPU资源。

ros::spin(),用于回调函数的处理,并且执行这段程序就会进入无限次循环(消息来一次,回调函数就会立即处理一次,没有阅读到消息的时候,spin循环将会堵塞,不会占用CPU资源),直到ctrl_c来临,或者其他终止信号来临。一般所有的程序都写在这段语句之前,因为其之后的程序,不会被执行。

两条语句与publish没有关系,只与回调函数有关系。

两者都是为回调函数的消息创建队列依次去执行。区别就是spin是个无限循环,只要队列里消息在,程序就会立即执行回调函数。

而spinonce是根据程序所设的频率,在while里依次调用spinonce,根据队列里消息的前后顺序,依次调用回调函数。

总结两个关键词(消息队列与轮转执行,回调函数)。

原文地址:https://www.cnblogs.com/agvcfy/p/9314682.html