幾天前成功實作了建圖,然後就想著下一步——導航!但是,導航的navigation包編譯始終報錯,例如:xxx could not find;又例如:syntax error ……;等等……最後發現所有的問題都是環境和依賴沒弄好的原因!於是有目的的去尋找完善的msgs和move_base等包,終於在一篇部落格上找到了!最終也是完成編譯!
導航呢,簡單來說它需要兩幅圖!一張是提前建好的或者即時建圖(大範圍,全域的那種),另一張就是局部地圖可以理解為避障地圖!
好了,知道它的步驟我就需要開始給它建全域地圖了!但是,經過幾次建圖後我發現了一些很嚴重的問題!
1、我的樹莓派和pc配了主從,之前視訊說過,我是樹莓派接收雷達數據然後運用pc算力建圖!主從,要用到區域網路,既然要用到區域網路必然有延遲!有延遲就必然有數據遺失!所以,一旦延遲變高,數據極容易飄!
2、我建圖用的是hector_slam,一個只需要雷射雷達就能建圖的演算法!它有個很致命的缺點,精度不夠,而且極容易漂移(這裏指的是在一些較復雜的環境,比如室內!在走廊這種地方效果還是非常好的)!!!所以它建的圖拉垮的雅痞,根本不敢用於導航!
3、裏程計,對於車底盤的裏程計,無論pid調得如果完美,它只會是逼近目標值而不是穩定於目標值!所以車盡管加入了pid演算法,它還是無法走的很平穩(實際值在目標值上下浮動,當左輪向上浮動右輪向下浮動車就會發生轉向)!這個時候車本身就會與建圖的座標發生誤差!一次兩次無所謂,次數多了,就有可能造成漂移!
第一問題是無法實際解決的了,我只能上網買個隨身wifi,希望有所幫助!
第二問題今天真是運氣好,機緣巧合的用gmapping釋出tf節點,然後hector_slam呼叫它們,嗯效果好了非常多!!!我現在還是不太理解效果變好的原理!
第三問題的話我直接將這些誤差運用上去了,因為我的雷達在車中央而且用的是履帶車,所以對於有差速的兩個輪子,運用理論力學的知識分析可以將兩輪線速度差速轉化成z軸的角速度!然後釋出在裏程計節點上(前面說的 gmapping用上了)!然後在第二問題解決的基礎上,建圖效果更好了!
現在還是卡在建圖精度真一步,我在考慮要不要全換成gmapping演算法,但是我之前實驗過它會把室內的桌子啥的都濾掉(它有個粒子濾波演算法,雖然閾值可以調但是身為小白的我估計要學不短時間)!
好了,許久沒更新了,先就這樣吧,等把圖精度提高了或者找到別的導航的方法再發新章了!最後給大家附一張slam演算法的對比!