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

2023-05-16

最近看了一篇论文,很是头大,大概看懂了个所以然。记录一下。
论文: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+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这部分硬着头皮啃吧,之前多少年都不想深究,还是绕不开。

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

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

  • yolo v4安装与使用

    yolo v4安装与使用 GPU版本 系统环境 Ubuntu18 04 cuda11 0 cudnn8 0 4 opencv3 4 4 相关链接 官网链接 xff1a https github com AlexeyAB darknet yo
  • Jetson NX克隆与烧录镜像

    前言 本文主要说明如何在Ubuntu系统上备份Jetson NX镜像 xff0c 并烧录镜像到多台NX开发板上 我的NX的系统是在SD卡上的 xff0c 所以这个方法只适用于系统装在SD卡上的开发板 参考链接 https blog csdn
  • ros2 CMakeLists.txt与packages.xml写法

    注 xff1a 尽量使用ament cmake auto来编写cmakelists txt文件 xff0c 依赖的程序包在packages xml文件中用 lt depend gt nav msgs lt depend gt 的形式声明 x
  • TX2 ubuntu18.04 改固定IP地址 eth0无本机IP

    注意事项 我是在TX2 ubuntu18 04上改的固定IP地址 其他主机上ubuntu18 04好像需要另一种方法 xff0c 需要你自己去百度上搜 参考博客 https blog csdn net a13662080711 articl
  • MFC与.NET混合编程

    1 xff1a VS2008 建立 MFC程序 xff1b 2 xff1a Alt 43 F7 设置 xff1a 公共语言运行库支持 xff08 选择 xff09 公共语言运行库支持 clr xff1b 3 xff1a 添加 Net相应库
  • 在TX2(Jetpack4.2+kernel4.9.140+librealsense v2.22)上安装D435i驱动

    在TX2 xff08 Jetpack4 2 43 kernel4 9 140 43 librealsense v2 22 xff09 上安装D435i驱动 前言准备工作系统版本参考资料 操作步骤 前言 用了很长时间 xff0c 参考了很多博
  • ROS发布静态tf变换

    方法一 xff1a include lt ros ros h gt include lt tf transform broadcaster h gt int main int argc char argv ros init argc arg
  • ROS常见问题及解决方法

    1 undefined reference to 96 tf TransformBroadcaster TransformBroadcaster 问题描述 xff1a CMakeFiles imu data dir src imu data
  • TX2制作镜像并烧写镜像

    前言 本文简要介绍TX2如何制作镜像并烧写镜像 xff0c 如果读者一开始是通过sdkmanager安装的TX2系统可直接进入笔记本中 nvidia nvidia sdk JetPack 4 2 Linux P3310 Linux for
  • php写守护进程(Daemon)

    守护进程 xff08 Daemon xff09 是运行在后台的一种特殊进程 它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件 守护进程是一种很有用的进程 php也可以实现守护进程的功能 1 基本概念 进程 每个进程都有一个父
  • clang-format 说明

    转载自 xff1a https www cnblogs com lepeCoder p 8032178 html BasedOnStyle string 这个样式用于所有没有特殊指定配置的选项 这个选项仅在clang format配置中支持
  • 路径规划

    转载 xff1a 链接 xff1a https www jianshu com p f3bab4e119cf D算法 xff0c Dijkstra算法 两个表 xff1a closed表与open表 closed表用于记录已访问过的节点 x
  • awk 筛选并计算时间

    grep 39 filter cost time 39 log file awk F 39 filtered route count 39 39 print 2 39 awk F 39 39 39 print 1 39 awk 39 BEG
  • 忽略批处理中的pause命令

    当存在一个批处理文件 run bat xff0c 其中 xff1a 64 echo 开始暂停 pause 64 echo 暂停结束 当我们执行这个run bat文件时 xff0c 运行到pause会提示需要按任意键继续 xff0c 并且命令
  • BullseyeCoverage 代码覆盖度检查工具

    昨日又有同事问我 BullseyeCoverage 的使用方法 xff0c 由于时间久远 xff0c 有些遗忘 xff0c 只后悔当初为什么没有整理记录下来 xff0c 只好重新查阅了很多文档 今日整理下比较重要的知识 xff0c 方便以后
  • 用于词义消岐的Lesk算法

    该算法由Michael E Lesk于1986年提出 xff0c 是一个基于词典的词义消岐方法 该算法认为 xff1a 一个词在词典中的词义解释与该词所在句子具有相似性 这种相似性可以由相同单词的个数来表示 xff0c 比如 cone 和
  • 通过cmake打印CMakeLists.txt中的宏

    转 cmake中宏的使用 原文路径 https blog csdn net qq 29573053 article details 80392441 首先贴一个例子进行分析 set var 34 ABC 34 macro Moo arg m
  • undefined reference to `vtable for XXXXX`

    vtable 表示的是虚表 这个错误出现时 请检查你的父类所有虚函数是否实现 或者子类是否把父类的虚函数都处理完 注意 析构函数也算
  • CMakeLists.txt ----find_package

    在linux平台下编译程序的时候通常都会使用到CMakeLists txt来制定编译规则 在查找需要链接的lib时候 通常会使用到find package 记录一下我之前用到的地方 find package 之后 最好到FindXXX cm
  • opencv学习笔记1 opencv安装及配置 一劳永逸不需要每次都重新配置

    opencv2 4 9地址 xff1a https sourceforge net projects opencvlibrary files opencv win 2 4 9 opencv 2 4 9 exe download vs2013

