注:原创不易,转载请务必注明原作者和出处,感谢支持!

本讲主要内容:
(1) 视觉SLAM中的传感器
(2) 经典视觉SLAM框架
(3) SLAM问题的数学表述

一 视觉SLAM中的传感器

想象一个在室内的移动机器人在自由地探索室内的环境,那么定位与建图可以直观地理解成:
(1) 我在什么地方?——定位
(2) 周围环境是怎样的?——建图

而要完成定位和建图则需要各种传感器的支持。传感器一般可以分为两类,一类是搭载于机器人本体上的传感器,另一类是安装于环境中的传感器。
(1) 搭载于机器人本体上的传感器
轮式编码器
相机

激光传感器

惯性测量单元IMU

(2) 安装于环境中的传感器
GPS设备

二维码

导轨

安装于环境中的传感器,虽然简单可靠,但它们在一定的程度上限制了机器人的使用范围。要想得到一个普遍的,通用的SLAM方案,更多的还是得依靠搭载于机器人本体上的传感器。

在视觉SLAM中,常用的视觉传感器有:单目相机,双目相机和RGB-D相机(深度相机)。单目相机的优点是结构简单,成本低,缺点是具有尺度不确定性。双目相机能够通过左眼和右眼的两张图像计算每个像素点的深度,但存在着标定复杂,计算量大的缺点。RGB-D相机能够通过物理手段直接得到像素的深度,但存在着测量范围窄,噪声大,视野小等缺点。


二 经典视觉SLAM框架

整个视觉SLAM流程包括以下步骤:
(1) 传感器信息读取,视觉SLAM中主要是相机图像信息的读取和预处理。可能还有其它的传感器,比如码盘,IMU等信息等
(2) 视觉里程计(Visual Odometry, VO),视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子。VO又被称为前端
(3) 后端优化(Optimization),后端优化接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于在VO之后,又被称为后端。
(4) 回环检测(Loop Closing Detection),回环检测判断机器人是否到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
(5) 建图(Mapping),它根据估计的轨迹,建立与任务要求对应的地图。

VO能够通过相邻帧间的图像估计相机运动,并恢复场景的空间结构。称它为里程计是因为它和实际的里程计一样,只计算相邻时刻的运动,而和再往前的过去的信息没有关系。然而,光靠VO是没法完成整个SLAM任务的。仅通过VO来估计轨迹,将不可避免地出现累积漂移。这是由于VO在最简单的情况下,只估计两个图像间的运动造成的。

回环检测主要解决位置随时间漂移的问题。为了实现回环检测,我们需要让机器人具有识别到过的场景的能力。我们希望机器人能使用携带的传感器——也就是图像本身来完成这一任务。例如,我们可以判断图像间的相似性来完成回环检测。所以视觉回环检测实质上是一种计算机图像数据和相似性的算法。

笼统地说,后端优化主要指处理SLAM过程中的噪声的问题。现实中,再精确的传感器也带有一定的噪声。后端优化要考虑的问题,就是如何从这些带有噪声的数据中估计整个系统的状态,以及这个状态估计的不确定性有多大——这被称为最大后验概率估计(MAP)。这里的状态包括了机器人自身的轨迹,也包含地图。

建图(Mapping)是指构建地图的过程。地图可以分为度量地图和拓扑地图两种。度量地图强调精确地表示地图中物体的位置关系,通常可分为稀疏(Sparse)和稠密(Dense)两种。

稀疏地图进行了一定程度的抽象,并不需要表达所有的物体。而稠密地图着重于建模所有看到的东西。对于定位,稀疏路标地图就足够,而用于导航则需要稠密地图。

相比于度量地图的精确性,拓扑地图则更强调地图元素之间的关系。拓扑地图是一个图(Graph),由节点和边组成,只考虑节点间的连通性,例如A,B点是连通的,而不考虑如何从A点到达B点。

三 SLAM问题的数学表述

详细内容请参考《视觉SLAM十四讲》。

考虑一段连续时间里的\(K\)个离散时刻\(t=1, 2, ..., K\)。用\(x\)表示机器人自身的位置,则各个时刻的标记为\(x_1, x_2, ..., x_K\)。设路标共有\(N\)个,分别为\(y_1, y_2, ..., y_N\)。

