【学习总结】VIO初始化学习1:Monocular Visual–Inertial State Estimation With Online Initialization and Camera–IMU
最近看了一篇论文,很是头大,大概看懂了个所以然。记录一下。
论文: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
论文的简要概括:
- 首先采用手眼标定的思想,估计外参的旋转;
- 已知旋转,忽略bias的变化,同时标定:速度、重力方向、特征点深度、平移;
- 进一步精细优化;
- 采用一种边缘化策略,保证滑窗大小和信息保留。
论文详细解释
IMU积分、预积分等相关内容
公式(1):IMU的直接积分
公式(2):加速度项产生的位置变化 α \alpha α,速度变化 β \beta β,角速度产生的角度变化 R b k + 1 b k R_{b_{k+1}}^{b_k} Rbk+1bk
公式(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相关推荐
- (IROS 2022) 基于事件相机的单目视觉惯性里程计 / Event-based Monocular Visual Inertial Odometry
本博文介绍一下本团队最近的工作<Monocular Event Visual Inertial Odometry based on Event-corner using Sliding Wind ...
- 【论文阅读】PL-VIO: Tightly-Coupled Monocular Visual–Inertial Odometry Using Point and Line Features
这篇文章是中科大的一篇关于点线SLAM的文章,主要是做了一个点线结合的SLAM框架,结合视觉和VIO,但是貌似不包含回环检测的部分. 一.公式约定 论文用右下角标i表示时间,用c表示相机坐标系,用b表 ...
- 从零学习VINS-Mono/Fusion源代码(五):VIO初始化
本节分析VIO初始化部分 VINS-Mono/Fusion代码学习系列: 从零学习VINS-Mono/Fusion源代码(一):主函数 从零学习VINS-Mono/Fusion源代码(二):前端图像跟 ...
- git学习总结01 — 初始化
git学习总结01 - 初始化 文章目录 git学习总结01 - 初始化 1. 起步 2. 初始化配置 2.1 设置签名 config 2.2 初始化本地库 init 2.3 配置忽略文件 .giti ...
- 视觉惯性里程计 综述 VIO Visual Inertial Odometry msckf ROVIO ssf msf okvis ORB-VINS VINS-Mono gtsam
视觉惯性里程计 VIO - Visual Inertial Odometry 视觉−惯性导航融合SLAM方案 博文末尾支持二维码赞赏哦 _ 视觉惯性SLAM专栏 VINS技术路线与代码详解 VINS理 ...
- 深度学习「CV」学习实践指南!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:黄星源.樊亮.陈桦.斯国一 深度学习的发展不仅突破了许多视觉难题, ...
- python源码学习_【Python学习】Python源码阅读(一)
最近想读读Python源码,任何东西学习方法基本都是一样的,先从总体框架进行了解,再从自己侧重的方面逐步深入. 1. Python总体架构 左边是Python提供的大量的模块.库以及用户自定义的模块. ...
- 学习笔记:深度学习(3)——卷积神经网络(CNN)理论篇
学习时间:2022.04.10~2022.04.12 文章目录 3. 卷积神经网络CNN 3.1 卷积神经网络的概念 3.1.1 什么是CNN? 3.1.2 为什么要用CNN? 3.1.3 人类的视觉 ...
- 大一大二的计算机专业同学应该学习什么?如何学习?
本文是回答一位知友的提问: 已经大一下了 现在在学 C++ 感觉书上很多术语都不懂 编程自己也得花很多时间才能做出来,但感觉自己身边的同学却什么都会.有什么好的建议吗?我一定努力改正 正文 一.可能的 ...
最新文章
- 自定义导航栏,实现缓存,更新缓存,提高效率
- 【计算理论】图灵机 ( 非确定性图灵机 | 非确定性图灵机指令分析 | 计算过程 | 非确定性指令出现多个分支 | 非确定性图灵机转为计算树 | 计算树 )
- UA OPTI570 量子力学22 2-D Isotropic Q.H.O.简介
- linux脚本 的使用,linux shell脚步使用讲解
- ubuntu18 常用命令
- react和react2_为什么React16是React开发人员的福气
- 树1 树的同构_检查树是否同构
- 【离散数学】欧拉图与汉密尔顿图
- java集合多个最大值_Java 8 Stream 求集合元素每个属性的最大值
- Java堆分配参数总结
- java阻塞执行命令_java执行bat命令碰到的阻塞问题的解决方法
- 关于浏览器Ajax请求Type为Request Payload而不是Form Data
- AI初学者用什么软件?适合AI新手的9款人工智能开源软件
- mysql 跨库查询_mysql跨库联表查询
- maya阿诺德渲染失败_[转载]Arnold 渲染器for maya 安装不了的解决办法
- 什么软件可以把qlv格式转换成mp4
- 南阳oj 题目72 Financial Management
- (转)三维GIS软件十九重唱
- 北京住房公积金提取(取消)指南
- 怎么利用LinkedIn快速搜索国外客户资源?
热门文章
- 创业成功必须看的20个经典小故事
- python实现黑客暮雨效果
- 最近面试的软件测试笔试题笔试题(已整理参考答案)
- linux 查看服务器版本
- 计算机网络功能可归纳为,计算机网络的功能
- Collections.sort()排序使用TimSort排序报Comparison method violates its general contract 原因
- 【JVM】CMS简述
- 沉静型人格分析,沉静型性格的职业发展
- 项目实训2021.07.07
- Pointnet++代码详解(三):query_ball_point函数