全面解析谷歌Cartographer算法_概要

目前国内大多数AGV厂家使用的是2D激光SLAM算法,但是前段时间交流的过程中,发现他们几乎没有人整明白谷歌的这套开源代码,这也是合情合理,毕竟已经是自顾不暇了(对于只参加过社招的我来说,已经到达了巅峰)。所以我写博客的原因主要有两点:1.现在各个AGV公司也都有自己的SLAM算法,如何让算法更具鲁棒性是当前的主要目标,所以希望能在这里和大家有更多思维上的碰撞;2.这套代码的优化方法,从原来的EKF,演进到现在的非线性优化,已经是激光SLAM中state-of-the-art的算法了,且上次更新还停留在去年对于landmark所做的调整,版本也比较稳定。

谷歌这套算法包含cartographer、cartographer_ros两部分,cartographer_ros可以理解为算法的一层外壳,调用cartographer的函数来实现,并传输submap信息,在ROS上可视化。所以大可不必在意cartographer_ros,从算法层面,它唯一做的就是对点云数据做了初始化:1.将只有距离信息的点云数据转换到世界坐标系的3D坐标;2.将点云坐标从雷达坐标系转换到机器人坐标系,同时包含每个点云及当前帧点云的时间信息。那么从算法上来看,它的特点就是以构建子图的方式构图,及scantomap的匹配方式。开始构图的时候新建一条轨迹,从一个连续的多帧传感器数据中抽取若干关键帧,也就是我们的Node,一条轨迹有一串Node组成,并且每个Node相对于它所在的submap的相对坐标变换要已知,每个子图相对于世界坐标系的位姿要估计出来,最后将不同的submap及其Node的位姿变换矩阵连在一起做全局优化。

 

我将大致分为以下几点进行解析:

1.数据初始化

单激光雷达、双/多激光雷达时的数据初始化过程,同时雷达间数据读取频率的注意事项:不当会导致之后传感器时间同步时将正确的点云信息过滤掉。

https://blog.csdn.net/qq_25646217/article/details/108042904

2.多传感器融合及点云运动畸变去除

IMU、里程计的解算,与估计出来的pose所解算出的线速度进行融合,构成位姿外插计,对点云进行运动畸变滤除。(谷歌这套代码是用于自动驾驶的,对于目前行动速度不快的AGV来说有点大材小用了)

3.时间同步

一开始我们用的是15Hz的激光雷达,远远赶不上算法处理一帧点云的速度,后来不得以对点云时间做了修改,原则上讲,只影响点云的运动畸变滤除,不过由于是低速AGV,影响几乎没有。如果是多激光雷达,那么时间同步是必须重视的。

4.概率地图的绘制及更新策略

概率直接查表,提高了计算效率,及概率更新方式,我们可以设置更新的快慢,即激光集中的点为黑色,直观来看是中间穿行区域由灰变白的速度。

5.scan_match匹配算法

real_time_correlative scan_match通过暴力枚举,生成数组经过旋转的点云,再挨个遍历x,y方向上的偏移量,将各种偏移量情况下的点云进行匹配,每个点云的概率值即为得分。最后将得到的最优的位姿作为初始位姿丢到ceres的优化库进行优化。

6.分支定界和fast_correlative scan_match算法

这二者是一起使用的,由于搜索窗口比real_time大数十倍以上,故必须使用分支定界,并进行剪枝。

7.栅格地图的绘制过程

通过旋转画笔坐标系绘制各个submap,最终画出全图。

 

目前能想到的就这些啦,待更~~     也欢迎大家提出想要了解的点。

这段时间听到的让我印象很深刻的话:任何事情说以后做就是不做。共勉之,尽早结束这部分也算是对一年的付出有个交代了。

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: cartographer 是一款常用的地图建图和定位系统,常用于机器人导航和路径规划中。它主要包含两个模块:建图模块和定位模块。 建图模块使用传感器数据(如激光数据或RGB-D数据)进行实时地图构建。它通过在机器人移动过程中,利用传感器测量的环境信息,将这些信息转化为二维或三维地图。这些地图可以被用于机器人的后续操作,如导航、避障等。 定位模块则提供了机器人在地图中确定自身姿态(位置和朝向)的功能。通过与先前建立的地图进行匹配,定位模块可以估计机器人当前的位置,并提供这些信息给其他模块使用。例如,在路径规划中,定位模块可以提供机器人当前所在位置,从而使得路径规划系统能够生成适合该位置的有效路径。 move_base 是一款用于机器人路径规划和导航的功能包。它与 cartographer 结合使用时,可以将 cartographer 提供的地图数据作为输入,同时利用定位模块提供的位置信息,为机器人生成路径规划。move_base 可以考虑机器人的动态环境,并生成安全有效的路径。在导航过程中,move_base 还可以进行障碍物的避障,以确保机器人安全到达目标位置。 所以,cartographer 和 move_base 的结合可以为机器人提供强大的地图建图和路径规划导航功能,使得机器人能够在复杂的环境中进行自主移动和导航。 ### 回答2: Cartographer是一种用于建图和定位的SLAM算法。它通过结合激光扫描数据和传感器信息来生成高质量的地图和机器人的定位。而move_base是一个ROS软件包,用于规划和控制机器人在已知地图上的导航。 使用Cartographer和move_base,机器人可以先通过激光传感器获取周围环境的扫描数据,并利用Cartographer算法将这些数据进行处理,生成一个准确的地图。然后,机器人可以使用move_base的规划器来根据地图和目标位置,计算出一个可行的导航路径。 在导航过程中,move_base还会实时更新机器人的定位信息,通过Cartographer提供的定位算法,精确计算机器人的位置和姿态。一旦导航路径完成规划,move_base会将路径上的目标点发送给底层的控制器,控制机器人沿着路径移动。 整个过程中,Cartographer为move_base提供了建图和定位的支持,使得机器人能够在已知的环境中实现精确的导航。这种结合可以广泛应用于机器人自主导航、自主探索和作业执行等领域。通过使用Cartographer和move_base,机器人可以在复杂的环境中高效地进行导航任务,实现自主决策和行动。 ### 回答3: cartographer move_base是一种使用于机器人导航的软件系统。它结合了cartographer和move_base两个功能模块,提供了高效的实时建图和路径规划功能。 首先,cartographer模块是一个先进的2D和3D实时建图算法库。它使用激光雷达或深度相机等传感器数据,将机器人周围环境进行高精度建模。它能够实时定位,地图存储和传输。因此,当机器人在未知环境中移动时,cartographer能够快速创建地图,并在机器人移动过程中对其进行更新。 而move_base模块是ROS(机器人操作系统)中的一个核心导航功能包。它基于全局规划和局部规划两个模块,为机器人提供路径规划和导航控制。全局规划使用地图信息和用户指定的目标位置,计算出机器人的最优导航路径。局部规划根据机器人当前位姿、感知信息和全局规划路径,实时生成机器人的局部规划路径,并控制机器人移动。 cartographer move_base结合了这两个功能模块。它能够通过cartographer实时建图获取机器人周围环境的精确信息,并结合move_base进行路径规划和导航控制。因此,机器人可以在未知环境中实时感知自己的位置,根据目标位置规划最优路径,并通过move_base进行实时控制,从而实现高效、精确的导航。 综上所述,cartographer move_base是一种能够结合实时建图和路径规划功能的软件系统。它为机器人导航提供了强大的功能支持,并广泛应用于自主机器人、无人车等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值