zoukankan      html  css  js  c++  java
  • 视觉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, heta]_{k}^{T})
          • 运动传感器能够检测到每两个时间间隔位置和转角的变化量(u_{k}=[varDelta_{x},varDelta_{y},varDelta_{ heta}]_{k}^{T})
        • 则运动方程就可以具体化为( left[ egin{array}{c} x\ y\ heta\ end{array} ight] _k=left[ egin{array}{c} x\ y\ heta\ end{array} ight] _{k-1}+left[ egin{array}{c} varDelta x\ varDelta y\ varDelta heta\ end{array} ight] _k+w_k )
        • 二维激光传感器观测一个2D路标点时,能够观测两个量:路标点与机器人本体之间的距离r和夹角(phi)
          • 我们记路标点为(y=[p_{x},p_{y}]^{T}),观测数据为(z=[r,phi]^{T})
          • 为保持简洁,省略下标
        • 则观测方程可以具体化为( left[ egin{array}{c} r\ phi\ end{array} ight] =left[ egin{array}{c} sqrt{left( p_x-x ight) ^2+left( p_y-y ight) ^2}\ arctan left( frac{p_y-y}{p_x-x} ight)\ end{array} ight] +v )
      • 最终,SLAM过程可以总结为两个基本方程:( left{ egin{array}{c} x_k=fleft( x_{k-1},u_k,w_k ight)\ z_{k,j}=hleft( y_j,x_k,v_{k,j} ight)\ end{array} ight. )
      • 这两个方程描述了最基本的SLAM问题:当我们知道测量读数u,以及传感器读数z,如何求解定位问题(估计x)和建图问题(估计y)
      • 此时我们将SLAM问题建模成一个状态估计问题:如何通过带有噪声的测量数据,估计内部的、隐藏的状态变量?
        • 问题的求解与两个方程的具体形式以及噪声服从哪种分布有关
          • 运动和观测方程是否为线性
          • 噪声是否服从高斯分布
        • 可以分为
          • 线性/非线性和高斯/非高斯系统
          • 线性高斯系统(LG系统)是最简单的,其无偏最优估计可以由卡尔曼滤波器(KF)给出
          • 复杂的非线性非高斯系统(NLNG系统),我们会使用扩展卡尔曼滤波器(EKF)和非线性优化两大类方法去求解

    习题

    第三讲 三维空间刚体运动

    笔记

    习题

    本文来自博客园,作者:甫生,转载请注明原文链接:https://www.cnblogs.com/fusheng-rextimmy/p/15342153.html

  • 相关阅读:
    Spring IOC(二)beanName 别名管理
    Spring IOC(六)依赖查找
    Spring IOC(五)依赖注入
    Spring IOC(七)类型推断
    Spring 循环引用(二)源码分析
    Spring 循环引用(一)一个循环依赖引发的 BUG
    Spring IOC(四)FactoryBean
    Spring 中的类加载机制
    Spring IOC(三)单例 bean 的注册管理
    Spring Environment(三)生命周期
  • 原文地址:https://www.cnblogs.com/fusheng-rextimmy/p/15342153.html
Copyright © 2011-2022 走看看