天天看點

cartographer架構設計圖

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

cartographer架構設計圖

其實裡面還有大量細節沒有展示

這裡簡單介紹一下:

我們都知道運作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,後面有時間會一一分解,萬丈高樓起,一磚一瓦皆代碼。