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

2023-05-16

文章目录

  • 1. 输入IMU和相机信息
    • 1.1 inputIMU
    • 1.1.1 fastPredictIMU
      • 1.1.1.1 Utility::deltaQ
    • 1.1.2 pubLatestOdometry
        • 知识点 pair
    • 1.2 inputImage
      • 1.2.1 FeatureTracker::trackImage
        • 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()
    • 思考

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()的代码为例子,如果从代码的第一行一步步解析到最后一行,这样很难体他的逻辑,只有站在较高的角度才能更好地解读他,把他先分成几个子功能模块,再分析这几个子功能模块的作用。只有这样的分析,才能更好地理解代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • ubuntu20.04跑PL-VINS

    PL VINS源码 xff1a https github com cnqiangfu PL VINS 编译时报错 catkin make Ceres报错 报错信息 CMake Error at usr local lib cmake Cer
  • VINS-Fusion跑kitti stereo及stereo+GPS数据

    Stereo source vfusion devel setup bash roslaunch vins vins rviz launch source vfusion devel setup bash rosrun loop fusio
  • Ubuntu20.04运行Vins-fusion

    因已安装ROS noetic xff0c eigen xff0c opencv及ceres等库 xff0c 这部分环境配置就不细讲 xff0c 直接下载VINS FUSION的代码库 下载编译 cd span class token ope
  • IMU误差模型简介及VINS使用说明

    1 IMU误差来源 2 IMU噪声模型 Noise and Bias kalibr中的imu noise model 参考 xff1a https github com ethz asl kalibr wiki IMU Noise Mode
  • NVIDIA Jetson Xavier NX部署VINS-fusion-GPU

    NVIDIA Jetson Xavier NX部署VINS fusion GPU 一 环境配置 xff08 Ubuntu 18 04 xff09 1 Cuda 10 2的安装 span class token function sudo s
  • VINS-FUSION-GPU在jetson nx上的实现

    需要安装经过修改的Ubuntu18系统 https span class token operator span span class token comment developer nvidia com zh cn embedded do
  • 最小的IMU模组——DETA10系列

    性能全面升级 飞迪航空 xff08 FDISYSTEMS xff09 DETA10系列产品目前出货已达十万量级 xff0c 广泛应用于机器人 可穿戴设备 人工智能教育套件 自动驾驶小车 智慧农业 扫地机器人 稳定平台 无人系统等相关领域 D
  • 惯导(IMU)的使用

    提示 xff1a 和上一篇关于利用imu计算位移的文章相比 xff0c 这篇我对imu的理解应该是更加深刻了 目录 前言 一 imu调试 二 利用IMU计算旋转 1 引入库 2 读入数据 总结 前言 这次使用的imu和上一篇文章中所提到的i
  • 从零实现vins-mono+fast-planner+M100无人机实验在现实场景中的应用

    版权声明 本文为博主原创文章 未经博主允许不能随意转载 本文链接 https blog csdn net AnChenliang 1002 article details 109535355 最近由于科研的需要 要将VINS mono与fa
  • vins中的坐标系变换及g2r函数

    slam中经常会需要表示一个刚体的位姿 例如imu的位姿 xff0c 相机的位姿 首先我们需要在一个刚体上架上一个坐标系 这个坐标系为本体坐标系 怎么架一个坐标系 xff1f imu本身就有规定其本身的x y z轴的方向 相机一般认为 xf
  • VINS-Mono代码阅读笔记(十三):posegraph中四自由度位姿优化

    本篇笔记紧接着VINS Mono代码阅读笔记 xff08 十二 xff09 xff1a 将关键帧加入位姿图当中 xff0c 来学习pose graph当中的紧耦合优化部分 在重定位完成之后 xff0c 进行位姿图优化是为了将已经产生的所有位
  • Kalibr进行相机-IMU联合标定踩坑记录RuntimeError: Optimization failed!

    1 具体标定步骤 xff0c 跟网上别的一模一样 xff0c 此处就不列举 2 记录踩坑过程 xff1a RuntimeError Optimization failed 当执行到开始联合标定时 xff0c 也就是如下指令 xff1a ka
  • Ubuntu 18.04 ———(Intel RealSense D435i)运行VINS-Mono

    Intel RealSense D435i 一 准备工作二 修改参数rs camera launchrealsense color config yaml 参考文献 一 准备工作 1 Intel Realsense D435i Ubuntu
  • IMU+摄像头实现无标记运动捕捉

    惯性传感和计算机视觉的进步为在临床和自然环境中获得精准数据带来了新可能 然而在临床应用时需要仔细地将传感器与身体对齐 这减慢了数据收集过程 随着无标记运动捕捉的发展 研究者们提出了一个新的深度学习模型 利用来自视觉 惯性传感器及其噪声数据来
  • IMU背包对动物行为影响测试

    动物行为是一种可观察和可测量的指标 轻量化和低成本的传感器技术的先进发展为研究人员提供了以最小干预来跨越空间和时间跟踪动物的机会 特别是对于家禽业来说 已经从传统的笼养系统转变为无笼养系统 许多技术可用于检测大群鸡的行为 活动和位置 为了有
  • PID算法(没办法完全理解的东西)

    快速 P 准确 I 稳定 D P Proportion 比例 就是输入偏差乘以一个常数 I Integral 积分 就是对输入偏差进行积分运算 D Derivative 微分 对输入偏差进行微分运算 输入偏差 读出的被控制对象的值 设定值
  • An Introduction for IMU 2 - IMU数据融合与姿态解算

    在上一篇博客中 我们已经介绍了IMU的内部工作原理 以及如何通过Arduino读取MPU6050的数据 虽然可以从DMP直接读取姿态角 但其数据返回的频率相对较低 同时由于DMP库不是开源的 其内部的工作原理 输出姿态角的准确性都不清楚 而
  • 足部IMU在复杂场景中行走定位

    随着微机电系统 MEMS 技术的快速发展 基于MEMS的惯性导航系统 INS 在任意环境的基站定位方面发挥着至关重要的作用 惯性导航具有自主性强 定位频率高 功耗低 实时性强等特点 因此更适合单兵作战 反恐行动 应急救援 消防救援等环境未知
  • CLR 何时尝试加载引用的程序集?

    我想编写一个小型安装程序应用程序来安装网站并创建 IIS 虚拟目录 该应用程序应在 Windows XP Server 2003 IIS 6 以及 Vista 2008 IIS 7 上运行 问题是 对于 IIS 6 我们通过调用 WMI M
  • Java 流惰性 vs 融合 vs 短路

    我试图对 Java 流 API 中惰性求值的应用形成一个简洁而连贯的理解 目前我的理解是这样的 元素仅在需要时才被消耗 即流是惰性的 并且中间操作是惰性的 例如过滤器 仅在需要时进行过滤 中间操作可以融合在一起 如果它们是无状态的 短路操作

随机推荐