cartographer简介
cartographer是google开发的实时室内SLAM项目,cartographer采用基于google自家开发的ceres非线性优化的方法,cartographer的亮点在于代码规范与工程化,非常适合于商业应用和再开发。并且cartographer基于submap子图构建全局地图的思想,能有效的避免建图过程中环境中移动物体的干扰。并且cartographer支持多传感器数据(Odometry、IMU、LaserScan等)建图,支持2D_SLAM和3D_SLAM建图,成本较低的雷达也能跑出不错的效果。cartographer是google推出的一套基于图优化的SLAM算法,主要目标是实现低计算资源消耗,达到实时SLAM的目的,所以很适合嵌入式端的使用。
该算法主要分为两个部分,第一个部分称为Local SLAM, 该部分通过一帧帧的Laser Scan建立并维护一系列的Submap,而所谓的submap就是一系列的Grid Map。当再有新的Laser Scan中会通过Ceres Scan Matching的方法将其插入到子图中的最佳位置。但是submap会产生误差累积的问题。因此,算法的第二个部分,称为Global SLAM的部分,就是通过Loop Closure来进行闭环检测,来消除累积误差:当一个submap构建完成,也就是不会再有新的laser scan插入到该submap时,算法会将该submap加入到闭环检测中。闭环检测的本质也是一个优化问题,该优化问题被表达成了一个pixel-accurate match的形式,解决优化问题的方法是Branch-and-Bound Approach.
版本
cmake 3.10.2, gcc7.5, g++7.5, python2.7.17, protoc3.0.0, eigen 3.3.4, lua5.2, cartogrpher1.0.0, cartographer_ros1.0.0, ceres-solver1.13.0
- git:
local-name: cartographer
uri: https://github.com/googlecartographer/cartographer.git
version: 1.0.0
- git:
local-name: cartographer_ros
uri: https://github.com/googlecartographer/cartographer_ros.git
version: 1.0.0
- git:
local-name: ceres-solver
uri: https://github.com/ceres-solver/ceres-solver.git
version: 1.13.0
cartographer的安装主要包括三个部分:cartographer、cartographer-ros、ceres-solver。
其中cartographer 是计算的部分,
git clone https://github.com/cartographer-project/cartographer
cartographer-ros是算法在ROS中通讯交互数据的部分,
git clone https://github.com/cartographer-project/cartographer_ros
ceres-solver开发的一款用于非线性优化的库。
git clone https://github.com/ceres-solver/ceres-solver
安装的方法有两种,一种是官网的集成式下载配置,一种是把cartographer需要的依赖部分分别安装配置。推荐使用第二种安装配置方法。
分包编译方式:
cartographer分成6个部分,分别是eigen3、protobuf、abseil、glog、gflags、cartographer、cartogpher_ros、ceres solver。版本匹配要求高。
1.eigen
Eigen是高级 C ++ 模板标头库,用于线性代数,矩阵和矢量运算,几何变换,数值求解器和相关算法。自3.1.1版以来,Eigen是根据Mozilla Public License 2.0许可的开源软件。早期版本是根据GNU较宽松通用公共许可证授权的。
git clone https://gitlab.com/libeigen/eigen/-/archive/3.4-rc1/eigen-3.4-rc1.tar.gz
2.protobuf
Protocol Buffers(简称Protobuf) ,是Google出品的序列化框架,与开发语言无关,和平台无关,具有良好的可扩展性。Protobuf和所有的序列化框架一样,都可以用于数据存储、通讯协议。
git clone https://github.com/protocolbuffers/protobuf
3.abseil
abseil 是 google 开源的 C++通用库,其目标是作为标准库的补充。abseil 不但提供了标准库没有但很常用的功能,也对标准库的一些功能进行了增强设计,使用 abseil 库能使程序性能和开发效率都取得不错的提升。cartographer对abseil没有版本要求,但是一定要有。
git clone https://github.com/abseil/abseil-cpp.git
4、glog
Google Logging(glog)是一个实现应用程序级日志记录的C++98库。该库提供了基于C++风格流和各种辅助宏的日志API。
git clone https://github.com/google/glog
5、gflags
google开源的gflags是一套命令行参数解析工具,比getopt功能更强大,使用起来更加方便,gflags还支持从环境变量、配置文件读取参数(可用gflags代替配置文件)。
git clone https://github.com/gflags/gflags
cartographer是Google的实时室内SLAM解决方案,基于ceres非线性优化,适用于商业应用和再开发。它支持多传感器数据建图,包括2D/3D SLAM,并通过submap和loop closure解决误差累积。本文介绍了cartographer的版本需求、组件及安装过程。
970

被折叠的 条评论
为什么被折叠?



