当前位置: 首页 > news >正文

ORB-SLAM2源码学习:总结篇(二)三大线程

1. Tracking线程

1.1 初始化

① 对于单目而言,连续两帧的特征点个数大于100,然后寻找两帧的匹配点对(具体方法在总结篇一),匹配点对大于100后计算两帧的位姿,位姿通过单应矩阵H或基础矩阵F计算;

② 以单应矩阵H为例,从匹配点在随机选择八对点计算H,每个解通过卡方检验计算最优解,代码有个打分机制,最终确定通过H或者F计算位姿;

③若以H进行位姿的恢复,通过SVD计算得到多组解,每个解通过三角化计算空间点坐标,至此得到了两帧的位姿变换、当前帧的位姿Tcw(cur) (初始化第一帧的位姿是单位矩阵)、特征点对应的空间点;

1.2 初始化地图

为关键帧初始化创建了地图点,并将关键帧插入到地图当中,并更新了地图中关键帧和地图点的观测关系。之后进行了一次全局BA优化,优化地图点和位姿。

1.3 初始位姿估计

①参考关键帧跟踪

当前帧和参考关键帧通过词袋模型计算匹配点对,上一帧的位姿作为当前帧的初始位姿,然后进行BA优化当前帧的位姿,最后剔除优化后的匹配点中的外点。

②恒速模型跟踪

当前帧和上一帧通过投影匹配计算匹配点,上一帧的位姿通过速度更新,然后进行BA优化当前帧的位姿,最后剔除优化后的匹配点中的外点。

③重定位跟踪

词袋找到与当前帧相似的候选关键帧,然后使用3D-2D匹配点的 EPnP算法求初始位姿,再使用BA来优化当前帧的位姿,如果内点数量不够多,通过投影匹配方式对之前未匹配的点进行匹配,再进行BA优化求解。

跟踪方式的选择逻辑如下

如果上一帧跟踪成功:

  • 优先尝试 恒速模型跟踪;
  • 如果恒速模型不可用或跟踪失败,则尝试 参考关键帧跟踪;

如果上一帧跟踪失败:

  • 尝试 重定位

1.4 局部地图跟踪

搜索局部关键帧、局部地图点,将局部地图点(除了当前帧的地图点)投影到当前帧,计算匹配点对,然后进行位姿优化,初始位姿根据前面三种方法计算得到。

1.5 关键帧插入

关键帧的选取标准:

(1)刚进行重定位,不适合做关键帧,距离上一次重定位距离至少20帧

(2)局部地图线程空闲、或者距离上一次加入关键帧过去了20帧

(3)当前帧匹配到的地图点数量 少于参考关键帧的 90%,确保关键帧之间有明显的视觉变化。

跟踪线程思维导图

2.LocalMapping

①将关键帧插入地图中;

②剔除地图中冗余地图点,冗余条件(满足一个认为冗余):

  • 在创建的三帧内观测数目少于2 (双目和RGBD为3)
  • 召回率 = 实际观测到该地图点的帧数mnFound / 理论观测到该地图点的帧数mnVisible < 0.25

③当前关键帧与相邻关键帧通过三角化产生新的地图点,当所有的关键帧都处理完,当前关键帧与相邻关键帧帧中重复的地图点;

④局部BA优化位姿

⑤剔除冗余关键帧,冗余的判定:该关键帧的90%的地图点可以被其它关键帧观测到。

3.LoopClosing

①通过词袋从所有关键帧中筛选出和当前帧有可能形成闭环的候选关键帧;

②使用相似求解器Sim3Solver求解出候选关键帧与当前帧之间的相似变换(单目相似变换,而双目或者RGBD是刚体变换),利用相似变换找出更多的匹配地图点,然后使用BA对位姿进行优化,如果内点大于20,认为找到了闭环关键帧

③闭环矫正:通过计算的相似变换,调整与当前帧相连的关键帧位姿以及这些关键帧观测到的地图点位置;闭环关键帧及其共视关键帧的地图点与当前关键帧及共视关键帧的地图点进行匹配,新增或者替换当前关键帧组的地图点;更新当前关键帧之间的共视相连关系,即更新covisibility graph;然后是本质图的优化(BA),仅优化所有关键帧位姿;最后再来一个全局BA优化。

相关文章:

  • Redis四种模式在Spring Boot框架下的配置
  • 深度解析:如何在 Vue 3 中安全访问子组件实例
  • 《Python基础教程》附录B笔记:Python参考手册
  • 掌握 ArcGIS Pro:古地图制作技巧与方法
  • 2025华为昇腾CANN训练营 2.0 之旅
  • windows下玩转vllm:vllm简介;Windows下不能直接装vllm;会报错ModuleNotFoundError: No module named ‘vllm._C‘
  • Windows server网络安全
  • Next+React项目启动慢刷新慢的解决方法
  • Android 加解密算法工具类封装:AES、RSA、MD5 一站式解决方案
  • 鸿蒙系统中的持续部署
  • labview实现大小端交换移位
  • 虚拟机 CentOS 9 网络配置
  • 【Spring 事务】
  • Grafana集成Quickwit插件
  • 从零到EXE-探索用Python开发贪吃蛇单机小游戏全过程及避坑指南
  • 从0到1,带你开启PHP语言学习之旅
  • 电机控制常见面试问题(二)
  • 数据安全_笔记系列12:数据访问控制中的三个管理员权限划分
  • Apollo企业二次开发工具Application X指南(一):系统架构、cyber RT和包管理
  • 《C#上位机开发从门外到门内》2-3:SPI总线协议详解及应用实践
  • 黑马程序员大学叫什么/长沙哪里有网站推广优化
  • 网站定制那个好/四川seo平台
  • 网站日志如何分析/竞价推广代运营企业
  • 怎么用Visio studio做网站/网络推广是做什么工作的
  • 求大神帮忙做网站/搜索引擎关键词竞价排名
  • 公司企业网站怎么建设/怎样自己开发一款软件