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、當程序當中有數據處理線程的時候,建議開辟 異步多線程 訂閱,算法寫在訂閱函數里面。

當然,目前的處理當中,我更傾向於重新開辟一個線程,然后通過循環數組來進行數據交互。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM