vins-fusion代码解读[五] imu在vins里的理解

2023-05-16

SLAM新手,欢迎讨论。

IMU作用

vins中,IMU只读取IMU六轴的信息,3轴线加速度(加速度计)和3轴角速度(陀螺仪)。
通过对陀螺仪的一次积分,直觉上可以获取姿态的变化情况,对加速度的一次积分和二次积分结合陀螺仪的信息,可以获取位置的变换情况。

背景知识:
IMU: 通常6轴陀螺仪,包括3轴线加速度和3轴角速度。9轴陀螺仪增加3轴地磁信息。
MEMS 陀螺仪没有姿态的输出,所有的MEMS陀螺都是非旋转装置,通过获取一个振动机械元件上的哥氏加速度效应,实现角速率检测。即一个验证质量在一个平面内做正弦振动,如果此平面以角速率Ω旋转,那么哥氏力就会使该质量以垂直于该平面的方向做正弦振动,其幅值正比于Ω。对哥氏力所引起的运动进行测量,就可获得Ω的信号,这就是微机械陀螺的基本工作原理。
市面上IMU可以输出姿态四元数或者欧拉角,是通过3轴线加速度和3轴角加速度或者增加3轴地磁信息融合求解出来。
加速度a能够提供重力g在俯仰角和翻滚角平面的投影,但是由于IMU本身在不断运动变化,a不等于g,因此不能很好的反应翻滚角和俯仰角,但是长期来看,这种方法不会产生大的漂移。
角速度w能够预测三个角度的变化量,在短期来看,积分能够预测两个时间段内角度的变化,长期运用会造成角度的漂移。
因此通常的做法是融合两者计算结果(卡尔曼滤波),能够得到精确的俯仰角和翻滚角,由于g在偏航角的平面上没有投影,因此偏航角是不准确的(因为相当于只能依靠角速度的积分获取),会有很大的漂移。融合地磁信息之后,可以提高偏航角的准确度,但是同样存在偏移。而且地磁的信息很容易受到环境的干扰,大型设备用电,电机转动都可能产生磁场,干扰地磁信息。

IMU的模型:

以t时刻,IMU作为参考系,我们能够得到以下的IMU模型。

在这里插入图片描述
左边是我们得到的测量值,包括了3轴的加速度,以及3轴的角速度信息。右边第一项是陀螺仪和加速度计的真值,第二项是偏移偏移,最后一项是测量噪声项。注意一点的是,由于IMU测量的时候,侧的是除了重力加速度外,所有外力对IMU参考系力的和对系统产生的加速度,会把反向重力加速度测量在内。意思是,当IMU自由落体的时候,加速度的读数是0。IMU平放在桌子上的时候,读数是g。

这里假设噪声na,nb是服从高斯正态分布,而ba,bw偏置服从随机游走模型(倒数服从高斯正态分布)。

因此,我们通过这个IMU模型,可以获取得到任意时刻的位置,速度,以及姿态。即,我们在已知初始的P1,Q1,V1,ba1,bg1的情况下,并且知道每个时刻ba,bg的时候,通过下面的这个式子的离散化表示,我们就能够通过积分得到后面这每一个时刻的P,Q,V。

在这里插入图片描述
即可以通过这个式子:
在这里插入图片描述

正常这个公式是可以比较直观上理解的。但是有一个问题,因为这个公式中,有一个R旋转矩阵是从imu坐标系旋转到世界坐标系的绝对位姿。由于我们后端优化的过程中,会不断的修正p,q,v的值,使得一个代价函数最小,现在我们一旦修改了一个p,因为积分项里面有一项与IMU的绝对位姿有关,因此我们又要进行重复的一个积分运算。

即:

在这里插入图片描述
第二帧位姿发生了改变,导致最终从第二帧开始,所有的积分项都要重新进行积分,非常耗时。
为了避免这一个重复积分运算的过程,vins提出了预积分的概念,通过了坐标系的转换,将绝对的坐标姿态转化为了相对的坐标转换,把要积分的项转化了一个形式。即把R的绝对位姿转化成相对位姿,相对于每一帧的绝对位姿,即:
在这里插入图片描述

在这里插入图片描述

现在三个临时量只和当前的加速度计偏移和陀螺仪的偏移有关。而于他们在世界坐标系的绝对位姿没有任何关系。任何帧的P,V,Q的改变不影响积分过程,因此就不用一直重复积分。

这三个变量只和偏移ba,bw有关。更新偏移,由于偏移变化是随时间缓慢变化的,因此可以用泰勒一阶展开。
在这里插入图片描述
而通过离散积分的方式,可以获取这三个积分项的离散迭代表达:
在这里插入图片描述
到这里,我们就可以带入IMU 6个轴的观测值,进行迭代求解,最终解算出这三个积分项。

到这里,我们还不知道这三个积分项的含义是什么,直观上理解,可以认为,bk帧做自由落体运动,以这个帧作为参考系,imu在bk到bk+1这段时间的位移,速度,姿态的变化。从数学上去描述就是:
在这里插入图片描述

因此imu的残差vins就定义为:
在这里插入图片描述

残差是一个向量,最终的残差是一个标量,因此我们就要把向量转化为一个标量。即要乘以他的协方差矩阵。协方差矩阵可以理解为,因为向量中每个元素变化的情况值不一样,有些元素变化得比较大(方差大),有些元素变化比较小(方差小),为了使得把这种变化统一起来,因此需要有一个标准来量化它,就认为是这个协方差矩阵。为了获取协方差矩阵,需要建立一个线性高斯误差状态传播方程,由线性高斯系统的协方差,就可以推导出方程协方差矩阵了,也就是测量状态的协方差矩阵了。
在这里插入图片描述
噪声对角线协方差矩阵就是我们需要标定imu的四个参数。两个测量噪声的方差,两个偏置倒数的方差。

总结预积分:

为了使得非线性优化中,不用每次改变位姿后,积分需要重新计算的问题。
现在改变位姿(速度,位移,旋转四元数关于世界坐标系的),预积分内的项保持不变。
改变ba,bw后,预积分的项可以通过泰勒一阶展开来进行更新。

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

vins-fusion代码解读[五] imu在vins里的理解 的相关文章

  • 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(亲测有效,一应俱全)

    最近在做科研训练的时候配置了HKUST Aerial Robotics实验室的VINS Fusion代码项目 xff0c 经历了一些编译报错的问题 xff0c 在网上查找的时候博客内容良莠不齐 xff0c 且实质针对性意见不多 xff0c
  • 优化IMU数据避免突变的建议

    影响IMU数据变化的主要因素是应力 温度和电气干扰 xff1b xff11 温度的的骤升 xff0c 比如芯片的位置附件有相关器件几秒钟工作一次 xff0c 此时温度骤升 xff0c 可能会引起数据也发生突变 xff0c 周围有变化的热源和
  • 利用 imu_utils 标定 imu

    目录 前言 一 安装 imu utils 二 编译出现的错误 三 操作步骤 四 结果 前言 记录利用 imu utils 标定 imu xff0c 最近在使用imu做导航 xff0c 要对imu进行标定 xff0c 使用标定得到的加速度的噪
  • 在TUMVI数据集上测试VINS-Fusion算法

    VINS Fusion算法是一个非常优秀的视觉惯性里程计 但原版VINS Fusion并没有提供与TUM数据集相应的配置文件 因此需要自己进行写yaml文件 修改配置文件 tum mono yaml span class token dir
  • vins中的坐标系变换及g2r函数

    slam中经常会需要表示一个刚体的位姿 例如imu的位姿 xff0c 相机的位姿 首先我们需要在一个刚体上架上一个坐标系 这个坐标系为本体坐标系 怎么架一个坐标系 xff1f imu本身就有规定其本身的x y z轴的方向 相机一般认为 xf
  • vins-fusion代码解读[五] imu在vins里的理解

    SLAM新手 xff0c 欢迎讨论 IMU作用 vins中 xff0c IMU只读取IMU六轴的信息 xff0c 3轴线加速度 xff08 加速度计 xff09 和3轴角速度 xff08 陀螺仪 xff09 通过对陀螺仪的一次积分 xff0
  • VINS-Mono代码阅读笔记(十三):posegraph中四自由度位姿优化

    本篇笔记紧接着VINS Mono代码阅读笔记 xff08 十二 xff09 xff1a 将关键帧加入位姿图当中 xff0c 来学习pose graph当中的紧耦合优化部分 在重定位完成之后 xff0c 进行位姿图优化是为了将已经产生的所有位
  • VINS-RGBD运行指令

    创建工程VINS RGBD catkin ws 将代码放入src文件夹当中 git clone https github com STAR Center VINS RGBD 进行编译 cd VINS RGBD catkin ws catki
  • 【VINS论文翻译】VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator

    回到目录 写在前面 港科大的VINS Mono作为目前state of the art的开源VIO项目 xff0c 是研究视觉与IMU紧耦合的必读算法 xff0c 网上的论文解读与代码实现也非常丰富 xff08 感谢 xff01 xff09
  • 运行相机与vins_Fusion

    安装相机的SDK git clone https github com slightech MYNT EYE D SDK git cd MYNT EYE D SDK make init make all 这里由于没有添加依赖 xff0c O
  • VINS-Mono学习(五)——闭环优化4DoF

    这里再重写一边VINS开启的新线程 xff1a 前端图像跟踪后端非线性优化闭环检测闭环优化 闭环优化是跟在闭环检测之后步骤 首先回顾闭环检测的过程 xff1a 1 pose graph node cpp开启process闭环检测线程 xff
  • 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
  • 武汉大学研究生组合导航课程合集【2022年春】

    第四公式中kk是权重 zk hx 为innovation新息 即真实的观测 估计的观测 前者包含观测误差 gps的电离层 多径 后者包含估计误差 kk近似1 则无限相信新观测 kk 0 相信估计
  • 强化学习代码实战入门

    这是一个易理解的 demo 300行左右 可以作为RL的入门代码 辅助基础公式的理解 这个是我自己的学习笔记 三连留下邮箱 可以直接发送完整的代码标注文件 如有错误 麻烦指出 我已经蛮久没写博了 上一篇RL博客也快一年半了 很久没做这一块了
  • IMU背包对动物行为影响测试

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

    如何描述三维空间中刚体的旋转 是个有趣的问题 具体地说 就是刚体上的任意一个点P x y z 围绕过原点的轴 i j k 旋转 求旋转后的点P x y z 旋转矩阵 旋转矩阵乘以点P的齐次坐标 得到旋转后的点P 因此旋转矩阵可以描述旋转 x
  • IMU姿态计算

    总述 IMU即惯性测量单元 主要用于对机体的加速度与角速度的测算 使用场景很多 例如 平衡车 惯性导航等等 姿态 姿态角 Euler angles 是用于描述物体在三维空间中的旋转姿态的一种表示方法 它由三个角度组成 通常表示物体绕三个轴
  • CLR 何时尝试加载引用的程序集?

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

随机推荐

  • Linux 网络编程2 TCP并发服务器

    Linux 网络编程学习 TCP IP网络编程2 TCP多线程服务器TCP多进程服务器 在前面TCP网络编程代码的基础上进行改造 xff0c 实现并发服务器功能 TCP多线程服务器 实现功能 xff1a server端可以绑定在任意IP端s
  • HTTP Digest authentication

    什么是摘要认证 摘要认证 xff08 Digest authentication xff09 是一个简单的认证机制 xff0c 最初是为HTTP协议开发的 xff0c 因而也常叫做HTTP摘要 xff0c 在RFC2617中描述 其身份验证
  • 简单的netfilter hook函数注册以及内核链表的使用

    include lt linux netfilter h gt include lt linux init h gt include lt linux module h gt include lt linux netfilter ipv4
  • 详述GPS原理及RTK技术应用

    完整的PPT文档在这里 xff1a 详述GPS原理及RTK技术应用 1 GPS概述 1 1定义 全球定位系统GPS xff08 Global Position System xff09 xff0c 全称为NAVSTAR GPS xff08
  • PHP HTTP Digest校验

    PHP作为客户端进行HTTP Digest校验 span class token comment 请求方法 span span class token variable username span span class token oper
  • Http Digest认证协议

    其认证的基本框架为挑战认证的结构 xff0c 如下图所示 xff1a xfeff xfeff 1 客户端希望取到服务器上的某个资源 xff0c 向服务器发送Get请求 2 服务器收到客户端的请求后 xff0c 发现这个资源需要认证信息 xf
  • Postman 安装

    Postman 的下载安装 Postman是一个用于构建和使用API的API平台 xff08 接口的调试工具 xff09 选择对应的系统和版本进行下载 https github com hlmd Postman cn 这里我的电脑是wind
  • 【安卓自定义控件系列】自绘控件打造界面超炫功能超强的圆形进度条

    在前面我们讲过了安卓自定义控件三种方式中的组合控件 xff0c 现在我们来讲解一下通过自绘的方式来实现自定义控件 xff0c 本博客将以自定义圆形进度条为例向大家讲解自定义控件的知识 xff0c 首先来看一下效果图吧 xff0c 这个是本人
  • Linux网络编程3——多进/线程并发服务器

    视频链接 黑马程序员 Linux网络编程 哔哩哔哩 bilibili https www bilibili com video BV1iJ411S7UA p 61 37 目录 一 高并发服务器 1 1 图示 1 2 分类 二 多进程并发服务
  • http请求头和响应头

    文章目录 参考HTTP通用标头Cache ControlConnectionDatePragmaTrailerTransfer EncodingUpgradeViaWarning 请求头AcceptAccept RangesAccept E
  • C++如何使用libcurl发送post请求的三种content-type的封装

    作者 xff1a 虚坏叔叔 博客 xff1a https xuhss com 早餐店不会开到晚上 xff0c 想吃的人早就来了 xff01 x1f604 C 43 43 如何使用libcurl发送post请求的三种content type的
  • 开源四轴飞行器CC3D的稳定模式和PID算法简介

    本文主要介绍一下CC3D的两大飞行模式的原理 xff1a 1 Rate 2 Attitude 以及PID的基本原理 至于AxisLock模式及Manual xff0c 日后续说 笔者是CC3D开源飞控入门玩家 xff0c 遇到过不少磕磕碰碰
  • 了解git分支和版本管理

    0 Git分支和标签的命名规范 1 分支 dev test pre pro 即master 2 标签 Tag格式 xff1a 主版本号 次版本号 修订号 类型标签 xff0c 其中类型标签可为 xff1a alpha beta rc r T
  • ubuntu下解决高并发socket最大连接数限制,tcp默认1024个连接

    nux系统默认ulimit为1024个访问 用户最多可开启的程序数目 一般一个端口 xff08 即一个进程 xff09 的最高连接为2的16次方65536 通过这个命令 ulimit n 可以看到默认值为1024 查看全局文件句柄数限制 系
  • Linux下实现Post方式

    首先了解HTTP协议各字段的含义 xff0c 以下是部分较好的归纳 xff1a HTTP一个HTTP请求报文由请求行 xff08 request line xff09 请求头部 xff08 header xff09 空行和请求数据4个部分组
  • vins中的坐标系变换及g2r函数

    slam中经常会需要表示一个刚体的位姿 例如imu的位姿 xff0c 相机的位姿 首先我们需要在一个刚体上架上一个坐标系 这个坐标系为本体坐标系 怎么架一个坐标系 xff1f imu本身就有规定其本身的x y z轴的方向 相机一般认为 xf
  • yolo_v3安装试运行小记

    github源代码 xff1a https github com qqwweee keras yolo3 Cuda下载地址 xff1a https developer nvidia com cuda toolkit archive Cudn
  • pytorch安装使用

    pytorch官网 xff1a https pytorch org get started locally conda添加清华源 xff1a conda config add channels https mirrors tuna tsin
  • ORB_SLAM3初试

    源码地址 xff1a orb salm3 github 论文地址 orb slam3 paper ORB SLAM3提供了单目 xff0c 双目 xff0c rgbd 以及各自结合IMU的数据分析实现 demo运行效果展示 xff1a 在不
  • vins-fusion代码解读[五] imu在vins里的理解

    SLAM新手 xff0c 欢迎讨论 IMU作用 vins中 xff0c IMU只读取IMU六轴的信息 xff0c 3轴线加速度 xff08 加速度计 xff09 和3轴角速度 xff08 陀螺仪 xff09 通过对陀螺仪的一次积分 xff0