区别与联系
ros::spin()和ros::spinOnce()都是用来集中处理本节点所有的回调函数,一般在节点存在订阅消失时,需要用到,区别在于执行ros::spin()后,程序不再往下执行,执行ros::spinOnce()后程序依然可以往下执行。
使用方法:
spin
spin一般放在主程序的最后
spinOnce
spinOnce一般放在while (ros::ok())循环中,配合loop_rate.sleep()用于处理回调函数调用的频率,对于有些传输特别快的消息,尤其需要注意合理控制消息池大小和ros::spinOnce()执行频率; 比如消息送达频率为10Hz, ros::spinOnce()的调用频率为5Hz,那么消息池的大小就一定要大于2,才能保证数据不丢失,无延迟。