视觉SLAM十四讲——第十三讲:建图

Posted chenying66

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视觉SLAM十四讲——第十三讲:建图相关的知识,希望对你有一定的参考价值。

@ 《视觉SLAM十四讲》知识点与习题

《视觉SLAM十四讲》第十三讲知识点整理+习题

正在学习SLAM相关知识,将一些关键点及时记录下来。

知识点整理

  1. 地图的作用:根据上层应用不同,地图所提供的功能也不同

    1. 定位:基本功能,VO可以利用局部地图实现定位,回环检测部分可以确定机器人之前出现的位置。还可以将地图保存下来,待下一次开机时使用
    2. 导航:使得机器人在地图中进行路径规划,指导机器人哪些地方可以直接通过,哪些不可以
    3. 避障:类似于导航,但是更注重局部、动态的障碍物的处理
    4. 重建:将地图展现给人看
    5. 交互:地图与人的交互,需要提供物理碰撞功能,需要机器人对地图有更高层面的认知
  2. 地图的类型

    1. 稀疏地图:只建模感兴趣的部分,即特征点(路标点)
    2. 稠密地图:建模所有看到过的部分
    3. 半稠密地图
  3. 稠密重建:需要知道每一个像素点(或大部分像素点)的距离

    1. 单目相机:通过移动相机之后进行三角化测量像素的距离
    2. 双目相机:利用左右目的视差计算像素的距离(多目原理相同)
    3. 使用RGB-D相机直接获得像素距离
  4. 3.1和3.2需要花费大量的计算,最后得到一些fragile的深度估计,但是3.3有一些量程、应用范围和光照的限制,但是使用RGB-D进行稠密重建往往是更常见的选择。但是3.1和3.2存在理论上的困难,即对环境纹理的依赖又如像素梯度与极线方向的关联等,所以,尽管目前双目和移动单目可以建立稠密的地图,通常会认为它们过分依赖于环境纹理和光照,不够可靠
    当在室外、大场景场合时,即无法应用RGB-D时,仍然使用立体视觉及3.1和3.2

  5. 稠密深度估计:在稠密重建过程中,无法把每个像素点都当作特征点计算描述子,匹配就成了很重要的一环。使用极线搜索和块匹配技术可以找到某个像素在各个图中的位置,具体实现方式:

  6. 极线搜索和块匹配:当知道两个相机之间的运动时,才能够确定极线,否之如果运动不知道,那么极线也无法确定。在极线上搜索与原图像特定点相近的像素点。
    但是,当相似像素点太多时,可以采用块匹配的方式,即在特定点周围和极线上某一点的周围来进行比较,从一定程度上提高区分性
    同时,去掉均值后进行相似性度量,可以在一定程度上变得更可靠一些,此时解决的问题是:由于光照变亮或相机曝光参数升高等带来的整体偏亮的影响

  7. 由于要沿着极线进行搜索,所以,倾向于使用概率分布来描述深度值,继而将像素点深度的估计建模为一个状态估计问题,于是就有了滤波器与非线性优化两种思路

  8. 块匹配的正确与否,依赖于图像块是否具有区分度,若图像中对象是均匀的颜色,缺乏有效的信息,那么此时得到的深度信息通常是不正确的。块匹配方法的缺陷解释了立体视觉的一个非常常见的问题:对物体纹理的依赖性,此时,如果仍然只关注某个像素周围的领域的话,是无法直接解决的

  9. 像素梯度与极线夹角较大时,极限匹配的不确定性大;而当夹角较小时,匹配的不确定性变小
    10.逆深度:目前SLAM研究中出现的一种广泛使用的参数化技巧。在多种仿真中发现,假设深度的倒数,也就是逆深度,为高斯分布是比较有效的,且在实际应用中,逆深度也具有更好的数值稳定性

  10. 由RGB-D图像建图

    1. 主流方法:根据估算的相机位姿,将RGB-D数据转化为点云,然后进行拼接,最后得到一个由离散的点组成的点云地图
  11. 体素滤波器:由于多个视角存在视野重叠,在重叠区域会存在大量的位置十分接近的点,这会浪费内存空间。体素滤波保证了在某个一定大小的立方体内仅有一个点,相当于对三维空间进行了降采样,从而可节省很多存储空间

  12. 然而点云是“基础的”,“初级的”,更接近于传感器读取的原始数据,不便于直接用于应用程序。从点云出发,可以根据不同的应用功能,构建对应的地图

  13. 八叉树地图Octo map:可以解决下述几个问题

    1. 点云地图规模较大,但是存储了很多不必要的细节,有效性较低
    2. 点云地图无法处理运动物体,因为做法中只有“添加点”,而没有“当点消失时把它移除”,在实际环境中,运动物体的普遍存在,使得点云地图变得不够实用
      八叉树地图的优点:
    3. 相较于点图更加节省空间:因为对于八叉树而言,当某个方块的所有子结点都被占据或都不被占据时,就只需要一个根节点,而不需要完整的树
    4. 可以使用概率来表示某节点是否被占据这件事,比如设定一个初始值,当它不断观测到它被占据,那么让这个值不断增加;反之,如果不断观测到它是空白的,那就让它不断减小即可
    5. 可以动态的建模地图中的障碍物信息
      使用概率对数值来描述某节点是否被占据:

八叉树的更新:当在RGB-D图像中观测到某个像素带有深度d,那么在深度值对应的空间点上观察到了一个占据数据,并且,从相机光心出发到这个点的线段上,应该是没有物体的(否则会被遮挡)

实践

  1. 单目稠密地图

以上是关于视觉SLAM十四讲——第十三讲:建图的主要内容,如果未能解决你的问题,请参考以下文章

视觉SLAM十四讲笔记-- 第三讲

视觉SLAM十四讲笔记-- 第三讲

《视觉slam十四讲》之第3讲-三维刚体运动

视觉slam十四讲适不适合科普

Rodrigus公式

初识视觉SLAM:用相机解决定位和建图问题