VINS fusion软件架构分析(3)--- 输入IMU和相机信息 inputIMU + inputImage

1. 输入IMU和相机信息

从上一节,我们知道主函数rosNodeTest.cpp从IMU和相机结点获取了IMU和相机的信息,并传入到位姿估计器 estimator中,使用的函数分别是

  • inputIMU
  • inputImage

1.1 inputIMU

在这里插入图片描述在这里插入图片描述

1.1.1 fastPredictIMU

在这里插入图片描述在这里插入图片描述在这里插入图片描述 在这里插入图片描述

1.1.1.1 Utility::deltaQ

在更新旋转Q时,使用了函数Utility::deltaQ

  • 在使用Eigen库的时候,常常会使用Curiously recurring template pattern,这个后续有待继续研究!!!!
  • 函数deltaQ使用了一个函数模板,用四元数表示旋转,逻辑是按照公式3来的。MatrixBase在Eigen中是一个基类,使用模板不指定变量的具体类型的时侯可以使用该类。
  • 函数deltaQ是一个静态成员函数,本质上就是一个全局函数,写在Utiliy这个类里是为了易于理解。
  • Scalar_t: 矩阵中存储的类型 。
    利用typename Derived::Scalar s 来声明变量s。
    Eigen::Quaternion<Scalar_t>则表示四元数内的数据类型是Scalar_ttypename Derived::Scalar
    参考:http://www.360doc.com/content/17/1001/12/1489589_691553336.shtml

在这里插入图片描述

1.1.2 pubLatestOdometry

在这里插入图片描述在这里插入图片描述

知识点 pair
  • std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型
  • 容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素。
  • 一般std::make_pair都使用在需要pair做参数的位置,可以直接调用make_pair生成pair对象
  • std::pair<int, float>(1, 1.1);
    std::make_pair(1, 1.1);

1.2 inputImage

在这里插入图片描述 在这里插入图片描述

1.2.1 FeatureTracker::trackImage

####  1.2.1.3   把提取到的当前帧的特帧点信息构建featureFrame

在这里插入图片描述

1.2.1.1 cv::goodFeaturesToTrack提取特征点

在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.2.1.2 cv::calcOpticalFlowPyrLK 光流跟踪到特征点

在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.2.1.3 把提取到的当前帧的特帧点信息构建featureFrame

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

1.2.1.4 在当前帧图像上标记特征点,并发布出去

在这里插入图片描述

1) drawTrack()

在这里插入图片描述

2) pubTrackImage()

在这里插入图片描述

思考

对以vins代码的解读,我现在的体会是:要从物理层面出发,从物理背景出发,这样才能更好地理解代码的整体架构。以trackImage()的代码为例子,如果从代码的第一行一步步解析到最后一行,这样很难体他的逻辑,只有站在较高的角度才能更好地解读他,把他先分成几个子功能模块,再分析这几个子功能模块的作用。只有这样的分析,才能更好地理解代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值