rosbag --clock

轉自:https://www.cnblogs.com/gdut-gordon/p/10643426.html

上集

將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 !

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章