考虑下面两个问题:
(1) 什么是运动?所谓运动就是考虑机器人从\(k-1\)时刻到\(k\)时刻,机器人的位置\(x_k\)是如何变化的,如何用数学表示这一过程。
(2) 什么是观测?假设机器人在\(k\)时刻于位置\(x_k\)处探测到了某一个路标\(y_j\),如何用数学表示该事件。

对于问题(1),我们可以使用一个通用的,抽象的数学模型来表示
\[
x_k = f(x_{k-1}, u_k, w_k)
\]
其中,\(u_k\)是运动传感器的读书,\(w_k\)为噪声。\(f\)为一个通用的一般函数。这个方程被称为运动方程

对于问题(2),我们可以用一个观测方程来表示,该方程描述的是:当机器人在\(x_k\)位置上观测到某个路标点\(y_j\),产生了一个观测数据\(z_{k,j}\)。同样,用一个一般的通用函数\(h\)表示这个关系,其中\(v_{k,j}\)表示观测噪声。
\[
z_{k,j} = h(y_j, x_k, v_{k,j})
\]

下面举一个具体的参数化例子。

假设机器人在平面中运动,其位姿由两个位置和一个转角来表示,即\(x_k=[x,y, \theta]_k^T\)。同时,运动传感器能够测量到机器人在任意两个时间间隔的位置和转角变化量\(u_k=[\Delta x,\Delta y, \Delta \theta]_k^T\),于是,运动方程可以具体化如下
\[
\begin{bmatrix}x\\y\\ \theta \end{bmatrix}_k =
\begin{bmatrix}x\\y\\ \theta \end{bmatrix}_{k-1} +
\begin{bmatrix}\Delta x\\ \Delta y\\ \Delta \theta \end{bmatrix}_k +
w_k
\]

SLAM过程可以总结为两个基本方程:
\[
x_k = f(x_{k-1}, u_k, w_k)\\
z_{k,j} = h(y_j, x_k, v_{k,j})
\]

对于观测方程,假设机器人携带了一个二维激光传感器,二维激光传感器观测一个2D路标时,能够测量到两个量:路标点与机器人本体之间的距离\(r\)和夹角\(\phi\)。记路标点为\(y=[p_x, p_y]^T\)(下标已忽略),观测数据为\(z=[r, \phi]^T\),那么观测方程为
\[
\begin{bmatrix}r\\ \phi\end{bmatrix} = \begin{bmatrix}\sqrt{(p_x-x)^2 + (p_x-x)^2}\\ arctan(\frac{p_y-y}{p_x-x})\end{bmatrix} + v
\]

对于简单的线性高斯系统(LG系统),其无偏最优估计可以由卡尔曼滤波(KF)给出。

对于复杂的非线性非高斯系统(NLNG系统),我们一般使用扩展卡尔曼滤波器(EKF)和非线性优化方法求解。时至今日,主流视觉SLAM使用以图优化的优化方法进行状态估计。

