SLAM学习总结

最近一个月开始看关于slam的研究内容,现在把最近的看到的一些内容做个小结,加深印象,促使自己思考,
其中可能有错误,希望大家不吝赐教。另外本博文虽然是我整理的,但是大部分都是别人的思想,版权归原作者
所有,我已经在文中注明作者,在此向原作者表示感谢!

SLAM(simultaneous localization and mapping)也叫即时定位与导航,最早由Hugh Durrant-Whyte 和 John J.Leonard提出。SLAM主要用于解决移动机器人在未知环境中运行时定位导航与地图构建的问题。典型的slam系统硬件组成主要由测距传感器,odometry 里程计,处理器,IMU,运动机器人等。最简单的结构为可以移动的机器人平台并且至少包含一个测距单元。其过程包括特征提取,数据关联,状态估计,状态更新以及特征更新等。对于其中每个部分,均存在多种实现方法。

slam 的一般过程:

假设机器人初始化的时候的位置是确定的,从这个确定的位置上机器人观测到一个特征点的位置,这个特征点具有和测距传感器相关的不确定性。
当机器人移动的时候,由于里程计的累积误差它的位置的不确定度逐渐增加:

SLAM学习总结_第1张图片

当机器人到达此处,看到两个特征点m1和m2,并估计出他们的位置和由于机器人的位置的不确定度造成的不确定度。此时我们可以看到,地图的不确定度是机器人的位置估计的不确定度造成的。同样的道理,如果机器人的位置估计建立在不准确估计的对特征点之上,机器人位置的估计结果也是和特征点的不确定度相关。
SLAM学习总结_第2张图片

机器人继续移动,它的不确定性由于里程计的累积误差继续增加
SLAM学习总结_第3张图片

为了减小不确定度,机器人必须找到位置已知的特征点。这些特征点可以是机器人曾经见到过的特征点。这就是所谓的回环检测。
如果回环检测成功,机器人的位置的不确定度就会缩小。同时,地图也会更新,地图上的特征点和机器人过去回环中的位置的不确定度都会减小。
SLAM学习总结_第4张图片

这就是slam的大致过程(翻译自Sören Schwertfeger的报告)。
上面对机器人位置的更新一般通过里程计来估计,如果不是平稳的过程还会用到IMU来矫正。SLAM按照测距单元分主要分为激光SLAM和视觉SLAM。激光最常用,视觉快速发展。也有用超声波的,它价格便宜,测量精度较差。但在水下,由于其穿透力较强,因而,是最为常用的测距方式。最为常用的超声波测距单元是Polaroid超声波发生器。

激光SLAM

激光SLAM是研究比较早的方法,理论与实践都比较成熟。激光SLAM运算量相对较小,易于实现实时建图,精度较高。其缺点在于价格一般比较昂贵。激光测距单元的另外一个问题是其穿过玻璃平面的问题。另外激光测距单元不能够应用于水下测量。几何区分度小,具有稀疏性。

激光SLAM研究历史

1.反光板定位(二维)
2.ekf特征定位(二维)
 主要形式为角点、线。
 一般要配以里程计、imu,或者运动模型来提供运动预测
 算法以ekf、粒子滤波等模型形式。
3.点或特征的ICP(二维)
    里程计推导用直接的ICP替代了之前的ekf过程。
    定位使用粒子滤波方式。
    最有代表性的是gmapping
4.三维解决方式
    点抽样->ICP
    特征(点、线、面)->ekf icp
    NDT

使用的状态估计和优化算法:

基于滤波器:Kalman Filter, EKF, PF
基于非线性优化:图优化、因子图

• Significant advantage of graph-based SLAM techniques over EKF SLAM:
• EKF SLAM: computation and memory for to update and store the covariance matrix is
quadratic with the number of features.
• Graph-based SLAM: update time of the graph is constant and the required memory is linear
in the number of features.
• However, the final graph optimization can become computationally costly if the
robot path is long.

开源的实现方案:

2D
主要使用,hokuyo或者 sick 的2D 激光传感器,适用于平面内的运动。
以下是较成熟的slam方法。
A . HectorSLAM
scan-matching(Gaussian-Newton equation) +  传感器的要求高
要求: 高更新频率小测量噪声的激光扫描仪. 不需要里程计,使空中无人机与地面小车在不平坦区域运行存在运用的可能性.
利用已经获得的地图对激光束点阵进行优化, 估计激光点在地图的表示,和占据网格的概率.
其中扫描匹配利用的是高斯牛顿的方法进行求解. 找到激光点集映射到已有地图的刚体转换(x,y,theta).
( 接触的匹配的方法还有最近邻匹配的方法(ICP) ,gmapping代码中的scanmatcher部分有两种方法选择. )
为避免局部最小而非全局最优的(类似于多峰值模型的,局部梯度最小了,但非全局最优)出现,地图采用多分辨率的形式.
  导航中的状态估计可以加入惯性测量,进行EKF滤波.

B. Gmapping: tutorial
proposed by Grisetti et al. and is a Rao-Blackwellized PF SLAM approach.
adaptive resampling technique
  目前激光2Dslam用得最广的方法,gmapping采用的是RBPF的方法. 必须得了解粒子滤波(利用统计特性描述物理表达式下的结果)的方法.
