使用Velodyne 16線雷射雷達跑SLAM- cartographer算法(包含常見的報錯)
2016年10月5日,谷歌宣布開放一個名為cartographer的即時定位與地圖模組化庫,開發人員可以使用該庫實作機器人在二維或三維條件下的定位及建圖功能。cartograhper的設計目的是在計算資源有限的情況下,實時擷取相對較高精度的2D地圖。考慮到基于模拟政策的粒子濾波方法在較大環境下對記憶體和計算資源的需求較高,cartographer采用基于圖網絡的優化方法。目前cartographer主要基于雷射雷達來實作SLAM,谷歌希望通過後續的開發及社群的貢獻支援更多的傳感器和機器人平台,同時不斷增加新的功能。 cartographer功能包 cartographer功能包已經與ROS內建,現在已經提供二進制安裝包,本次采用源碼編譯的方式進行安裝。為了不與已有功能包沖突,最好為cartographer專門建立一個工作空間,這裡我們新建立了一個工作空間catkin_google_ws,然後使用如下步驟下載下傳源碼并完成編譯。
1.安裝相應的工具
sudo apt-get update sudo apt-get install -y python-wstool
python-rosdep ninja-build
2.初始化工作空間
cd catkin_google_ws
wstool init src
3.加入cartographer_ros.rosinstall并更新依賴
wstool merge -t src http://raw.githubusercontent.com/googlecartographer/cartographer_
ros/master/cartographer_ros.rosinstall
wstool update -t src
4.安裝依賴并下載下傳cartographer相關功能包 指令如下:
rosdep update
rosdep install ——from-paths src ——ignore-src ——rosdistro=${ROS_DISTRO} -y
(這裡執行上面的代碼可能會報類似ROS路徑[]這樣的錯誤,如果是的話,試着執行下面的指令)
rosdep install --from-paths src --ignore-src -r -y
catkin_make_isolated --cmake-args -DROBOTRACONTEUR_ROS=1
5.編譯并安裝
catkin_make_isolated ——install ——use-ninja source
install_isolated/setup.bash
編譯過程可能報absl的錯誤,可以用如下的方法解決:
sudo apt-get install stow sudo chmod +x
~/catkin_google_ws/src/cartographer/scripts/install_abseil.sh
cd ~/catkin_google_ws/src/cartographer/scripts
./install_abseil.sh
注意這裡我的工作空間檔案名是catkin_google_ws,要替換成你們建立的工作空間名。
6.下載下傳Google提供的demo并運作感受一下(大概400多m)
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
安裝玩cartographer後運作上面的demo,如果出現下面的錯誤,可能是包的位址不對,建議檢查一下自己包的位址
[FATAL] [1590630448.926035157]: Error opening file: /home/sundong/sundong/Exploring/cartographer/bag/cartographer_paper_deutsches_musm.bag
[ INFO] [1590630448.998609889]: I0528 09:47:28.000000 12045 submaps.cc:176] Added submap 1
[playbag-5] process has died [pid 12055, exit code 1, cmd /opt/ros/kinetic/lib/rosbag/play --clock /home/sundong/sundong/Exploring/cartographer/bag/cartographer_paper_deutsches_musm.bag __name:=playbag __log:=/home/sundong/.ros/log/2fcbad18-a085-11ea-83d1-90cdb648c685/playbag-5.log].
log file: /home/sundong/.ros/log/2fcbad18-a085-11ea-83d1-90cdb648c685/playbag-5*.log