IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> ORB-SLAM2前段流程框架 -> 正文阅读

[人工智能]ORB-SLAM2前段流程框架

ORB-SLAM2前端

📌以ros_mono.cc为例,即单目VO

  • Step1:定义ros接口,初始化ORB-SLAM系统:
    ORB_SLAM2::System SLAM(argv[1],argv[2],ORB_SLAM2::System::MONOCULAR,true);

  • Step2:从ROS中接受图像信息,并将ROS消息格式转为cv::Mat格式(写在回调函数中)

  • Step3:开启正式相机跟踪模式

  • Step4:判断是SLAM模式还是纯定位模式

    • Step4.1:如果是纯定位模式

      • Step4.1.1:关闭局部建图线程,因为纯定位模式下不需要局部建图;

      • Step4.1.2:开启“纯定位模式下的跟踪”

        mpTracker->InformOnlyTracking(true);
        
    • Step4.2:如果是正常的SLAM模式

      • Step4.2.1:关闭纯定位模式

      • Step4.2.2:开启局部建图线程;

  • Step5:初始化

    • Step5.1:图像转为灰度图;

    • Step5.2:特征提取、描述子计算、网格划分

      • Step5.2.1:设置图像金字塔的参数;

      • Step5.2.2:提取图像的ORB特征和描述子;

      • Step5.2.3:图像去畸变;

      • Step5.2.4:计算图像去畸变后的图像边界,一方面是为了保证提取的特征点都要在图像边界内,另一方面则是要方便“图像划分网格”,将特征点分配到网格中;

      • Step5.2.5:将特征点分配到“已经划分好的网格”中,目的是为了加速匹配;

    • Step5.3:单目初始化

      • Step5.3.1:创建初始化器,要求初始化帧的特征点数目大于100个,如果不够,这不能创建初始化器;

      • Step5.3.2:第一帧和第二帧(A帧和B帧),两帧分别提取ORB特征、描述子、匹配关系:

        • Step5.3.2.1:在A帧和B帧之间构建投影关系,将A帧(第一帧)的点投影到B帧(第二帧)中,然后进行“滑动窗口”搜索,找到“最佳距离”的描述子,即“A帧和B帧的最佳匹配点”

        • Step5.3.2.2:计算每个特征点的旋转角度,目的是为了后续的旋转直方图;

        • Step5.3.2.3:将每个点的旋转角度存入到旋转直方图中,然后只选择“角度”分布最大的三个区间,以此来达到筛选“外点”的效果;

      • Step5.3.3:验证Step5.3.2的匹配成功点数量,如果小于100,则认为初始化器不可靠,需要重新创建初始化器;

      • Step5.3.4:正式开启初始化,并三角化:

        • Step5.3.4.1:只选择A帧(第一帧)和B帧(第二帧)成功匹配的点,存为C;

        • Step5.3.4.2:在集合C中,利用八点法计算单应矩阵H和基础矩阵F来求解相对运动R、t

          • (1)计算H/(H+F)的得分,以此来判断是选择单应矩阵的结果还是基础矩阵的结果;

          • (2)如果H/(H+F)的得分大于0.4(图像场景偏向平面),则表示单应矩阵H较大,则选择单应矩阵计算相对运动的结果 (含三角化)

          • (3)if(pF_HF>0.6) 表示基础矩阵F较大(图形场景偏向非平面),则选择基础矩阵F计算相对运动的结果 ** (含三角化)**

      • Step5.3.5:初始化成功,删除无法三角化的地图点;

      • Step5.3.6:将剩下的地图点存入到Map中;

    📌完成初始化;

  • Step6:正式跟踪

    • Step6.1:如果是正常的SLAM模式

      • Step6.1.2:帧间跟踪:

        • (1)匀速运动模型帧间跟踪;(首选)

        • (2)根据参考帧进行运动跟踪;(其次)

        • (3)重定位进行位姿跟踪;(最后,无奈之举)

      • Step6.1.3:跟踪局部地图:TrackLocalMap()

        • (1)更新局部关键帧和对应的地图点;

        • (2)因为“局部关键帧”和地图点已经发生了改变,所以要重新进行“地图”和“当前关键帧”特征点之间的匹配(即重投影、滑窗搜索匹配)

        • Step6.1.3.1:利用Step6.1.3得到的“新匹配关系”,进行BA优化(只优化位姿,不优化地图点);

        • Step6.1.3.2:因为“局部关键帧”、“地图点”和“匹配关系”已经发生了改变,所以要更新“当前关键帧地图点”被观测的次数,即记录当前帧的地图点被多少帧观测到了(等价于当前帧的地图点跟踪成功的数目),后面要用;

        • Step6.1.3.3:用“当前帧的地图点跟踪成功的数目”来衡量是否局部地图跟踪成功;

    • Step6.2:如果是纯定位模式

      • 流程与正常SLAM模式一样,只不过纯定位模式下各个指标更加苛刻;
  • Step7:如果跟踪成功,则检查是否要插入关键帧;

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:51:12  更:2022-07-20 18:53:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:45:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码