最近看了一篇论文,很是头大,大概看懂了个所以然。记录一下。
论文:Monocular Visual–Inertial State Estimation With Online Initialization and Camera–IMU Extrinsic Calibration
作者:Zhenfei Yang, Shaojie Shen.

背景知识

VIO初始化:https://blog.csdn.net/shyjhyp11/article/details/115403769

论文的简要概括:

  1. 首先采用手眼标定的思想,估计外参的旋转;
  2. 已知旋转,忽略bias的变化,同时标定:速度、重力方向、特征点深度、平移;
  3. 进一步精细优化;
  4. 采用一种边缘化策略,保证滑窗大小和信息保留。

论文详细解释

IMU积分、预积分等相关内容

公式(1):IMU的直接积分

公式(2):加速度项产生的位置变化 α \alpha α,速度变化 β \beta β,角速度产生的角度变化 R b k + 1 b k R_{b_{k+1}}^{b_k} Rbk+1​bk​​

公式(3):(1)的重写

目标

估计所需要的状态量:所有IMU时刻的平移、速度、重力方向 x k x_k xk​,以及相机和IMU外参 p c b p_c^b pcb​,以及特征点的深度信息 λ \lambda λ

旋转量估计

估计前首先通过视觉建立了一个初步的地图,因此可以通过特征匹配结果,得到两帧间 Camera 的旋转量;
再通过 IMU 的积分得到IMU的旋转量(由于时间较短,忽略了bias等变换)

此时就是求解公式(4):这是一个手眼标定的基本公式,解法也相对简单,看论文即可。另外,加了一项根据旋转估值误差的权重,Huber norm。

速度、重力方向、特征点深度、相机IMU平移 估计

核心公式(11):第一项是先验项的约束,第二项是IMU的,第三项是相机的。下面展开介绍。

首先在之前,作者假设,下面所有的旋转量都是已知的,包括camera和imu的旋转(上面已计算),和imu在不同时刻间的旋转(公式2、3提供)。

这部分内容其实写的有点乱,真的搞了半天才大概理解在干嘛。首先看相机的误差项:(17)(18)

(17)中的 0 表达的很奇怪。但看后面的可以理解作者想表达的意思。
首先对于在 c i c_i ci​ 帧首次观测到的特征点 l l l,它被 c j c_j cj​这一帧观测到了,此时建立一个约束。通过赋予深度 λ l \lambda_l λl​,从camera转到base(IMU)下,在通过IMU一系列的积分求得的旋转增量得到 j 时刻的IMU位姿,再转换回camera系。此时,应该和 c j c_j cj​ 下观测到的是一致的,那么这里的 M M M 就是用于构建视觉误差。
理论上如果外参(的平移量)和深度( λ \lambda λ)计算正确,(17)这个式子应该为0。这就是(17)想表达的含义。那么我们让这个式子等于0,就能求出来准确的平移量和深度!

基于这个思想,再看IMU项:式(12)

式(12)是约束了:速度项和重力方向。
(12)的第三行,旧的重力方向经过旋转后,应该新的一致,误差为0,因此约束了重力的attitude。
第二行和第一行,同时约束了速度项。
因此,最小化(12)即可求出速度和重力方向。

但是(11)还有两个东西没有提到,一个是状态量 X X X 前面的 H H H,还有右下角的 P P P 矩阵。
论文中没有显示的给出 H H H 的形式,但可以根据式(10)自己写出来吧。
右下角的 P P P,是协方差矩阵,根据IMU的噪声和相机成像的噪声,得到。详见论文。

式(12)的求解

作者指出,式(12)可以写成式(21)的形式,直接解析求解,而不需要迭代。这里就需要涉及上面提到的 H H H 了。

进一步细化

上述的求解,只是一些粗糙的计算,例如忽略了误差传递等。此时要优化的是式(28)

后面就忽略了吧,就看不懂了……

后记

哎,IMU这部分硬着头皮啃吧,之前多少年都不想深究,还是绕不开。

