自己手繪了一張,圖糙理不糙

其實裡面還有大量細節沒有展示
這裡簡單介紹一下:
我們都知道運作cartographer的ros程式有2個包一個是cartographer自己的庫檔案,還有一個是接收ros話題然後傳給cartographer的node包。
而cartographer在代碼架構上是如何處理資料并顯示的呢?這裡展開叙述一下:
1-資料先傳遞給GlobalTrajectory類,然後GlobalTrajectory類傳遞給LocalTrajectory類,
2-LocalTrajectory類中使用ScanMacher來處理雷射及IMU及odom資料,獲得2個重要的資料類型,分别是submap和node,這兩個資料代表了位姿圖中的node節點和submap節點,
3-接着将這兩個資料傳入PoseGraph的線程池中進行處理,處理什麼呢?就是找到node和submap之間的限制(constraints),這一步業界叫做回環檢測,
4-再接着把找到的限制傳入Oprimization中進行優化,就可以得到優化後的node和submap的位姿了,
5-把正确的位姿和顯示資料傳遞給rviz就可以進行顯示地圖和機器人的目前位置了。
這張圖對應了cartographer架構中重要的幾個類,分别是
1-GlobalTrajectory
2-LocalTrajectory(用于建構前端)
3-PoseGraph(用于優化後端)
4-ThreadPool(用于并行建構多限制模型,用于後端優化)(亮點)
5-Optimization(使用ceres建構限制方程,完成優化任務)
cartographer做的不止這些,前端和後端的比對器并不一樣,還有前端還有一個位姿推斷器(用于融合imu和odom資料),他還有完善的地圖儲存,加載,純定位功能,甚至還寫好了slam遠端伺服器,使用rpc進行資料傳輸,實作多路徑多資料上傳進行伺服器建圖,mygod!ok,後面有時間會一一分解,萬丈高樓起,一磚一瓦皆代碼。