无人驾驶 OpenCV(12)

无人驾驶 OpenCV(12)_第1张图片

现在无人驾驶技术已经成型,不过造价不菲,google 的无人驾驶头顶的雷达一个就要 8w 多人民币。我们需要既好用又经济,而且我们还将控制权掌握在自己手里。基于这些,开始收集资料选择适合自己无人驾驶研究之路。最终选定了采用今天要开始介绍的 ORB-SLAM 开始研究无人驾驶。

图论

图是由边和点组成的,有关图的概念我是在《数据结构》书接触到的,一个种非线性数据结构。

什么是图

图是网络结构的抽象模型。什么是模型呢?其实我对模型到底什么也是最近有点感悟。模型是用来解决问题的方案?就是现实中具体东西的抽象?
图是一组由边连接的节点,刚刚介绍树也有节点,不过相对于图,树数据结构显得更加有序,有序说明其简单。

图的应用

图在今天被广泛的应用,无论是在地图、社交网络和人工智能中都少不了图数据结构。在 tensorflow 就采用图计算来进行计算。

图中的概念

图是由一组节点和一组边组成,节点是通过边来建立关系的。通过分析图我们得出一些有关图基本定理或者说是有关图的概念。

  • 相邻顶点: 由一条边连接在一起的顶点称为相邻顶点
  • 顶点的度:一个顶点的度是其相邻顶点的数
  • 路径: 是多个顶点的一个连续序列

在开始之前我们先来个开场白,我们说一个东西好总喜欢通过对比来突出其优点,那么今天介绍的ORB-SLAM 技术,我们先说一下 PTAM(parallel tracking and Mapping)

ORB-SLAM系统具有以下优点

  • 在追踪、建图、重定位和回环过程中采用同一种特征点-ORB,使得该系统在没有 GPU 加速下实时运行,并且对光照和视角变化具有良好的鲁棒性。
  • 在追踪和建图过程中使用局部共视地图,而不是全局地图,使得该系统能够在大尺度场景下实时运行。
  • 在共视图上通过最小生成树生成本质图,简化地图结构,使得系统能够实时的闭环优化。
  • 在特征跟踪失败情况下,通过词典模型匹配,使得系统能够实时的重定位。
    这个可以机器人定位失败后重新启动进行定位
  • 采用适者生存的方法来筛选地图点和关键帧,从而提高系统追踪的鲁棒性和系统的可持续运行。

如上图所示,ORB-SLAM系统主要运行三个并行线程:特征追踪线程(主线程)、局部建图线程和回环优化线程。

特征追踪线程主要负责估计每一帧相机的位姿和选择新的关键帧。首先初始化地图,然后基于前一帧和匀速运动模型来初始化当前帧的位姿,如果当前帧丢失,则通过全局重定位来初始化当前帧的位姿。一旦获取当前帧的初始化位姿和一组匹配点对,构建当前帧的局部地图,通过将局部地图中的地图点投影到当前帧中寻找更多的3D-2D匹配约束,使用PnP算法估计当前帧的位姿。最后根据准则判断当前帧是否可作为新的关键帧插入。

局部建图线程处理新的关键帧,主要包括管理局部地图和局部BA优化。首先根据当前关键帧更新共视图和本质图信息。然后在相邻帧中搜索当前帧未匹配的ORB特征点,三角化创建新的地图点。根据一些准则剔除冗余的地图点和关键帧。最后对当前帧局部地图中的关键帧和地图点进行局部BA优化。

回环优化线程处理局部建图线程后的关键帧,主要包括回环检测和全局优化。首先查找当前关键帧是否存在回环候选帧,如果存在,则计算当前帧与回环候选帧的相似变换sim3,从而确定是否为回环帧和估计回环处的累积漂移。然后根据相似变换信息,融合地图点和更新共视图中的边。最后在本质图上进行位姿图优化,从而实现全局位姿的一致性。

你可能感兴趣的:(无人驾驶 OpenCV(12))