[概览]自动驾驶与AR增强现实中的关键技术:SLAM

SLAM中文全称叫做:实时定位与建图技术(Simultaneous localization and mapping).SLAM技术就是通过利用传感器比如:摄像头或者雷达对周围环境进行录像,然后把环境通过三维重建建图出来。最终把这周围的地图记录下,那就可以精确导航了。

SLAM的应用有哪些?

答:从名字可以看到SLAM的作用:定位和建图。我们通常用的地图是用导航系统(如:北斗导航系统)来定位,这个虽然很方便但是也存在很多解决不了的问题。因为导航系统是需要接收到卫星信号才能导航,那么进入室内就无法接收到卫星信号了,而且民用的导航系统精度非常差,误差可能会超过10m。那么我们在商场里面想找一个出口,导航误差有10m的话那就很难受了。这就需要用到SLAM技术,SLAM技术能用摄像头把周围环境扫一遍就能重建出三维地图。然后根据三维地图就能导航了。百度的阿波罗自动驾驶系统就是用的是激光雷达扫描然后用SLAM建图来实现自动驾驶。除了自动驾驶这么高端的应用,像小米扫地机器人也用了SLAM技术对房间进行建模,从而实现自动避免障碍物和清理整个房间。而且不单单是导航,还可以根据重建的三维地图我们自己加入一些额外的三维模型进行这就是增强现实。像宝可梦,腾讯的抓妖记,百度地图的路面导航,淘宝的天猫精灵游戏,倒车影像辅助驾驶系统都是用的SLAM技术建图,然后把我们设计的三维模型放到我们建好的地图上。

SLAM有哪些核心技术?

  1. 传感器数据处理。因为我们要使用传感器捕获周围环境,而传感器一定会有噪声所以肯定是要对传感器数据处理。常用的传感器是摄像头,双目摄像头,深度相机和雷达。
  2. 估计传感器的位置和姿态。SLAM中的定位技术它的目标就是要确定传感器的位置和姿态。比如扫地机器人我得知道我当前的位置相对于房间是在哪,我的朝向是相对房间在哪。估计相机的位置和姿态这个过程学术名词叫做:“前端里程计”。里程计你想象出租车的里程计,它就记录了当前我走了哪些路,怎么拐弯的。其中使用摄像头来估计位置和姿态那就叫做视觉里程计(Visual Odometry)简称VO。
  3. 对步骤2的数据进行去噪优化。因为我们采集到的是相机位置和姿态的连续变化,那么我们结合某段时间内的数据可以对当前这个时刻所估计出的数据进行矫正。这个步骤叫做“后端非线性优化”。
  4. 回环检测。假设我们经过某个地方两次了,那么这意味着我们走过的路径肯定要成一个环,如果我记录的数据发现他们不是一个环那么我们要对它进行校准,让它成一环。
  5. 建图:这个就很容易理解,就是把周围环境建成三维地图。因为在前面那些步骤只是记录的相机走过的路(这个只能用于定位目前传感器相对环境是在哪但是无法感知环境长啥样),但是并没有对周围环境进行建模。

SLAM问题的数学表达

其实很多问题最难的不是怎么求解问题,而是怎么把这个问题理性化的用数学表示。能用数学表达那就求解非常容易了(因为求解数学问题无非就是解方程、求导再解方程没什么难度)。

1我在哪?

我们在前面提到的SLAM有一个很重要的目标就是确定机器人位置在哪。那么怎么描述机器人的位置呢?其实很简单就是高中学的三维坐标[x,y,z]。我们把这个三维坐标向量记作xx。然后我们期望有一个函数ff它能根据传感器的数据,和上个时刻的位置数据能算出现在这个时刻机器人相对环境中的位置。我们把前面这句话描述成数学公式就是xt=f(xt1,ut)x_t=f(x_{t-1},u_t)。其中xt1x_{t-1}是上个时刻的机器人位置,xtx_t是当前时刻的机器人位置,utu_t是传感器数据。

由于这个过程中肯定会存在一些噪声那么我们计算出来的当前时刻机器人位置xt=f(xt1,ut)+noisetx_t=f(x_{t-1},u_t)+noise_t

现在暂时不管这个ff怎么实现的,我们已经把我在哪这个问题用数学方式描述了。在学术上“我在哪?”这个问题叫做“运动方程”。但是为何要这么抽象描述呢这是因为不同的传感器所提供的传感器数据不同,而且描述位置的方式也有很多种。比如:扫地机器人它的位置信息可以这样描述xt=[a,b,θ]x_t=[a,b, heta]其中(a,b)是机器人的坐标,θ heta是它的正前方转向角度。而无人机的位置描述那就更复杂了可以这样描述[a,b,c,θ,γ,β][a,b,c, heta,gamma,eta],其中a,b,c是三维位置坐标,剩下的几个是角度信息。

2标志物(路标)在我视图中的位置是什么?

由于我们机器人会看到很多标志物,比如红绿灯。这些是不会动的,如果我们能计算出标志物和我的相对距离,并且拿它和标准的距离比较。那么就可以校准我当前的位置定位了。好了,那么计算标志物在我视图中的位置呢?我期待有个函数hh它能够根据当前时刻t下我的位置xtx_t,指定一个路标yiy_i来计算出路标yiy_i相对与我的位置zt,iz_{t,i}。当然也会存在噪声。

所以标志物yiy_i在时刻t相对与我的位置zt,i=h(xt,yi)+noiset,iz_{t,i}=h(x_{t},y_i)+noise_{t,i}。(这个方程的学术名叫做观测方程

SLAM的数学描述

运动方程:xt=f(xt1,ut)+noisetx_t=f(x_{t-1},u_t)+noise_t
观测方程:zt,i=h(xt,yi)+noiset,iz_{t,i}=h(x_t,y_i)+noise_{t,i}
于是乎我们要做的就是解决上面两个方程,但是它里面有噪声怎么办?答:这就得假设噪声服从某种概率分布,然后对噪声进行滤波(去噪)。一般默认是服从高斯分布。其中线性高斯分布是可以用卡尔曼滤波算法(Kalman Filter, KF)。非线性高斯分布那就得用扩展的卡尔曼滤波(Extended Kalman Filter, EKF)。当然还有其他的滤波算法如:粒子滤波(Particle Filter)。当然还可以用非线性优化方法来求解这个问题主流的视觉SLAM是用图优化(当然会更耗费计算资源)。

知乎 https://www.zhihu.com/people/yuanmuou/activities
原文地址:https://www.cnblogs.com/ailitao/p/11047271.html