ROS基础--os::spin()和ros::spinOnce()

标签:
ros基础 |
分类: ros基础 |
ros::spin()和ros::spinOnce()
1.
集中处理本节点所有的回调函数。
2.
在ros节点中,如果有订阅消息,则ros的socket连接控制进程会在后台接收订阅的消息,所有接收到的消息并不是立即处理,而是等到spin()或者spinOnce()执行时才集中处理。
3.
必须放在消息订阅函数之后,而且一定要放置其中一个,否则回调函数不会被执行。
4.
(1)ros::spin():一般放在main函数最后,或者return之前,因为此函数不会返回,所以其后的所有程序不会被执行;使用此接口的节点可以看成是消息驱动型,消息到来执行回调函数。
(2)ros::spinOnce():执行一次本接口,系统处理一次所有的回调函数,然后从此函数返回继续执行。所以一般配合while(ros::ok())使用,并需要自己设置调用频率,以及需要根据消息到达的频率设置消息队列大小以防止消息丢失。
5.
(1)Multi-threaded Spinning
(2)CallbackQueue::callAvailable() and callOne()
(3)Using Different Callback Queues
因为很少使用,所以暂时跳过。
更多ROS文章,可以关注微信公众号:ROS编程,每周不定期更新
http://s2/bmiddle/002wQ47lzy7yspM5P5nd1&690