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:如果跟踪成功,则检查是否要插入关键帧;

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值