將rosbag的數據feed給lego-loam,輸出地圖。另外寫了一個濾波節點,訂閱地圖,進行濾波操做,再發布出來。緩存
因爲輸入給lego-loam的數據來自於rosbag,因此須要rosbag提供時間信息。函數
rosbag play --clock recorded1.bag
因爲rosbag的數據發佈頻率比較快,致使了一個結果。rosbag播放完畢,時鐘中止,濾波節點中緩存了幾個數據尚未處理完畢。失去了時鐘信息,濾波節點中止運行,可是沒有輸出報錯信息!!!spa
我的心得:濾波節點有兩個獨立的線程,一個是callback函數線程,一個是main函數線程,進而致使print出來的信息排布混亂。沒有花時間整理print出來的信息,也就沒能及時發現main函數線程由於缺失了時間信息而中止運行。所以,但凡遇到莫名其妙的bug,即便沒有報錯信息,首要任務是結合print出來的信息整理代碼的邏輯,快速縮小範圍再逐步排查緣由。線程
解決方案code
1. 最佳blog
-k, --keep-aliveclass
rosbag play -k --clock recorded1.bag
bag文件中的數據播放完畢之後,繼續提供時間信息。bug
2. 次佳地圖
-r FACTOR, --rate=FACTORcall
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 !