随机推荐

  • 【Linux学习笔记】关于ubuntu开机菜单栏和任务栏不见了的有效解决方法

    一 问题描述 ubuntu开机只有桌面 xff0c 没有菜单栏和任务栏 xff0c 如下图 xff1a 二 问题解决 刚学习ubuntu xff0c 总有些像我这样不折腾就不舒服的人 xff0c 今天改了一下主题 xff0c 图标什么的 x
  • 【数据结构与算法】深入浅出递归和迭代的通用转换思想

    深入浅出递归和迭代的通用转换思想 一般来说 xff0c 能用迭代的地方就不要用递归 xff01 理论上讲 xff0c 所有的递归和迭代之间都能相互转换 xff01 刷题碰到 一天一道LeetCode 130 Surrounded Regio
  • 【unix网络编程第三版】阅读笔记(二):套接字编程简介

    unp第二章主要将了TCP和UDP的简介 xff0c 这些在 TCP IP详解 和 计算机网络 等书中有很多细致的讲解 xff0c 可以参考本人的这篇博客 计算机网络 第五版 阅读笔记之五 xff1a 运输层 xff0c 这篇博客就不再赘述
  • 带你深入理解STL之Deque容器

    在介绍STL的deque的容器之前 xff0c 我们先来总结一下vector和list的优缺点 vector在内存中是分配一段连续的内存空间进行存储 xff0c 其迭代器采用原生指针即可 xff0c 因此其支持随机访问和存储 xff0c 支
  • 带你深入理解STL之Set和Map

    在上一篇博客 带你深入理解STL之RBTree中 xff0c 讲到了STL中关于红黑树的实现 xff0c 理解起来比较复杂 xff0c 正所谓前人种树 xff0c 后人乘凉 xff0c RBTree把树都种好了 xff0c 接下来就该set
  • 一个小时开发的直播推拉流软件来了

    一 简介 目前市面上直播推流的软件有很多 xff0c 拉流也很常见 近期因为业务需要 xff0c 需要搭建一整套服务端推流 xff0c 客户端拉流的程序 随即进行了展开研究 xff0c 花了一个小时做了个基于winfrom桌面版的推拉流软件
  • Redis源码剖析--字符串t_string

    前面一直在分析Redis的底层数据结构 xff0c Redis利用这些底层结构设计了它面向用户可见的五种数据结构 xff0c 字符串 哈希 xff0c 链表 xff0c 集合和有序集合 xff0c 然后用redisObject对这五种结构进
  • Redis源码剖析--快速列表quicklist

    在RedisObject这一篇博客中 xff0c 有介绍到list结构的底层编码类型有OBJ ENCODING QUICKLIST xff0c 当时就发现这个底层数据结构被我遗漏了 昨天花了点时间补了补这个知识 xff0c 看完发现这货就跟
  • Redis源码剖析--列表list

    上一篇博客Redis源码剖析 快速列表 带大家一起剖析了quicklist这个底层数据结构的实现原理 Redis对外开放的列表list结构就是采用quicklist作为底层实现 xff08 在新版本的Redis源码中 xff0c 不再采用z
  • PX4二次开发(一:PX4架构)

    概念 本节包含有关PX4系统架构和其他核心概念的主题 目录 PX4架构 PX4飞行栈架构 事件接口 飞行模式 飞行任务 控制分配 xff08 混控Mixing xff09 PWM限制状态机 系统启动 PX4 SD卡布局 PX4系统架构 以下
  • ssh登录警告 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

    1 ssh远程登录警告提示信息如下 xff1a span class token function ssh span th 64 192 168 162 136 64 64 64 64 64 64 64 64 64 64 64 64 64
  • 在Mac上使用Dronekit与SITL做飞行程序的模拟调试

    背景 无人机的项目快要中期答辩了 xff0c 为了在地面站 xff08 电脑 xff09 控制无人机 xff0c 我们选择DroneKit来进行代码的书写 DroneKit是一个专门用于控制无人机的Python库 xff0c 使用这个API
  • 敏捷教练的十种能力

    1 具备神奇的 读懂一个房间 的能力 只要走进一个房间 xff0c 就能判断出不在的过程中 xff0c 房间里发生了什么事情 xff0c 能立即读出空气中蕴含的情绪 xff0c 从而判断是否一切正常 xff1b 2 关心人本身胜过关心产品
  • kubernetes: HPA解析

    什么是HPA Horizontal Pod Autoscaling可以根据指标自动伸缩一个Replication Controller Deployment 或者Replica Set中的Pod数量 HPA的工作模型 有哪些指标 目前主要分
  • ROS中生成CameraInfo消息

    前言 由于某个第三方代码需要接受CameraInfo消息 xff0c 我换了一个相机以后 xff0c 需要自己发布CameraInfo消息 网上搜了半天 xff0c 很少有介绍CameraInfo这些数据都是怎么来的的资料 xff0c 可能
  • OpenCV+aruco 生成标定格与相机位姿计算

    仅用于记录自己使用aruco过程中遇到的问题与解决方法 0 参考资料 github一个参考 xff1a https github com opencv opencv contrib blob master modules aruco sam
  • 计算机和控制领域SCI收录期刊及其影响因子

    来源 xff1a http hi baidu com daren007 blog item 0605ed97b1c50e6a55fb9608 html 031 Computer Applications amp Cybernetics No
  • 【学习总结】Kalibr标定相机与IMU

    本文仅用于记录自己学习过程 使用方法 Kalibr包括 xff1a 相机内参 xff0c 多相机外参 xff0c 已知IMU和相机内参的 相机与IMU标定 xff0c 以及扩展Kalibr支持IMU内参标定 当已知IMU内参和相机内参后 x
  • 【学习记录】Kalibr标定相机与IMU的一点记录

    一周更多的时间在搞这个Kalibr的相机与IMU的标定 xff0c 记录一些问题 xff1a 相机重投影误差 相机一定要好好标定 xff0c 如果重投影误差太大 xff0c 是优化不出来外参的 好在相机内参 xff0c 与IMU外参标定 x
  • 【学习总结】VIO初始化学习1:Monocular Visual–Inertial State Estimation With Online Initialization and Camera–IMU

    最近看了一篇论文 xff0c 很是头大 xff0c 大概看懂了个所以然 记录一下 论文 xff1a Monocular Visual Inertial State Estimation With Online Initialization