ORB_SLAM2 学习笔记(1)——总框架

ORB_SLAM2 学习笔记(1)——总框架

说明:笔记主要参考视觉slam十四讲以及该博主的讲解一步步带你看懂orbslam2源码
感谢各位前辈的无私奉献。
orb_slam2总共三个线程
(1)Tracking:负责提取orb特征;估计相机位姿;判断关键帧的插入。
(2)Local Mapping: 负责处理新的关键帧;进行局部优化更新位姿;创建新的地图点更新局部地图;剔除多余关键帧。
(3)Loop Closing: 负责回环检测,工具:DBOW视觉词袋;全局地图优化,减少累积误差。

orb_slam2系统的特点:
(1)ORB特征点用于系统各个环节;
(2)使用共视图(covisibility graph):观察到地图相同点的帧越多得分越高,使得在大环境下仍能保持是实时性。
(3)后端Loop Closing 线程只对位姿(pose)进行优化,提高了处理效率。
(4)拥有良好视角和光照不变性的实时重定位。
(5)计算方法上,平面与非平面模型自动切换,即估计位姿时可通过本质矩阵(E)/ 基础矩阵(F)与 单应矩阵(H)之间的自动切换。
(6)能够及时的剔除多余的地图点(Map Point)和关键帧(Keyframe),对于优化时的计算量大大减少,也因此提高了系统长时间运行的鲁棒性与实时性。
(7)提供了单目,双目,RGB-D,Stereo多个版本,其中单目最为复杂。

以下以单目为例:

orb_slam2变量命名原则:
m: 代表类成员变量(member)
t: 线程类型变量(thread)
l: 代表list类型变量
n: 代表int类型变量
p: 代表指针类型变量(pointer)
b: 代表bool类型变量
v: 代表vector类型变量
s: 代表set 类型变量

三线程在程序中的位置:
Trackin位于主线程之中(main函数);Local Mapping 和 Loop Closing 位于主线程的系统初始化中。
(1)开始创建一个系统(文件mono_euroc.cc中):

   // Create SLAM system. It initializes all system threads and gets ready to process frames.两参数分别为图片和时间
    ORB_SLAM2::System SLAM(argv[1],argv[2],ORB_SLAM2::System::MONOCULAR,true);

在这里插入图片描述

下面函数用于对数据集中图片和时间的提取(文件momo_tum.cc中):

    //vstrImageFilenames存储图片,vTimestamps存储对应的时间轴
    LoadImages(strFile, vstrImageFilenames, vTimestamps)

下面函数负责实时跟踪输入图片,极其重要的函数(文件momo_tum.cc中):

        // Pass the image to the SLAM system整个系统的核心所在,负责实时跟踪输入图片,
        SLAM.TrackMonocular(im,tframe);

下面函数用于关闭线程,系统运行结束(文件momo_tum中):

SLAM.Shutdown();

最后下面函数用于保存slam的相机跟踪轨迹(保留关键帧,不是全部帧轨迹,同位于momo_tum.cc中)

SLAM.SaveKeyFrameTrajectoryTUM("KeyFrameTrajectory.txt");
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值