【学习总结】VIO初始化学习1:Monocular Visual–Inertial State Estimation With Online Initialization and Camera–IMU相关推荐

  1. (IROS 2022) 基于事件相机的单目视觉惯性里程计 / Event-based Monocular Visual Inertial Odometry

    本博文介绍一下本团队最近的工作<Monocular Event Visual Inertial Odometry based on Event-corner using Sliding Wind ...

  2. 【论文阅读】PL-VIO: Tightly-Coupled Monocular Visual–Inertial Odometry Using Point and Line Features

    这篇文章是中科大的一篇关于点线SLAM的文章,主要是做了一个点线结合的SLAM框架,结合视觉和VIO,但是貌似不包含回环检测的部分. 一.公式约定 论文用右下角标i表示时间,用c表示相机坐标系,用b表 ...

  3. 从零学习VINS-Mono/Fusion源代码(五):VIO初始化

    本节分析VIO初始化部分 VINS-Mono/Fusion代码学习系列: 从零学习VINS-Mono/Fusion源代码(一):主函数 从零学习VINS-Mono/Fusion源代码(二):前端图像跟 ...

  4. git学习总结01 — 初始化

    git学习总结01 - 初始化 文章目录 git学习总结01 - 初始化 1. 起步 2. 初始化配置 2.1 设置签名 config 2.2 初始化本地库 init 2.3 配置忽略文件 .giti ...

  5. 视觉惯性里程计 综述 VIO Visual Inertial Odometry msckf ROVIO ssf msf okvis ORB-VINS VINS-Mono gtsam

    视觉惯性里程计 VIO - Visual Inertial Odometry 视觉−惯性导航融合SLAM方案 博文末尾支持二维码赞赏哦 _ 视觉惯性SLAM专栏 VINS技术路线与代码详解 VINS理 ...

  6. 深度学习「CV」学习实践指南!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:黄星源.樊亮.陈桦.斯国一 深度学习的发展不仅突破了许多视觉难题, ...

  7. python源码学习_【Python学习】Python源码阅读(一)

    最近想读读Python源码,任何东西学习方法基本都是一样的,先从总体框架进行了解,再从自己侧重的方面逐步深入. 1. Python总体架构 左边是Python提供的大量的模块.库以及用户自定义的模块. ...

  8. 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇

    学习时间:2022.04.10~2022.04.12 文章目录 3. 卷积神经网络CNN 3.1 卷积神经网络的概念 3.1.1 什么是CNN? 3.1.2 为什么要用CNN? 3.1.3 人类的视觉 ...

  9. 大一大二的计算机专业同学应该学习什么?如何学习?

    本文是回答一位知友的提问: 已经大一下了 现在在学 C++ 感觉书上很多术语都不懂 编程自己也得花很多时间才能做出来,但感觉自己身边的同学却什么都会.有什么好的建议吗?我一定努力改正 正文 一.可能的 ...

最新文章

  1. 自定义导航栏,实现缓存,更新缓存,提高效率
  2. 【计算理论】图灵机 ( 非确定性图灵机 | 非确定性图灵机指令分析 | 计算过程 | 非确定性指令出现多个分支 | 非确定性图灵机转为计算树 | 计算树 )
  3. UA OPTI570 量子力学22 2-D Isotropic Q.H.O.简介
  4. linux脚本 的使用,linux shell脚步使用讲解
  5. ubuntu18 常用命令
  6. react和react2_为什么React16是React开发人员的福气
  7. 树1 树的同构_检查树是否同构
  8. 【离散数学】欧拉图与汉密尔顿图
  9. java集合多个最大值_Java 8 Stream 求集合元素每个属性的最大值
  10. Java堆分配参数总结
  11. java阻塞执行命令_java执行bat命令碰到的阻塞问题的解决方法
  12. 关于浏览器Ajax请求Type为Request Payload而不是Form Data
  13. AI初学者用什么软件?适合AI新手的9款人工智能开源软件
  14. mysql 跨库查询_mysql跨库联表查询
  15. maya阿诺德渲染失败_[转载]Arnold 渲染器for maya 安装不了的解决办法
  16. 什么软件可以把qlv格式转换成mp4
  17. 南阳oj 题目72 Financial Management
  18. (转)三维GIS软件十九重唱
  19. 北京住房公积金提取(取消)指南
  20. 怎么利用LinkedIn快速搜索国外客户资源?

热门文章

  1. 创业成功必须看的20个经典小故事
  2. python实现黑客暮雨效果
  3. 最近面试的软件测试笔试题笔试题(已整理参考答案)
  4. linux 查看服务器版本
  5. 计算机网络功能可归纳为,计算机网络的功能
  6. Collections.sort()排序使用TimSort排序报Comparison method violates its general contract 原因
  7. 【JVM】CMS简述
  8. 沉静型人格分析,沉静型性格的职业发展
  9. 项目实训2021.07.07
  10. Pointnet++代码详解(三):query_ball_point函数