运行官方Demo
以TUM数据集为例,运行Demo的命令:
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE
rgbd_tum.cc的源码:
运行程序rgbd_tum时传入了一个重要的配置文件TUM1.yaml,其中保存了相机参数和ORB特征提取参数:


开两个线程同时计算两个矩阵,在多核处理器上会加快运算速度 2. 因为系统的随机性,各步骤的运行顺序是不确定的 . Tracking线程不产生关键帧时,LocalMapping和LoopClosing线程基本上处于空转的状态 . 而Tracking线程产生关键帧的频率和时机不是固定的,因此需要3个线程同时运行,LocalMapping和LoopClosing线程不断循环查询Tracking线程是否产生关键帧,产生了的话就处理.


一把锁在某个时刻只有一个线程能够拿到,如果程序执行到某个需要锁的位置,但是锁被别的线程拿着不释放的话,当前线程就会暂停下来;直到其它线程释放了这个锁,当前线程才能拿走锁并继续向下执行. 什么时候加锁和释放锁? unique_lock
SLAM主类System System类是ORB-SLAM2系统的主类,先分析其主要的成员函数和成员变量:
构造函数 System(const string &strVocFile, string &strSettingsFile, const eSensor sensor, const bool bUseViewer=true): 构造函数
LocalMapping和LoopClosing线程在System类中有对应的std::thread线程成员变量,为什么Tracking线程没有对应的std::thread成员变量? 因为Tracking线程就是主线程,而LocalMapping和LoopClosing线程是其子线程,主线程通过持有两个子线程的指针(mptLocalMapping和mptLoopClosing)控制子线程. (ps: 虽然在编程实现上三大主要线程构成父子关系,但逻辑上我们认为这三者是并发的,不存在谁控制谁的问题).
跟踪函数
System对象所在的主线程就是跟踪线程,针对不同的传感器类型有3个用于跟踪的函数,其内部实现就是调用成员变量mpTracker的GrabImageMonocular(GrabImageStereo或GrabImageRGBD)方法.
传感器类型用于跟踪的成员函数
审核编辑:刘清
-
传感器
+关注
关注
2551文章
51097浏览量
753542 -
SLAM
+关注
关注
23文章
424浏览量
31831
原文标题:ORB-SLAM2代码运行流程
文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
代码里的命名规则:错误的和正确的对比
请问用树莓派运行ORB-SLAM2算法可行吗?
javascript变量命名规则与规范

编程代码的书写规则
简析获取单片机代码运行时间的方法资料下载

ORB SLAM中涉及的一些基础概念
ORB-SLAM3与ORB-SLAM2相比有哪些优势呢?
OV2SLAM(高速视觉slam)简析
工程实践中VINS与ORB-SLAM的优劣分析

基于多摄像头的高鲁棒性视觉SLAM系统设计

评论