视觉SLAM十四讲——笔记+习题解

参考教材——《视觉SLAM十四讲》高翔著

第一讲 前言

笔记

  • SLAM
    • Simultaneous Localization And Mapping——同时定位与地图构建
    • 搭载特定传感器的主体,在没有环境先验信息的情况下,在运动过程中建立环境的模型,同时估计自己的运动
    • 本质——对运动主体自身和周围环境空间不确定性的估计
    • 模块体系
      • 视觉里程计
      • 后端优化
      • 建图
      • 回环检测

习题

第二讲 初识SLAM

笔记

  • 单目SLAM

    • 估计的轨迹和地图,将与真实的轨迹、地图,相差一个因子,也就是所谓的尺度(scale)
    • 由于单目SLAM无法仅凭图像确定这个真实尺度,所以又称为尺度不确定性
  • 双目SLAM——Stereo

    • 通过视差来测量物体与相机的距离,克服单目无法检测距离的缺点
    • 由两个单目相机组成,两个相机之间的距离(基线baseline)是已知的,我们可以通过基线来估计每个像素的空间位置
    • 对双目相机进行扩展可以得到多目相机,本质没有区别
    • 双目相机测量到的深度范围与基线相关,基线距离越大,能测量到的就越远,因此一般双目相机体积较大
    • 缺点:
      • 配置和标定均较为复杂,其深度量程和精度受双目的基线与分辨率限制,而且视差的计算非常消耗计算资源,需要使用GPU&FPGA设备加速后才能实时输出整张图像的距离信息
      • 因此当先双目的主要问题是计算量无法解决
  • 深度相机(RGB-D相机)

    • 通过红外结构光或者Time-of-Flight(ToF)原理,像激光传感器那样,通过主动向物体发射光并接受返回的,测出物体离相机的距离
    • 相较于双目相机,通过物理测量手段,可以节省大量的计算量
    • 在SLAM方面主要用于室内
    • 缺点:测量范围窄,噪声大,视野小,易受日光干扰,无法测量投射材质
  • 传统视觉SLAM流程

    graph a[传感器数据]-->b[视觉里程计]-->c[非线性优化]-->d[建图] a[传感器数据]-->e[回环检测]-->c[非线性优化]
    • 视觉里程计(Visual Odometry,VO)
      • VO又称为前端(Front End)
      • 估算相邻图像间相机的运动,以及局部地图的样子
      • 只计算相邻时刻的运动而和其他数据没有关系,可以想象成一条金鱼
      • 仅通过VO来估计轨迹会不可避免地出现累计漂移(Accummulating Drift),当一个时刻的角度出现误差时,之后的不管之后的数据多么精确,都会不可避免地产生误差。因此为了解决累计漂移问题,需要引入后端优化和回环检测两种技术,回环检测负责把“机器人是否走回原位”的事情检测出来,后端优化则根据此信息校正整个轨迹的形状
    • 优化(Optimization)
      • 又称为后端(Back End)
      • 接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对他们进行优化,得到全局一致的轨迹和地图
      • 主要处理SLAM过程中噪声的问题,即如何从这些带有噪声的数据中,估计整个系统的状态,以及这个状态估计的不准确性有多大————这被称作最大后验概率估计(Mazimum-a-Posteriori,MAP)
      • 视觉SLAM中,前端和计算机视觉研究领域更加相关,比如图像特征提取与匹配,而后端主要时滤波和非线性优化算法
    • 回环检测(Loop Closing)
      • 又称闭环检测(Loop Closure Detection)
      • 解决位置估计随时间漂移的问题
      • 判断机器人是否曾经到达过先前的位置
      • 可以通过图像间的相似性来完成回环检测,如果检测到回环,会把信息提供给后端进行处理
    • 建图(Mapping)
      • 根据估计的轨迹,建立与任务要求对应的地图
      • 度量地图(Metric Map)
        • 强调精确地表示地图中物体的位置关系
        • 通常用稀疏(Sparse)和稠密(Dense)对其进行分类
          • 稀疏地图进行了一定程度的抽象,并不需要表达所有物体,在地图当中选取具有代表性的地标(Landmark)用于表示地图,其他元素则全部忽略
          • 稠密地图着重于建模所有看到的东西
        • 二维度量地图时许多小格子(grid),三维度量地图则是许多小方块(Voxel),一个单位含有占据、空闲、未知三状态,以表达格内是否由物体
      • 拓扑地图(Topological Map)
        • 强调地图元素之间的关系
        • 数据结构为图(Graph),由点、边组成,只考虑节点间的连通性
        • 放松了地图对精确位置的需要,去掉地图细节问题,是更为紧凑的表达方式
        • 不擅长表达具有复杂结构的地图
    • 如果将工作环境限定在静态、刚体、光照变化不明显、没有人为干扰的场景,那么SLAM系统应该是相当成熟的
  • SLAM问题的数学表述

    • 相机主要处理离散时刻的问题\(t = 1,...,k\),用x表示机器人自身的位置。各个时刻的位置标记为\(x_{1},...,x_{k}\),这些位置构成了轨迹
    • 设地图由多个路标(Landmark)组成,每个时刻,传感器会测量到一部分路标点,得到它们的观测数据
    • 不妨设路标点共有N个,用\(y_{1},...,y_{N}\)表示
    • 在此前提下可以描述
      • 运动 —— 从k-1~k时刻,位置x如何变化
        • 由此抽象出运动方程
          • \(x_{k}=f(x_{k-1},u_{k},w_{k})\)
          • \(u_{k}\)是运动传感器读数(输入)
          • \(w_{k}\)为噪声
      • 观测 —— 机器人在k时刻,于\(x_{k}\)处探测到某个路标\(y_{j}\)
        • 由此观测方程
          • 机器人在\(x_{k}\)位置上看到某个路标点\(y_{j}\),产生了观测数据\(z_{k,j}\)
          • \(z_{k,j}=h(y_{j},x_{k},v_{k,j})\)
          • \(v_{k,j}\)为观测噪音
    • 还可以使用参数化描述问题
      • 位姿 —— 由两个位置和一个转角来描述
        • \(x_{k}=[x,y,\theta]_{k}^{T}\)
        • 运动传感器能够检测到每两个时间间隔位置和转角的变化量\(u_{k}=[\varDelta_{x},\varDelta_{y},\varDelta_{\theta}]_{k}^{T}\)
      • 则运动方程就可以具体化为\( \left[ \begin{array}{c} x\\ y\\ \theta\\ \end{array} \right] _k=\left[ \begin{array}{c} x\\ y\\ \theta\\ \end{array} \right] _{k-1}+\left[ \begin{array}{c} \varDelta x\\ \varDelta y\\ \varDelta \theta\\ \end{array} \right] _k+w_k \)
      • 二维激光传感器观测一个2D路标点时,能够观测两个量:路标点与机器人本体之间的距离r和夹角\(\phi\)
        • 我们记路标点为\(y=[p_{x},p_{y}]^{T}\),观测数据为\(z=[r,\phi]^{T}\)
        • 为保持简洁,省略下标
      • 则观测方程可以具体化为\( \left[ \begin{array}{c} r\\ \phi\\ \end{array} \right] =\left[ \begin{array}{c} \sqrt{\left( p_x-x \right) ^2+\left( p_y-y \right) ^2}\\ \arctan \left( \frac{p_y-y}{p_x-x} \right)\\ \end{array} \right] +v \)
    • 最终,SLAM过程可以总结为两个基本方程:\( \left\{ \begin{array}{c} x_k=f\left( x_{k-1},u_k,w_k \right)\\ z_{k,j}=h\left( y_j,x_k,v_{k,j} \right)\\ \end{array} \right. \)
    • 这两个方程描述了最基本的SLAM问题:当我们知道测量读数u,以及传感器读数z,如何求解定位问题(估计x)和建图问题(估计y)
    • 此时我们将SLAM问题建模成一个状态估计问题:如何通过带有噪声的测量数据,估计内部的、隐藏的状态变量?
      • 问题的求解与两个方程的具体形式以及噪声服从哪种分布有关
        • 运动和观测方程是否为线性
        • 噪声是否服从高斯分布
      • 可以分为
        • 线性/非线性和高斯/非高斯系统
        • 线性高斯系统(LG系统)是最简单的,其无偏最优估计可以由卡尔曼滤波器(KF)给出
        • 复杂的非线性非高斯系统(NLNG系统),我们会使用扩展卡尔曼滤波器(EKF)和非线性优化两大类方法去求解

习题

第三讲 三维空间刚体运动

笔记

习题

posted @ 2021-09-27 11:20  甫生  阅读(527)  评论(0编辑  收藏  举报