OpenVINS代码解析-DynamicInitializer-(中)

devtools/2024/9/23 9:36:44/

在上一篇里我们大概对VIO中的初始化方法进行了讨论,接下来我们对于OpenVINS中的动态初始化进行分析,主要参考一些文章:
[1] Closed-form Solutions for Vision-aided Inertial Navigation
[2] OpenVINS State Initialization: Details and Derivations

目录

  • IMU 传播模型
  • 相机观测
  • 构建Ax=b
  • 问题求解
  • 恢复所有初始化变量
  • 最大似然估计
    • IMU Factor
    • Camera Factor
    • Prior Factor

IMU 传播模型

在进行初始化之前我们先来回顾一下IMU的传播方程:
在这里插入图片描述
根据IMU预积分的知识我们可以定义如下:
在这里插入图片描述
把全局坐标系定义为t0时刻的状态,那么将定义IMU预积分带入传播方程可得:
在这里插入图片描述
如果我们想得到每一帧相对t0时刻的状态,则可以得到如下:
在这里插入图片描述

相机观测

用如下表示在t0时刻IMU坐标系作为全局参考系下,将3D landmark反投到归一化坐标系下的过程:
在这里插入图片描述
其中:
在这里插入图片描述
这里符号 ∧ \wedge 代表相机坐标系下的点投影到归一化坐标系下
我们这里假设相机的内外参数已知,则可以建立以下等式:
在这里插入图片描述

构建Ax=b

在这里插入图片描述
单个Landmark可能会被多个相机观测,我们将需要初始化的变量提出,上述式子可以变换成Ax=b的样式:
在这里插入图片描述

问题求解

通过求解上述问题,我们可以的到初始化速度/重力/特征点的全局位置,但是要注意对于重力来说模长是固定的,因此该问题转换成一个带约束的最小二乘求解问题:
在这里插入图片描述
使用拉各朗日乘数法(Lagrange Multiplier Approach)进行求解:
在这里插入图片描述
对于变量求偏导可得:
在这里插入图片描述
采用消元法进行求解,首先根据等式第一行可得:
在这里插入图片描述
代入第二行并进行整合可得:
在这里插入图片描述
将上述问题转换为如下的最小二乘问题对于x2进行求解:
在这里插入图片描述
根据文献A constrained eigenvalue problem可知,上述最小二乘问题与下面等价:
在这里插入图片描述
最终的问题转换为对拉各朗日系数进行带约束求解.根据文献A constrained eigenvalue problem可知为了上述问题有解,需要存在一个不为零的向量满足如下所示:
在这里插入图片描述
上述等式为quadratic eigenvalue problem, 关于quadratic eigenvalue problem定义如下:
在这里插入图片描述
那么根据eigenpolynomial可得:
在这里插入图片描述
通过上式可以求的拉各朗日乘法系数,那么就可得到变量x2(重力):
在这里插入图片描述
接下来根据上述定义可以的到x1,至此我们得到了速度/重力/特征点的3D位置:
在这里插入图片描述

恢复所有初始化变量

因为我们使用了一系列的观测进行初始化,因此我们需要恢复的不仅仅上述的变量,也包含各个观测位置/旋转/平移,如下所示:
在这里插入图片描述
接下来可以根据初始状态(红色)推导所有对应观测时刻的状态:
在这里插入图片描述
最后将t0时刻的重力与默认的重力方向进行对齐,使用Gram-Schmidt可以获得初始时刻相对于世界坐标系的旋转(注意这里yaw是不可观的):
在这里插入图片描述
在这里插入图片描述
那么可以将所有相对于t0时刻的状态全部转到世界坐标系下:
在这里插入图片描述

最大似然估计

通过上述过程我们基本恢复出了所有状态变量,但是我们已知系统是存在噪声的,而且我们希望将噪声也进行传播同时获得他的初始covariance matrix,定义优化的变量如下:
在这里插入图片描述
优化问题的cost由三部分组成:imu factor / camera factor/ prior factors:
在这里插入图片描述

IMU Factor

IMU Factor的定义与vins-mono类似,这里不再赘述,直接给出残差定义:
在这里插入图片描述
在这里插入图片描述

Camera Factor

每个特征观测可以写为如下格式:
在这里插入图片描述在这里插入图片描述

Prior Factor

这块不是很理解,先贴上官方的解释吧
在这里插入图片描述


http://www.ppmy.cn/devtools/102733.html

相关文章

SpringBootFFmpeg实现M3U8切片转码播放(本地)

文章目录 参考概述代码pom.xmlffmpegFFmpegUtilsMediaInfoTranscodeConfig application.ymlApplicationUploadControllerindex.html 测试 参考 springboot-ffmpeg-demo gitee代码 SpringBoot FFmpeg实现一个简单的M3U8切片转码系统 FFmpeg音视频核心技术精讲 - 百度网盘 概…

Windows 10/11 系统优化工具 Optimizer 16.7

Optimizer 功能特色 全语言支持(提供19种语言) 提高系统和网络性能 禁用不必要的窗口服务 禁用 Windows 遥测、小娜等 禁用 Office 遥测(仅适用于 Office 2016) 禁用 Windows 10 自动更新 一次快速下载有用的应用程序 卸载 UWP 应…

(每日一问)计算机网络:GET请求和POST请求的区别

(每日一问)计算机网络:GET请求和POST请求的区别 在Web开发中,GET请求和POST请求是最常见的两种HTTP请求方法。尽管它们在功能上有许多相似之处,但在使用场景、数据传递方式、缓存策略等方面存在显著差异。了解这些区别…

C++ TinyWebServer项目总结(14. 多线程编程)

早期Linux不支持线程,直到1996年,Xavier Leroy等人开发出第一个基本符合POSIX标准的线程库LinuxThreads,但LinuxThreads效率低且问题多,自内核2.6开始,Linux才开始提供内核级的线程支持,并有两个组织致力于…

​C++ 中的 Lambda​

C11引入了lambda表达式,使得C程序员能够编写更简洁的回调函数和闭包, Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。 1 语法 [捕获列表] (参数) mutable 或 exception 声明 -> 返回值类型 {函数体}//计算两个值的和 au…

反爬虫策略收录集

前言 反爬虫,是指对扫描器中的网络爬虫环节进行反制,通过一些反制策略来阻碍或干扰爬虫的正常爬行,从而间接地起到防御目的。下面是一些常见的反爬虫策略的收录。 入门版 封IP 由于服务器有防火墙(如果防火墙在TCP/UDP层或者它…

StarRocks 巧用 Storage Volume,强大又便捷

前言 StarRocks 存算分离支持使用各种外部独立存储系统来存储业务数据。在早期 3.0 版本中,用户需要在 fe.conf 中配置存储相关信息(如 endpoint 等),这种静态配置模式也给用户使用带来了很多的不便性。 为此,StarRo…

74HC595的用法与原理

DS/LDSI(SER),串行数据输入引脚 OE/LEDN,输出使能控制脚,它是低电才使能输出,所以接GND RCK/LDSTR(STCP),存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器…