Ros 中的多執行緒

2022-04-08 20:54:27 字數 738 閱讀 4556

參考文獻:

老王說

ros

rosspin

、rosspinonce

及多執行緒訂閱

1、 ros:spin() vs ros::spinonce() 區別

對於前者來說,spin(),執行一次之後,會一直停在那不動,所以spin()後面可以不用加任何東西。ros 會自動的呼叫一些**函式。

spinonce 就靈活的多了,不過需要控制好它的呼叫週期,它比spin定時要準很多。

當我們用nh.createtimer建立定時函式的時候,發現其定時週期不可控,用rqt檢視的。所以,我們改成spinonce 的模式來定時呼叫。此能實現精準呼叫。

參考文件:老王說ros(7)用ros做系統設計

以上都是同步的,在乙個執行緒當中。

2、多執行緒

在ros當中,原作者是不推薦用多執行緒的,他建議用多程序,變成乙個個節點的形式進行通訊。

分為兩種模式:同步和非同步。

同步:multithreadspinner s(4),一共5個執行緒。包括了主線程。

非同步:asyncspinner s(4), 一共5個執行緒。包括了主線程。

利用timer 可能會出現一些問題。

3、當程式當中有資料處理執行緒的時候,建議開闢 非同步多執行緒 訂閱,演算法寫在訂閱函式裡面。

當然,目前的處理當中,我更傾向於重新開闢乙個執行緒,然後通過迴圈陣列來進行資料互動。

ROS多執行緒訂閱訊息

對於一些只訂閱乙個話題的簡單節點來說,我們使用ros spin 進入接收迴圈,每當有訂閱的話題發布時,進入 函式接收和處理訊息資料。但是更多的時候,乙個節點往往要接收和處理不同 的資料,並且這些資料的產生頻率也各不相同,當我們在乙個 函式裡耗費太多時間時,會導致其他 函式被阻塞,導致資料丟失。這種場...

python中的多執行緒是假的多執行緒

python中的多執行緒是假的多執行緒?為什麼這麼說,我們先明確乙個概念,全域性直譯器鎖 gil global interpreter lock python 的執行由python虛擬機器 直譯器 來控制,同時只有乙個執行緒在執行 對python虛擬機器的訪問由全域性直譯器鎖 gil 來控制,正是這...

Loadrunner中的多執行緒

多執行緒 vuser 支援多執行緒環境。多執行緒環境的主要優勢是每個負載生成器都能執行多個 vuser。只有執行緒安全協議才能按執行緒執行。不適用於應用程式管理工具 注意 下列協議不是執行緒安全協議 sybase ctlib sybase dblib informix tuxedo 和 people...