Ros 中的多线程

 

参考文献:http://blog.csdn.net/sinat_27554409/article/details/48446611 老王说ROS

http://blog.csdn.net/yaked/article/details/50776224 rosspinrosspinOnce及多线程订阅

1、 Ros:spin() VS ros::spinOnce() 区别

对于前者来说,spin(),运行一次之后,会一直停在那不动,所以spin()后面可以不用加任何东西。ROS 会自动的调用一些回调函数。

Spinonce 就灵活的多了,不过需要控制好它的调用周期,它比spin定时要准很多。

当我们用nh.createTimer创建定时函数的时候,发现其定时周期不可控,用rqt查看的。所以,我们改成spinOnce 的模式来定时调用。此能实现精准调用。

 

参考文档:老王说ROS(7)用ros做系统设计 http://blog.exbot.net/archives/1675

 

以上都是同步的,在一个线程当中。

2、多线程

在ROS当中,原作者是不推荐用多线程的,他建议用多进程,变成一个个节点的形式进行通信。

分为两种模式:同步和异步。

同步:MultiThreadSpinner s(4),一共5个线程。包括了主线程。

异步:AsyncSpinner s(4), 一共5个线程。包括了主线程。

 

利用Timer 可能会出现一些问题。

3、当程序当中有数据处理线程的时候,建议开辟 异步多线程 订阅,算法写在订阅函数里面。

当然,目前的处理当中,我更倾向于重新开辟一个线程,然后通过循环数组来进行数据交互。

posted on 2017-02-16 16:00  zhuxuekui3  阅读(10033)  评论(0编辑  收藏  举报