VINS-Fusion代码按执行顺序阅读(一)

参考博文链接:vins-fusion代码解读

程序入口

VINS-Fusion/vins-estimator/rosNodeTest.cpp

程序顺序解读
首先,定义了几个全局变量:

1.Estimator estimator;
自动执行该类的构造函数,其中两条重要的语句如下:
initThreadFlag = false;
clearState(); 本质上不仅清除了状态,而且为诸多变量赋初值。
(这里std::mutex似乎和C++11 的并发和多线程编程有关,留待后续了解)
2.queue<sensor_msgs::ImuConstPtr> imu_buf; queue<sensor_msgs::PointCloudConstPtr> feature_buf; queue<sensor_msgs::ImageConstPtr> img0_buf; queue<sensor_msgs::ImageConstPtr> img1_buf; std::mutex m_buf;

然后,进入了main()函数:
readParameters(config_file);
estimator.setParameter(); 读取参数并配置参数

  1. 这部分的逻辑是这样的,配置参数一开始存放在.yaml文件中,通过parameters.h文件中的readParameters()函数(该文件中只有这一个函数),将该文件中声明的所有变量赋值(这些变量定义在parameters.cpp文件中!且变量名全部大写,然后使用extern修饰并放在parameters.h中,可以想象当该.h文件被其他文件#include则可以直接使用这些值了),而estimator.setParameter()是从parameters.h文件中获得相应的配置参数。
  2. 除此之外,processThread = std::thread(&Estimator::processMeasurements, this);开启了一个新线程。

最后,订阅了几个topic,分别是IMU_TOPIC,两个相机图像IMAGE0_TOPIC, IMAGE1_TOPIC,和feature_tracker所提供的跟踪光流点?
同时开启了一个新线程sync_process。??线程的作用:如果图像buffer里面有数据的话,读入数据并且添加到estimator中。为什么不在相机图像的回调函数就input,我的理解在于对于双目的话,能够检测同步问题,能够将同样时间戳的两帧图片同时放入estimator中。所以对于Imu以及feature直接在回调函数中进行添加。
这里有几句

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值