今天開始寫一個關於google cartographer系列文章。此類文章網上已經很多,本系列文章主要記錄重點部分及容易踩坑地方。
cartographer是一個完整的激光SLAM開源項目,屬於graph slam,包含了完整的前端里程計和後端地圖優化,既能夠同時定位建圖,又能夠基於先驗地圖進行獨立全局定位。
值得好好研讀學習:(1)一個漂亮的slam實現工程,學習其模塊架構,代碼架構,接口等 (2)學習google code style,作爲c++編程規範的一個範本
目錄
一、推薦首選看官網資料,已經很詳細了
原生版:
https://google-cartographer.readthedocs.io/en/latest/
ros集成版:
https://google-cartographer-ros.readthedocs.io/en/latest/index.html
源碼:
https://github.com/cartographer-project/cartographer_ros
論文:
W. Hess, D. Kohler, H. Rapp, and D. Andor, Real-Time Loop Closure in 2D LIDAR SLAM, in Robotics and Automation (ICRA), 2016 IEEE International Conference on. IEEE, 2016. pp. 1271–1278.
二、安裝
本人環境:ubuntu 18.04(64位),ROS melodic
以源碼編譯安裝方式。
步驟1:安裝依賴。參考 https://google-cartographer.readthedocs.io/en/latest/ 先安裝一部分依賴
本人電腦只安裝了以下部分依賴,其餘雜七雜八的都沒有裝(可能之前配置時已經安裝了相應依賴)
步驟2:繼續安裝依賴。參考 https://google-cartographer-ros.readthedocs.io/en/latest/index.html 安裝其他依賴
步驟3:注意!創建ROS工程目錄,下載源碼。在進行到下載源碼步驟時,需要先網頁登錄自己的github賬號,否則提示無法連接網址!
wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall
步驟4:源碼編譯。
執行完 catkin_make_isolated --install --use-ninja 後即成功安裝。
步驟5:注意!配置source。由於採用isolated方式編譯的,因此在~/.bashrc中也要以此方式source,添加詞句 source /home/你的ubuntu用戶名/cartographer/devel_isolated/setup.bash
至此,就完成了源碼安裝,下面就可以下載官網數據集跑啦。
三、源碼文件架構
安裝好後的源碼結果如下:包含原生碼和ros集成部分
四、跑數據集
1、建圖
參考 https://google-cartographer-ros.readthedocs.io/en/latest/demos.html 下載2d揹包數據集(490M,下載挺快)
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
數據集大概持續30分鐘,建的地圖夠大,效果如下,比較驚豔。(0,9)類似數據標明瞭loopclosure
基於3D激光雷達建圖:三維點雲被投影到二維佔據柵格地圖
數據集有9.8G
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag
使用了2個vlp-16,水平和垂直
側視圖可以看到構建的地圖不是在同一個水平面上
2、基於先驗地圖的全局定位
參考 https://google-cartographer-ros.readthedocs.io/en/latest/demos.html ,以下爲基於2D數據集的定位
步驟1:先構建先驗地圖,尺寸大概100m*100m
步驟2:基於先驗地圖全局實時定位
初始時刻未匹配上,過幾秒鐘後匹配上。位置及軌跡得到了修正。
運動過程中出現匹配出錯,但能夠很快修正回來