踩坑rosbag --clock
將rosbag的數(shù)據(jù)feed給lego-loam,輸出地圖。另外寫了一個(gè)濾波節(jié)點(diǎn),訂閱地圖,進(jìn)行濾波操作,再發(fā)布出來。
由于輸入給lego-loam的數(shù)據(jù)來自于rosbag,所以需要rosbag提供時(shí)間信息。
rosbag play --clock recorded1.bag由于rosbag的數(shù)據(jù)發(fā)布頻率比較快,導(dǎo)致了一個(gè)結(jié)果。rosbag播放完畢,時(shí)鐘停止,濾波節(jié)點(diǎn)中緩存了幾個(gè)數(shù)據(jù)還沒有處理完畢。失去了時(shí)鐘信息,濾波節(jié)點(diǎn)停止運(yùn)行,但是沒有輸出報(bào)錯(cuò)信息!!!
?
個(gè)人心得:濾波節(jié)點(diǎn)有兩個(gè)獨(dú)立的線程,一個(gè)是callback函數(shù)線程,一個(gè)是main函數(shù)線程,進(jìn)而導(dǎo)致print出來的信息排布混亂。沒有花時(shí)間整理print出來的信息,也就沒能及時(shí)發(fā)現(xiàn)main函數(shù)線程因?yàn)槿笔Я藭r(shí)間信息而停止運(yùn)行。因此,但凡遇到莫名其妙的bug,即使沒有報(bào)錯(cuò)信息,首要任務(wù)是結(jié)合print出來的信息整理代碼的邏輯,快速縮小范圍再逐步排查原因。
?
解決方案:
1. 最佳
-k, --keep-alive
rosbag play -k --clock recorded1.bagbag文件中的數(shù)據(jù)播放完畢以后,繼續(xù)提供時(shí)間信息。
?
2. 次佳
-r?FACTOR,?--rate=FACTOR
rosbag play -r 0.1 --clock recorded1.bag將發(fā)布頻率降低為原來的10%,留給濾波節(jié)點(diǎn)足夠的時(shí)間進(jìn)行處理。
?
轉(zhuǎn)載于:https://www.cnblogs.com/gdut-gordon/p/10643426.html
總結(jié)
以上是生活随笔為你收集整理的踩坑rosbag --clock的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件常用版本英文snapshot和ga
- 下一篇: 第十一节,利用yolov3训练自己的数据