第二讲 初识SLAM
今天开始再系统的学习一遍高博的十四讲,在这里做一些笔记,打算开学前能写完。
一、引言
常用的相机
SLAM中使用的相机往往比我们熟悉的单反相机等更加简单,能够以一定的速率拍摄周围的环境,形成一个连续的视频流。按照工作方式可以分为:
- 单目相机(Monocular)
- 双目相机(Stereo)
- 深度相机(RGB-D)
单目相机
照片实质是拍照时的场景在相机的成像平面,它以二维的形式反映了三维的世界。因而丢掉了场景的深度(距离)信息。在单目相机中,我们无法从单张照片来计算场景中物体与我们之间的距离,只能通过移动相机才能估计出它的运动。但是单目SLAM估计的轨迹和地图总和真是的轨迹和地图相差一个因子,即所谓的尺度,单目SLAM无法仅通过图像确定这个真实尺度,成为尺度不确定性。种种问题给单目SLAM的应用带来了诸多不便。
双目相机和深度相机
单目SLAM的问题根本在于无法通过单张图片获取深度信息。而双目相机和深度相机可以弥补这一缺点。双目相机可以根据两个相机之间的距离(基线)来估计每个像素的空间位置。双目相机既可以在室外工作也可以在室内工作,但其配置和标定较为复杂,且需要消耗大量的计算资源。
深度相机,其最大的特点是可以通过红外结构光或Time-of-Flight(TOF)原理,主动向物体发射光,并接受返回的光,测出物体与相机之间的距离。利用深度相机测距可以节省大量的计算,但多数的深度相机目前还存在测量范围窄,噪声大,视野小,易受日光干扰,无法测量投射材质等问题。
二、经典视觉SLAM框架
视觉里程计
视觉里程计(Visual Odometry, VO)的任务是估算相邻图像间相机的运动,以及局部地图的样子,VO又称前端。仅仅通过视觉里程计,看似可以解决SLAM问题,但是视觉里程计(在最简单的情况下)只估计两个图像间的运动,这将带来不可避免的累计漂移。因此还需要两种技术:后端优化和回环检测。
后端优化
后端优化(Optimization)接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对他们进行优化,得到全局一致的轨迹和地图。后端优化主要处理SLAM中的噪声问题,即这些噪声是如何从上一个时刻传递到下一个时刻的,而我们对当前的估计又有多大的自信。
回环检测
回环检测(Loop Closing)判断机器人是否到达过先前位置。如果检测到回环,他会把信息提供给后端进行处理。回环检测主要解决位置估计随时间漂移的问题,如果有了充分而且正确的回环检测,就可以消除累计误差,得到全局一致的轨迹和地图。
建图
建图(Mapping)根据估计的轨迹,建立与任务要求对应的地图。
地图大体上可以分为度量地图和拓扑地图两种:度量地图可分为稀疏和稠密两种,对于定位而言,稀疏地图就可达到要求,而对于导航来说,则需要更多的是稠密地图。拓扑地图则更强调地图元素之间的关系。
三、SLAM问题的数学表述
运动与观测
运动:考虑从k-1时刻到k时刻,机器人的位置x是如何变化的。
观测:假设机器人在k时刻于
x
k
x_k
xk处探测到了一个路标
y
j
y_j
yj,考虑这件事如何用数学语言来描述。
运动方程
用
u
k
u_k
uk来表示运动传感器的读数即输入,
w
k
w_k
wk为噪声,则:
x
k
=
f
(
x
k
−
1
,
u
k
,
w
k
)
x_k = f(x_{k-1}, u_k, w_k)
xk=f(xk−1,uk,wk)
观测方程
当机器人在
x
k
x_k
xk位置观察到某个路标点
y
j
y_j
yj,产生了一个观测数据
z
k
,
j
z_{k,j}
zk,j,则:
z
k
,
j
=
h
(
y
j
,
x
k
,
v
k
,
j
)
z_{k, j} = h(y_j, x_k, v_{k,j})
zk,j=h(yj,xk,vk,j)
这两个方程描述了最基本的SLAM问题,当知道运动测量的读数u,以及传感器的读数z时,如何求解定位问题(估计x),和建图问题(估计y)。