今天开始写一个关于google cartographer系列文章。此类文章网上已经很多,本系列文章主要记录重点部分及容易踩坑地方。
cartographer是一个完整的激光SLAM开源项目,属于graph slam,包含了完整的前端里程计和后端地图优化,既能够同时定位建图,又能够基于先验地图进行独立全局定位。
值得好好研读学习:(1)一个漂亮的slam实现工程,学习其模块架构,代码架构,接口等 (2)学习google code style,作为c++编程规范的一个范本
目录
一、推荐首选看官网资料,已经很详细了
二、安装
三、源码文件架构
四、跑数据集
1、建图
2、基于先验地图的全局定位
原生版:
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集成部分
参考 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,水平和垂直
侧视图可以看到构建的地图不是在同一个水平面上
参考 https://google-cartographer-ros.readthedocs.io/en/latest/demos.html ,以下为基于2D数据集的定位
步骤1:先构建先验地图,尺寸大概100m*100m
步骤2:基于先验地图全局实时定位
初始时刻未匹配上,过几秒钟后匹配上。位置及轨迹得到了修正。
运动过程中出现匹配出错,但能够很快修正回来