文章目录

  • 1. 本章概述
  • 2. processMeasurements在哪里调用的
  • 3. 信号数据结构
    • 3.1 IMU数据结构
    • 3.2 图像数据结构
    • 3.3 组合图像+IMU信息的数据结构
    • 3.4 特征点管理器的数据结构
  • 4. processMeasurements()
    • 4.1 getIMUInterval()
    • 4.1 processIMU()
    • 5. processImage()
      • 5.1 初始化完成前
      • 5.2初始化完成后

1. 本章概述

上一章写完了如何将IMU和相机信息输入到VINS中,解析了inputIMU 和 inputImage函数。本章接着描述对IMU和相机信息进行的后续处理(初始化、非线性优化、边缘化、滑动窗口内数据更新等),这部分内容是在processMeasurements()中完成的。考虑到processMeasurements()涉及的内容过多,因此本章暂时只描述该功能函数概览。

2. processMeasurements在哪里调用的

在estimator.setParameter()中默认开启多线程,即MULTIPLE_THREAD=1。此时processMeasurements函数会一直在运转,处理IMU和相机信号

3. 信号数据结构

在解读代码过程中,对数据结构的正确理解是非常有必要的,下面分别是图像和IMU数据结构。

3.1 IMU数据结构

3.2 图像数据结构

  • featureFrame包含某一帧的所有个特征点信息
  • Estimator.feature包含时间戳t + featureFrame
  • Estimator.featureBuf是图像信息的缓存区,存储了多个帧的时间戳t + featureFrame
    这里解释一下,VINS先接收了图像信号,先放入featureBuf中暂时存储,会不断从featureBuf中提取图像信号进行处理。

3.3 组合图像+IMU信息的数据结构

在分别获取了图像信息和IMU信息后,VINS需要把这两个信息融合在一起,这里用到imageframe
imageframe包含了当前帧所有特征点信息points(即featureFrame),时间戳,当前帧和上一帧之间的IMU预积分信息等。
打包时间戳t + imageframe,把所有帧的信息存入all_image_frame中。
注意:这里构建all_image_frame只在初始化中使用,后续的非线性优化中不使用all_image_frame

3.4 特征点管理器的数据结构

f_manager是特征点管理器,管理当前窗口内所有帧观测到的所有特征点。
f_manager.feature是管理单个特征点的信息。
f_manager.feature.feature_per_frame是管理单个特征点在一帧图像上的信息。
非线性优化中构建的重投影误差就是利用特征点管理器f_manager中的信息进行构建的。因此对f_manager的正确理解非常重要。

4. processMeasurements()

processMeasurements()的主要工作流分为三步骤:

  1. getIMUInterval() 函数,把前一帧图像和当前帧图像之间的IMU信号提取出来,存入accVector, gyrVector中。
  2. processIMU()函数,利用前一帧图像和当前帧图像之间的IMU信号,更新当前帧的位姿Rs[i]、Ps[i]、Vs[i],作为后端非线性优化的初始值,同时计算得到的IMU预积分也作为后端非线性优化的一个输入。
  3. processImage()函数,利用当前帧图像信息,进行后续的关键帧判断、初始化、非线性优化、边缘化、滑动窗口移动等操作。

4.1 getIMUInterval()

getIMUInterval() 函数,把前一帧图像和当前帧图像之间的IMU信号提取出来,存入 accVectorgyrVector 中。

4.1 processIMU()

processIMU()函数,有两个功能:

  • 利用前一帧图像和当前帧图像之间的IMU信号,更新当前帧的位姿Rs[i]Ps[i]Vs[i],作为后端非线性优化的初始值
  • 计算得到的IMU预积分pre_integrations[frame_count],作为后端非线性优化的一个输入。

5. processImage()

processImage()的主要工作流分为三步骤:

  1. addFeatureCheckParallax() 函数通过视差判断该帧是否是关键帧,并决定后续边缘化次新帧MARGIN_SECOND_NEW ,还是边缘化最老帧MARGIN_OLD
  2. 用当前帧的特征点信息和IMU预积分信息构建imageframeall_image_frame
  3. 分为初始化前和初始化后的进行后端的各项操作(非线性优化、边缘化等)

5.1 初始化完成前

VINS系统启动后,首先要完成初始化,初始化的流程分为:

  1. 视觉惯性联合初始化initialStructure()
  2. 视觉惯性联合初始化成功后,进行非线性优化optimization()、滑动窗口内数据更新slideWindow()

5.2初始化完成后

VINS系统完成初始化后:

  1. 按照当前位姿,对之前求出的深度为负值的特征点重新求深度f_manager.triangulate()
  2. 进行非线性优化optimization()
  3. 删除重投影误差过大的特征点f_manager.removeOutlier()
  4. 出现较大的异常failureDetection(),清除当前的状态
  5. 滑动窗口内数据更新slideWindow()
  6. 清除深度估计错误的特征点f_manager.removeFailures()