粒子滤波的方法一般需要大量的粒子来获取好的结果,但这必会引入计算的复杂度;粒子是一个依据过程的观测逐渐更新权重与收敛的过程,这种重采样的过程必然会代入粒子耗散问题(depletion problem), 大权重粒子显著,小权重粒子会消失(有可能正确的粒子模拟可能在中间的阶段表现权重小而消失).
自适应重采样技术引入减少了粒子耗散问题 , 计算粒子分布的时候不单单仅依靠机器人的运动(里程计),同时将当前观测考虑进去, 减少了机器人位置在粒子滤波步骤中的不确定性. (FAST-SLAM 2.0 的思想,可以适当减少粒子数)

C. KartoSLAM
graph-based SLAM approach developed bySRI International’s Karto Robotics
highly-optimized and non iterative Cholesky matrix decomposition for sparse linear systems as its solver
the Sparse Pose Adjustment (SPA) is responsible for both scan matching and loop-closure procedures
Karto Open Libraries 2.0 SDK(Karto Open Libraries 2.0 is available under the LGPL open source license. You can try the full Karto SDK 2.1 for 30 days.) 后面在详细研究下(比较下MRPT )
图优化的核心思想我认为主要就是 矩阵的稀疏化与最小二乘..参见graphslam学习
  KartoSLAM是基于图优化的方法,用高度优化和非迭代 cholesky矩阵进行稀疏系统解耦作为解. 图优化方法利用图的均值表示地图,每个节点表示机器人轨迹的一个位置点和传感器测量数据集,箭头的指向的连接表示连续机器人位置点的运动,每个新节点加入,地图就会依据空间中的节点箭头的约束进行计算更新.
  KartoSLAM的ROS版本,其中采用的稀疏点调整(the Spare Pose Adjustment(SPA))与扫描匹配和闭环检测相关.landmark越多,内存需求越大,然而图优化方式相比其他方法在大环境下制图优势更大.在某些情况下KartoSLAM更有效,因为他仅包含点的图(robot pose),求得位置后再求map.

D. CoreSLAM
tinySLAM algorithm: two different steps(distance calculation and update of the map
simple and easy
为了简单和容易理解最小化性能损失的一种slam算法.将算法简化为距离计算与地图更新的两个过程, 第一步,每次扫描输入,基于简单的粒子滤波算法计算距离,粒子滤波的匹配器用于激光与地图的匹配,每个滤波器粒子代表机器人可能的位置和相应的概率权重,这些都依赖于之前的迭代计算. 选择好最好的假设分布,即低权重粒子消失,新粒子生成..在更新步骤,扫描得到的线加入地图中,当障碍出现时,围绕障碍点绘制调整点集,而非仅一个孤立点.

E. LagoSLAM
Linear Approximation for Graph Optimization
the optimization process requires no initial guess
基本的图优化slam的方法就是利用最小化非线性非凸代价函数.每次迭代, 解决局部凸近似的初始问题来更新图配置,过程迭代一定次数直到局部最小代价函数达到. (假设起始点经过多次迭代使得局部代价函数最小). LagoSLAM 是线性近似图优化,不需要初始假设. 优化器的方法可以有三种选择 Tree-based netORK Optimizer(TORO), g2o,LAGO

3D
3D SLAM技术是目前SLAM技术发展的方向,不仅在机器人领域,在VR(虚拟现实)、AR(增强现实)、室内高精地图、室内定位与导航、人工智能和深度学习等相交叉的领域,也是研究热点,是up to date的技术;而2D SLAM技术是3D SLAM技术的一个子集,应用环境有限。采用3D SLAM技术的激光影像背包式测绘机器人,可以爬山涉水、翻山越岭,全空间、全地形地在运动中高精度建模,理论难度较大。
3D-slam使用32线或者64线激光传感器,典型的为velodyne 激光传感器。
3D SLAM的实现手段是多样的。在室内等小范围环境识别和构图方面,可以采用视觉传感器,比如单目或双目摄像机、微软的kinect或Intel的real sense类的RGBD深度传感器等;在室外大场景环境中的工业级应用,往往采用激光和视觉传感器结合的里程计方法等。

实现算法:
Cartographer: 谷歌开源同步定位与制图库, 这个库可以实现2D和3D slam,SLAM 算法结合了来自多个传感器的数据,比如 LiDAR 激光雷达传感器、IMU 惯性测量单元,还有来自多个摄像头的数据。综合这些庞杂的数据,得以计算传感器及传感器周围的环境。
设计目标:低计算资源消耗,实时优化,不追求高精度。这个算法的目标应用场景:室内用服务机器人(如扫地机器人)、无人机等等计算资源有限、对精度要求不高、且需要实时避障的和寻路的应用。
特点:

1. LIDAR SLAM,并且用了IMU辅助;
2. 有submap,有scan matching,解决了一些基本的问题;
3. 有Loop closure optimization,这个很好,非常好,这是在indoor环境里必须要有的,
   在visual slam中大幅降低accumulated error的方法,作者给加进来了;
4. 给了一套node selection, branching, and computation of upper bounds的方法.

你可能感兴趣的:(导航,SLAM,激光slam小结)