使用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