激光slam与视觉slam

时间:2024-04-06 16:13:02

介绍

Slam:同步定位与建图,就是在定位的同时,建立环境地图。
主要思路是根据运动学模型计算位姿,并通过传感得到的环境信息,对估计位姿调整优化,从而得到准确位姿,根据定位及感知数据绘制地图。
下图为slam主流框架:
激光slam与视觉slam

  1. 传感器感知在视觉SLAM中主要为传感信息的读取和预处理。
  2. 前端里程计(Radar/Visual Odometry)。特征点匹配及运动估计。
  3. 后端优化(Optimization)。后端接受不同时刻里程计测量位姿,以及回环检测的信息,对估计轨迹及环境信息进行全局优化。
  4. 回环检测(Loop Closing)。回环检测判断机器人是否到达过先前的位置。
  5. 建图(Mapping)。根据估计的环境信息及机器人运动轨迹,建立对应的地图。

前端:主要是提取处理传感器得到的数据,比如,激光的点云,视觉的图像,结合传感器数学模型及机器人运动学模型,推算得到机器人的位姿及热环境特征点的相对位置。
后端:由于模型偏差,会导致误差累积,因此,需要后端做一次全局的优化
回环检测:就是闭环检测,检测机器人是否到达原始位置,从而结合后端算法,对机器人的运动轨迹及地图进行全局的优化和调整。

前端差异

激光slam与视觉slam
前端完成的主要任务包括:特征点提取,特征点匹配,机器人运动位姿估计
一般前端运动估计都是与里程计结合的,如IMU或轮式里程计等。视觉匹配也算是里程计。通过里程计的运动学模型得到估计位姿,但是由于里程计模型的误差(静差)以及测量误差等,会导致累计误差产生,因此需要通过环境反馈的信息对位姿估计值进行修正优化。
激光slam与视觉slam
环境特征:

  • 视觉是提取图像特征点,比如,提取图像像素变化最快的点作为特征点,并且提取这个点对应的描述信息,如图像梯度,用来匹配特征点,以及保证图像由于相机移动带来的尺度变化。
  • 激光是激光束打到实际位置返回来的激光束,得到的点。雷达收到的是各束光返回的距离信息。

提取特征点差异对比:

  • 视觉得到的是像素特征点,需要通过前后帧图像对比计算得到实际的环境特征点的位置,因此会导致
  • 激光得到是环境信息相对于激光的极坐标下的坐标。但是得到的环境信息量比较少,会加大点云配准的难度。

匹配算法对比:

  • 视觉前端:利用帧间图像差估计运动,称视觉里程计
    代表算法 :特征点法,光流法,直接法
    整体思路:就是根据前后帧得到的图像来估计机器人的运动变换
    特征点法:通过提取图像特征点,采用描述子来匹配前后帧图像的特征点,计算得到特征点的环境深度及估计机器人位姿。
    光流法:假设灰度信息不变,对比前后帧图像,得到同一特征点在图像上的移动。从而得到得到特征匹配,位姿估计算法同特征点法。特征点法与光流法是特征点的匹配方法不同。一个利用图像描述子,一个通过像素移动匹配特征点。
    直接法:基于直接法,利用得到的像素移动,来直接估计机器人运动。
  • 激光:激光一般与其他里程计结合使用。那么其他里程计就是激光slam的前端。
    单独的激光slam(不含其他里程计) 也是利用前后帧特征点(点云)的变化来估计运动。
    激光由于环境信息量少,虽然知道具体特征点精确相对位置,但是帧间匹配由于信息量比较少,两帧点云的匹配相对视觉有难度,因此常与其他里程计结合。
    代表算法:ICP算法ICP算法其实是包含前端位姿估计及后端优化的。ICP直接得到的是优化后的位姿。所以也可以说ICP是后端优化算法。利用ICP算法的slam概念上包含前后端了
    演化算法:NICP NDP等算法。
    ICP是一种交叉迭代优化,即分为两步优化,优化点云配准与优化运动估计。
    NICP加入了点所在曲面的法向量信息,增加点云配准的可靠性。NICP详细介绍
    NDP算法是加入障碍物信息(栅格地图占用率)来进行匹配。NDP详细介绍

后端优化

用来修正估计位姿的累计误差
优化算法思路:激光和视觉的优化方法是类似的。通过后验来评估先验的准确性。
简单说,由A推出B,那么通过检验B的存在与否也能推测出A的存在与否。
我们通过图像对比得到位姿估计,我们可以通过估计的位姿,算出该位姿下获得的图像与实际图像的差异来评估估计位姿的正确性。激光则是通过得到的点云配准情况来观察(运动)位姿估计的可信度。

代表算法:拓展卡尔曼滤波器(EKF),粒子滤波器(PF),最小二乘法-图优化
KF: 应用于线性系统。基于高斯噪声分布,计算权重(乘子),将估计位姿代入观测模型得到的观测值与真实观测值的差,乘以得到的乘子,就是位姿估计的误差修正。
激光slam与视觉slam
EKF:就是将运动方程微分线性化(运动方程的一阶泰勒展开),在瞬时就相当于线性方程,从而使用KF算法。缺点:有求逆过程,计算量随特征点数多少指数级上升。

PF:是使用粒子来模拟机器人,不同粒子所携带的位置信息有不同的可信度,通过得到的观测值来衡量粒子携带位置信息的可信度,并不断更新粒子。可信度最高的粒子就代表机器人的运动过程种的位置情况。缺点:粒子耗散问题
激光slam与视觉slam
最小二乘法:使用最优化方法(最速下降法;GN;LM等)迭代改变估计位姿,使估计位姿代入观测模型得到的观测值与真实观测值的范数最小化。从而得到优化估计位姿。
图优化:基于最小二乘法,将多个时刻机器人的位姿同时进行优化。

回环检测

用来判断机器人是否到达之前位置
算法思路:有基于里程计结合的,就是根据机器人位姿大致估计有没有到回环。
因为不知道什么时候能是回环,实时比对太耗计算量,随机帧则可能错过回环。现在常用局部回环,
视觉:使用图像相似性来匹配回环
激光:点云信息少,回环不好建立。Cartographer的回环检测方法。通过匹配submap来匹配回环。

匹配代表算法:Bow(词袋模型)
词袋模型,找到一个字典,通过这个字典,得到每帧点云或者图像基于这个字典的表示。通过对比这个表示得到图像或者点云差异。
就好比判断人脸,可以使用眼睛,鼻子,嘴作为字典,查看图像是否包含这些元素,来判断是不是人脸图像。
字典生成:多层k-means聚类方法k-means介绍,就是使用不同特征分类,将点集进行分类,从而字典就使用kd-tree来表述。遍历到叶子节点的路径,就是点集基于该字典的描述。
激光slam与视觉slam

优劣势对比

激光slam与视觉slam
硬件上: 相机相比雷达安装方便,雷达贵
视觉:语义丰富,但是计算量大,对环境依赖性也强
激光:相对更精确,但是雷达贵,探测范围有限,另外缺乏语义信息,回环不好检测。

开源算法

视觉slam开源算法

激光slam与视觉slam
ORB算法:描述子做了取舍折中,特征匹配上做了提速。
稠密建图:个人觉得对于位姿估计的精确度影响一般,但是会拖延运算速率。主要优点,人机交互好一些。
直接法:运算速度快,但是有灰度不变的假设,匹配上精确度会变差。

激光slam开源算法

激光slam与视觉slam