踩坑rosbag --clock(上、下集)


上集

將rosbag的數據feed給lego-loam,輸出地圖。另外寫了一個濾波節點,訂閱地圖,進行濾波操作,再發布出來。

由於輸入給lego-loam的數據來自於rosbag,所以需要rosbag提供時間信息。

rosbag play --clock recorded1.bag

由於rosbag的數據發布頻率比較快,導致了一個結果。rosbag播放完畢,時鍾停止,濾波節點中緩存了幾個數據還沒有處理完畢。失去了時鍾信息,濾波節點停止運行,但是沒有輸出報錯信息!!!

 

個人心得:濾波節點有兩個獨立的線程,一個是callback函數線程,一個是main函數線程,進而導致print出來的信息排布混亂。沒有花時間整理print出來的信息,也就沒能及時發現main函數線程因為缺失了時間信息而停止運行。因此,但凡遇到莫名其妙的bug,即使沒有報錯信息,首要任務是結合print出來的信息整理代碼的邏輯,快速縮小范圍再逐步排查原因。

 

解決方案

1. 最佳

-k, --keep-alive

rosbag play -k  --clock recorded1.bag

bag文件中的數據播放完畢以后,繼續提供時間信息。

 

2. 次佳

-r FACTOR--rate=FACTOR

rosbag play -r 0.1 --clock recorded1.bag

將發布頻率降低為原來的10%,留給濾波節點足夠的時間進行處理。

 

下集

首先啟動 roscore ,這一步會啟動ros的時鍾,提供時鍾信息。

接着啟動lego-loam。

播放lego-loam的數據集, rosbag play --clock recorded1.bag 。這時候,啟動了另一個時鍾,導致roscore啟動的時鍾停止。所以,當rosbag播放完畢后,ros的時鍾完全停止。這時候運行ros會報各種莫名其妙的錯誤

 

解決方案

重新運行 roscore !

 


免責聲明!

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



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