VINS fusion软件架构分析(4)---后端处理processMeasurements()功能函数概览相关推荐

  1. VINS Fusion GPS融合部分

    概述 VINS Fusion在VINS Mono的基础上,添加了GPS等可以获取全局观测信息的传感器,使得VINS可以利用全局信息消除累计误差,进而减小闭环依赖. 局部传感器(如相机,IMU,激光雷达 ...

  2. Linux USB On-The-Go(OTG) on OMAP H2 软件架构分析(一)

    原帖地址:http://blog.csdn.net/zkami/article/details/2508136 Linux USB "On-The-Go"(OTG) on OMAP ...

  3. autoquad飞控软件架构分析

    AUTOQUAD飞控软件架构分析 作者:敬文义 时间:2019/11/26 开源代码路径: Autoquad : https://github.com/bn999/autoquad 1.使用操作系统: ...

  4. wpa_supplicant软件架构分析

    wpa_supplicant软件架构分析 1. 启动命令 wpa supplicant 在启动时,启动命令可以带有很多参数,目前我们的启动命令如下: wpa_supplicant /system/bi ...

  5. VINS - Fusion GPS/VIO 融合 二、数据融合

    https://zhuanlan.zhihu.com/p/75492883 一.简介 源代码:VINS - Fusion 数据集:KITTI 数据 程序入口:globalOptNode.cpp 二.程 ...

  6. 小觅相机D系列跑vins fusion

    有幸使用一款D系列小觅相机.今天测试了下它跑vins fusion的表现.其中有一个注意点,官方文档没有说明.这里记录一下. D系列小觅相机添加了IR散斑投射器,用来恢复没有纹理细节时的深度.这与老版 ...

  7. SLAM之小觅相机跑开源方案(ORB_SLAM2,VINS MONO,VINS FUSION,RTAB-Map)

    传感器: 小觅相机标准版 开源SLAM方案: ORB_SLAM2,VINS MONO,VINS FUSION,RTAB-Map 测试地点: 室内大厅(光线不均)/ 露天阳台 实现形式: 小觅相机 / ...

  8. 【FFmpeg】ffmpeg工具源码分析(一):main函数

    ffmpeg工具经常用来转换.生成媒体文件,下面是它的源码分析(一):main函数 ffmpeg版本:4.2.1 int main(int argc, char **argv) {int i, ret ...

  9. R语言效用分析 ( 效能分析、Power analysis)确定样本量、假设检验与两类错误、pwr包进行效用分析 ( 效能分析、Power analysis)的常用函数列表

    R语言效用分析 ( 效能分析.Power analysis)确定样本量.假设检验与两类错误.pwr包进行效用分析 ( 效能分析.Power analysis)的常用函数列表 目录

最新文章

  1. Nature Microbiology:火眼金睛,肠道菌群绝对定量分析擒“真凶”!
  2. 【干货】.NET WebApi HttpMessageHandler管道
  3. 提取指定的PDF表格保存到Excel
  4. 给Jquery easyui 的datagrid 每行增加操作链接(转载)
  5. 小功告成:ReadIE beta
  6. 63. Unique Paths II
  7. 04.内置analyzer和analyze-API使用
  8. 04.并发和互斥.md
  9. 计算机考研:计算机网络五大考点解析
  10. 数学--数论--中国剩余定理+扩展中国剩余定理(孙子定理)
  11. uva 1623——Enter The Dragon
  12. Go语言结构应用实例
  13. WRF系列教程1:WRF如何得到更好的模拟结果?
  14. Teamviewer Install
  15. web.xml.jsf_JSF 2.0 Ajax世界中的GMaps4JSF
  16. HTML表格制作的例子
  17. StreamNative 联合创始人翟佳出席QCon北京峰会并发表演讲
  18. 计算机用户名和密码在哪个文件夹,登陆邮箱、论坛等的帐号和密码存放在电脑中的哪个文件夹中?...
  19. AB32实例应用(4.非常规经验及技巧)
  20. 如何下载Android Market上未对中国开放的应用

热门文章

  1. 【面试】如何设计一个高并发系统
  2. 假期抱病上班 货车司机买彩票中2.98亿美元大奖
  3. apple键盘的home键_如何从Apple HomeKit Home中删除HomeKit设备
  4. 妥妥的世界第一:为什么MT4软件的地位无法撼动?
  5. MT2625 NB IoT_RF资料分享
  6. flask 8用户认证_Salted Password Hashing
  7. 记一个typeorm问题 Main alise is not set
  8. SSR在天猫优品大促会场的探索实践
  9. 大白话讲解决策树【案例】:如何区分西方人和东方人
  10. 前后端交互学习笔记(二):Node.js及npm学习