前言——激光SLAM简述

1. 地图

对激光slam进行分类,我觉得最好的分类方式就是根据地图的种类来分,地图的表示形式直接联系了其他模块的可选项,甚至直接决定了整个系统的程序架构。
目前主流的地图表示形式有以下几种:

  1. 直接的点云地图
  2. 占据栅格地图
  3. 概率地图
  4. surfel地图
  5. 三维网格地图
  6. Multi-level surface 地图
  7. appearance-based 地图

2. 前端

前端是一个slam系统最基础的部分,它提供每一帧点云对应的位姿。在一个slam系统中,选择哪种前端,其实在选择了地图表示方法之后就基本确定了,我们可以大致梳理下可选的前端:

  1. ICP、NDT以及层出不穷的各种改进版。
  2. 基于线和面特征。最典型的莫过于鼎鼎大名的LOAM了。
  3. 基于栅格
  4. 基于range image。把点云展开成图片,借鉴二维图片中的方式更新位姿。
  5. 基于特征点和描述子。除了提取特征点以外,还计算对应的描述子。
  6. 基于语义特征。就是完全具有语义信息的点云,这样好处是不容易陷入局部最优了,但提语义也不是一件容易事。

3. 闭环

对于三维激光slam来讲,闭环是一个太重要的话题了,即便到现在,也是一个没有被完全解决的问题。其中最关键的核心在于当前端误差累计达到一定程度以后,场景重识别和位姿匹配都不能再以开环位姿为基础做判断,需要全局搜索和匹配了,目前主流的方法有以下几种:

  1. 基于栅格和分支定界。典型的就是cartographer中的闭环检测了。
  2. 基于appearance-based map的重识别,不过目前的多数这种方法都结合了激光和图像,对于只依赖激光的则不多。
  3. 基于特征点和描述子。特征点有了描述子,就可以全局搜索和匹配了,可以同时解决重识别和匹配问题。
  4. 基于直方图。对点云提取直方图,作为特征。
  5. 结合NDT。NDT每个网格的方差阵是可以提取特征的,这种特征也可以用来识别。
  6. 语义特征。最高级的特征好像什么都可以解决,不过现实中能不能提取出足够数量的完整语义特征倒是另外一回事。

4. 后端

使用图优化做后端已经成为当之无愧的首选,滤波的方法已经越来越少了。

5. 信息融合

对于自动驾驶中的激光slam来讲,除了优化前端和闭环产生的信息之外,大多数时候还要加上RTK和IMU,这样才能得到可复用的地理系下的地图。

  1. RTK就是直接在因子图中作为先验边加入,而IMU则有多种用途,最合理的融合方式是使用预积分,不过略显复杂,退而求其次,则可与RTK先做一个组合,再作为先验加入因子图也可。
  2. MU的另外一个作用就是去畸变,对于机械雷达,这是基本要求。

备注:

  • RTK ,实时动态载波相位差分技术
    是实时处理两个测量站载波相位观测量的差分方法,将基准站采集的载波相位发给用户接收机,进行求差解算坐标。这是一种新的常用的卫星定位测量方法,以前的静态、快速静态、动态测量都需要事后进行解算才能获得厘米级的精度,而RTK是能够在野外实时得到厘米级定位精度的测量方法,它采用了载波相位动态实时差分方法,是GPS应用的重大里程碑,它的出现为工程放样、地形测图,各种控制测量带来了新的测量原理和方法,极大地提高了作业效率。
  • IMU,惯性测量单元
    是测量物体三轴姿态角(或角速率)以及加速度的装置。一般的,一个IMU包含了三个单轴的加速度计和三个单轴的陀螺,加速度计检测物体在载体坐标系统独立三轴的加速度信号,而陀螺检测载体相对于导航坐标系的角速度信号,测量物体在三维空间中的角速度和加速度,并以此解算出物体的姿态。在导航中有着很重要的应用价值。

6. 定位

自动驾驶中很少边建图边定位,一般都是建好点云地图,再在该地图上做定位,把当前帧和地图做匹配可以实现基本的定位,如果要更稳定,则需要加上融合。

7. 初始定位

把初始定位从定位中单独提出来,是因为它重要,我们建的图都是大场景地理系下的地图,最可靠的方式是RTK提供准确的位置,以此位置为基础可实现初始化。有些时候卫星信号不理想,则只能由RTK提供粗略位置,然后使用点云匹配的方式在一定附近区域内搜索得到最优的初始结果。此处搜索方式和闭环相似,基本可以互相借鉴。对于建图时没有使用卫星信号的情况,也可以使用这种方式进行全局搜索初始化。

参考文献

以上内容参考自知乎的任乾的专栏文章:
[1] 专栏文章汇总
[2] SLAM论文和源码解读-写在前面

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页