《视觉SLAM十四讲》第2讲的更多相关文章

  1. 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM

    下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/slambook 第二讲:初识SLAM 2.4.2 Hello SLAM(书本P2 ...

  2. 高博-《视觉SLAM十四讲》

    0 讲座 (1)SLAM定义 对比雷达传感器和视觉传感器的优缺点(主要介绍视觉SLAM) 单目:不知道尺度信息 双目:知道尺度信息,但测量范围根据预定的基线相关 RGBD:知道深度信息,但是深度信息对 ...

  3. 《视觉SLAM十四讲》第1讲

    目录 一 视觉SLAM 注:原创不易,转载请务必注明原作者和出处,感谢支持! 一 视觉SLAM 什么是视觉SLAM? SLAM是Simultaneous Localization and Mappin ...

  4. 视觉slam十四讲第七章课后习题6

    版权声明:本文为博主原创文章,转载请注明出处: http://www.cnblogs.com/newneul/p/8545450.html 6.在PnP优化中,将第一个相机的观测也考虑进来,程序应如何 ...

  5. 视觉slam十四讲第七章课后习题7

    版权声明:本文为博主原创文章,转载请注明出处:http://www.cnblogs.com/newneul/p/8544369.html  7.题目要求:在ICP程序中,将空间点也作为优化变量考虑进来 ...

  6. 视觉SLAM十四讲:从理论到实践 两版 PDF和源码

    视觉SLAM十四讲:从理论到实践 第一版电子版PDF 链接:https://pan.baidu.com/s/1SuuSpavo_fj7xqTYtgHBfw提取码:lr4t 源码github链接:htt ...

  7. 高翔《视觉SLAM十四讲》从理论到实践

    目录 第1讲 前言:本书讲什么:如何使用本书: 第2讲 初始SLAM:引子-小萝卜的例子:经典视觉SLAM框架:SLAM问题的数学表述:实践-编程基础: 第3讲 三维空间刚体运动 旋转矩阵:实践-Ei ...

  8. 《视觉SLAM十四讲》学习日志(一)——预备知识

    SLAM简介 : SLAM是 Simultaneous Localization and Mapping 的缩写,中文译作 " 同时定位与地图构建 ".它是指搭载特定传感器的主题, ...

  9. 《视觉SLAM十四讲》学习日志(二)——初识SLAM

    小萝卜机器人的例子: 就像这种机器人,它的下面有一组轮子,脑袋上有相机(眼睛),为了让它能够探索一个房间,它需要知道: 1.我在哪——定位 2.周围环境怎么样——建图 定位和建图可以理解成感知的 &q ...

随机推荐

  1. Netty练手项目-简单Http服务器

    简单的设计思路就是,启动一个可以截断并处理Http请求的服务器代码.使用netty提供的boss线程与worker线程的模型,并使用netty的http解码器.自行编写了http url处理的部分.在 ...

  2. stm32WB 笔记

    1.HAL Debug functions(调试功能) 可以在不同模式下使能或者失能调试器 This section provides functions allowing to:• Enable/D ...

  3. 3.Https服务器的配置

    1.前言: 所谓区块链,简而言之就是一种数据结构,每一个区块都像账本的每一页纸记录了该网络上的交易信息,而众多区块在时间的基础上按照顺序连接起 来就形成了区块链.区块链能够以数字方式识别和跟踪交易,并 ...

  4. linux基础—课堂随笔05_文本三剑客之SED

    1.简介 sed是非交互式的编辑器,它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所有的输出行都被打印到屏幕上. sed编辑器逐行处理文件(或输入),并将结果发送到屏幕.具体过程如下 ...

  5. vim文本编辑及文件查找应用1

    vim编辑器:    文本编辑器:        文本:纯文本,ASCII text;Unicode(全球通用); 文本编辑种类:        行编辑器:sed        全屏编辑器:nano, ...

  6. angular打印功能实现方式

    目前主流的前端打印方式有两种:一种是使用浏览器打印功能直接打印页面,另一种是调用本地控件实现.浏览器打印功能单一,不适用于复杂的业务表单,而打印控件可以设计打印模板,实现复杂表单的打印,十分适合复杂的 ...

  7. Hive(七)Hive参数操作和运行方式

    Hive参数操作和运行方式 1.Hive参数操作 1.hive参数介绍 ​ hive当中的参数.变量都是以命名空间开头的,详情如下表所示: 命名空间 读写权限 含义 hiveconf 可读写 hive ...

  8. da面板修改SSH端口号

    进入da面板,找到管理工具菜单下的文件编辑器,点击进入,选择所要编辑的文件/etc/ssh/sshd_config 点击右侧的显示文件,即可打开该文件进行编辑,例如可以将原始端口22修改为 33 #P ...

  9. zeus部署

    1.下载zeus 阿里在github上已经不维护zeus了,在网上找到一个别人贡献的 https://github.com/michael8335/zeus2 下载下来 通过shell rz命令上传到 ...

  10. libusb_control_setup

     libusb_fill_control_transfer(transfer, devh, buf, ctrl_urb_complete_cb,             utrans, 1000); ...