基于谷歌Cartographer SLAM集成机器视觉

255 篇文章 7 订阅
152 篇文章 1 订阅

首发:今日头条号之机器人视觉

从工程的角度来看,Google开源的SLAM真是上乘之作,当然算法及实现也是大公司级手笔,鉴于当前中文介绍较少,就把近来看的源码分析介绍出来,也许能给某些人以方便。

这篇文章里,仅从ROS及Cartographer SLAM本身的调用流程讲起,关于算法等细节另开文章再详加说明。

首先,编译、安装,把代码跑起来,先一探究竟,如下图所示,2D环境下的SLAM示例,其中需要注意的地方:

1)安装方法,有个库ceres-solver从Google官网上是下载不下来的,需要修改配置文件的下载链接,GitHub上有这个库的替代链接下载地址。

2)ubuntu要准备好ROS环境,本人用的是16.04下的分支,系统配置高一些,运行过程会流畅不少。

3)示例中的数据,可以对家迅雷下载,2D的SLAM近500M数据量,3D的SLAM近8G数据量,还好能很快的下载完成。

从运行结果来看,Google不愧是大家,值得高度称赞!

基于谷歌Cartographer SLAM集成机器视觉

Cartograpther 2D SLAM示例

其次,我们来看一下Google Cartographer的源码结构,工程上真可谓是达到商业级,相对本人了解的其他几种开源的SLAM。层次清晰、结构完整、方便扩充,随后会有讲解如何在SLAM点云数据的基础之上把本人的三维机器视觉算法整体嵌入。

基于谷歌Cartographer SLAM集成机器视觉

Cartographer源码分析之调用流程

最后,在Google Cartographer SLAM基础之上,扩充2D/3D机器视觉方案,整体来看SLAM及视觉算法不复杂,但计算量不小,这里本人使用Nvidia Jetson TK1来实现,

基于谷歌Cartographer SLAM集成机器视觉

实时视觉方案


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策略的实现。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hjwang1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值