激光SLAM:cartographer

cartographer是Google的实时室内SLAM解决方案,基于ceres非线性优化,适用于商业应用和再开发。它支持多传感器数据建图,包括2D/3D SLAM,并通过submap和loop closure解决误差累积。本文介绍了cartographer的版本需求、组件及安装过程。
部署运行你感兴趣的模型镜像

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

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

Cartographer主要理论是通过闭环检测来消除构图过程中产生的累积误差[1]。用于闭环检测的基本单元是submap。一个submap是由一定数量的laser scan构成。将一个laser scan插入其对应的submap时,会基于submap已有的laser scan及其它传感器数据估计其在该submap中的最佳位置。submap的创建在短时间内的误差累积被认为是足够小的。然而随着时间推移,越来越多的submap被创建后,submap间的误差累积则会越来越大。因此需要通过闭环检测适当的优化这些submap的位姿进而消除这些累积误差,这就将问题转化成一个位姿优化问题。当一个submap的构建完成时,也就是不会再有新的laser scan插入到该submap时,该submap就会加入到闭环检测中。闭环检测会考虑所有的已完成创建的submap。当一个新的laser scan加入到地图中时,如果该laser scan的估计位姿与地图中某个submap的某个laser scan的位姿比较接近的话,那么通过某种 scan match策略就会找到该闭环。Cartographer中的scan match策略通过在新加入地图的laser scan的估计位姿附近取一个窗口,进而在该窗口内寻找该laser scan的一个可能的匹配,如果找到了一个足够好的匹配,则会将该匹配的闭环约束加入到位姿优化问题中。Cartographer的重点内容就是融合多传感器数据的局部submap创建以及用于闭环检测的scan match策略的实现。
### 关于Cartographer激光SLAM算法的教程 #### 算法概述 Cartographer是一个基于优化框架的激光SLAM算法,能够高效地构建大规模二维和三维地图。此算法由Google团队开发,在工程稳定性和功能上表现优异,不仅支持建图还具备重定位能力[^1]。 #### 原理分析 Cartographer采用了一套复杂的机制来处理传感器数据并生成精确的地图表示形式。其核心在于通过分支定界(Branch and Bound)技术实现了快速的相关扫描匹配过程,这项技术对于解决全局定位以及环路闭合等问题至关重要,它帮助系统确定机器人的当前位置从而更好地调整新获取的数据到已有地图中去[^4]。 #### 安装指南 为了方便开发者理解和实践Cartographer,官方提供了详细的安装指导文档。具体来说,可以通过创建一个新的工作空间`cartographer_ws`,克隆特定版本库至该目录下,并执行相应的编译命令完成整个环境搭建流程[^3]: ```bash $ mkdir -p cartographer_ws/src $ cd cartographer_ws/src $ git clone https://github.com/xiangli0608/cartographer_detailed_comments_ws.git $ mv cartographer_detailed_comments_ws/src/cartographer_ros . $ cd .. $ catkin_make ``` #### 实验验证 除了理论介绍外,实际案例演示也是不可或缺的一部分。用户可以从指定资源处下载测试用例文件如`rslidar-outdoor-gps.bag`等来进行本地实验,进一步加深对系统的认识。 #### 源码解析 深入研究源代码有助于掌握更多细节和技术要点。针对不同需求场景下的参数配置、模块间交互逻辑等内容均可以在官方仓库或者相关文献资料里找到详尽说明[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superbuffegg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值