OpenVINS学习3——初始化原理学习

一、OpenVINS初始化概述

VIO初始化的主要意义有:

(1)对齐相机的世界坐标系和惯性系,因此需要估计重力方向。

(2)为后续的VIO算法提供较为准确的初始参数和状态(尺度、IMU bias、初始速度),使得算法可以快速稳定地进入正常运行阶段。

良好的初始化对VIO算法的整体精度和鲁棒性至关重要。

目前OpenVINS包含视觉惯性系统的 StaticInitializer 和 DynamicInitializer 初始化代码。它将等待平台静止,然后初始化其在重力框架中的方向。

一般VIO初始化分为两种,一种是静态初始化,一种是动态初始化,而OpenVins则利用加速度的方差差异将运动分为两种状态,一种是静止的,一种是刚开始运动的。

VIO初始化就要任务一般是估计重力方向,速度,位置,IMU的偏置,尺度。而在openvins中,只估计重力方向,IMU的偏置。

在代码里主要写了三个初始化模式:

1) GroundTruth初始化

2 )静止初始化

3 )动态初始化

关于静止初始化,可以参考不一样的静态初始化——OpenVins-CSDN博客

静止初始化 - 知乎

如果平台初始时不是静止的,那么我们利用动态初始化来尝试恢复初始状态。这是Estimator Initialization in Vision-aided Inertial Navigation with Unknown Camera-IMU Calibration的实现,它通过首先创建一个用于恢复速度、重力和特征位置的线性系统来解决初始化问题。初始恢复后,执行全面优化以允许协方差恢复。

Estimator Initialization in Vision-aided Inertial Navigation with Unknown Camera-IMU Calibration论文阅读博客:

论文阅读Estimator Initialization in Vision-aided Inertial Navigation with Unknown Camera-IMU Calibration-CSDN博客

二、静态初始化原理

静止初始化 - 知乎在VIO/VINS系统中,初始化是指在系统启动阶段,需要估计(设置) 重力方向(gravity direction)、初始速度(initial velocity)、初始位置(initial position)、加速度计以及陀螺仪biases (accelerometer and gyroscope …icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/282875390

三、动态初始化原理

视觉惯性导航系统( VINS )的一个基本问题是其状态初始化。也就是说,恢复给定惯性和视觉方位测量的初始可观测状态。众所周知,VINS具有4个自由度的不可观测方向,对应于全局的偏航和位置[ 1 ]。这意味着其他参数是可观测的,因此,在给定惯性和视觉测量读数的情况下,它们是可恢复的。状态初始化的挑战是在没有任何先验知识的情况下,通过构造一个线性系统来恢复这些可观测参数。这并不简单,因为定向是非线性的,因此如果没有近似和技巧,很难定义这样的线性问题。接下来,在Dong - Si和穆里基斯工作的基础上,给出了问题的闭式解,并定义了一个二次约束最小二乘问题[ 2、3]。另外一个重点是,希望恢复初始状态协方差,以便用于基于滤波器的视觉惯性扩展卡尔曼滤波器OpenVINS [ 4 ]。

1、最小二乘方程构建

利用IMU模型和相机模型,从相机归一化平面的坐标等式出发,利用IMU提供的姿态信息,以特征点全局位置、IMU速度、重力加速度为因变量,列出形如Ax=b的方程。

如果有五个以上的框架,就可以恢复上述的线性系统(即当N = 5时, 2N≥9 )。如果重力被限制在一个已知的量级,那么这就减少了自由度,因此只需要四个观测值(即当N = 4时,满足2N≥8)就可以恢复状态。这与[ 2、3]中的结果不同,因为没有尝试将相机外参恢复到IMU变换中。该系统可以对所有特征观测值进行叠加,同时增加了系统的鲁棒性。

加上重力加速度的约束,再利用拉格朗日乘子法,得到新的无约束问题,对该多项式的伴随矩阵进行特征分解,可以找到该多项式的根(从而解得)。

恰好满足约束的最小λ解将给出最优解:

现在希望恢复每个相机时间步的惯性状态,这将作为下一部分非线性优化的初始猜测。利用惯性传播,可以恢复每个时刻的惯性状态:

用红色突出了从约束最小二乘中恢复的分量和∆T从t0时刻到tk时刻。现在希望将第一参照系与引力参照系对齐。这意味着将计算一个框架{ G },使得重力为Gg = [ 0 0  9 . 81] ,其位置和偏航在{ I0 }原点。利用施密特正交方法把全局坐标系和惯性坐标系进行对齐。可以发现其z轴沿重力方向的旋转为:

至此,初始化估计重力方向这个问题解决。

2、精细化

利用线性系统,我们恢复了状态的一个初始猜测。在此,希望对估计值进行精化,使其更接近真实值,并恢复初始状态的协方差。这个过程还将考虑到系统的噪声特性,使得每个测量相对于其传感器的精度是加权的。可以定义下面希望优化的状态

其中在每个成像时间步都有C个惯性状态,和N个环境特征。可以定义如下带有惯性,相机和先验因子的优化问题:

 

四、代码解析

OpenVINS的初始化代码在ov_init文件夹下,主要分为静态初始化和动态初始化两部分。下一个博客重点写一下初始化代码得到结构功能,写一个详尽的注释。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/239168.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

记录hive/spark取最新且不为null的方法

听标题可能听不懂我想表达的意思,我来描述一下我要做的事: 比如采集同学对某一网站进行数据采集,同一个用户每天会有很多条记录,所以我们要取一条这个用户最新的状态,比如用户改了N次昵称,我们只想得到最后…

C++STL之List的实现

首先我们要实现List的STL,我们首先要学会双向带头链表的数据结构。那么第一步肯定是要构建我们的节点的数据结构。 首先要有数据域,前后指针域即可。 再通过模板类进行模板化。 然后再写List的构造函数,这个地方用T&,通过引用就可以减少一次形参拷…

坑爹的奥数(枚举法)

枚举法是一种解决问题的基本方法,它通过列举问题的所有可能情况来找到问题的解。这种方法适用于问题的解空间相对较小,可以通过穷举所有可能的解来找到最优解或满足特定条件的解。 以下是枚举法的一般步骤: 定义问题: 确定问题的…

学习-面试java基础-(集合)

String 为什么不可变? 1线程安全 2支持hash映射和缓存。因为String的hash值经常会使用到,比如作为 Map 的键,不可变的特性使得 hash 值也不会变,不需要重新计算。 3出于安全考虑。网络地址URL、文件路径path、密码通常情况下都是以…

易点易动设备管理系统:助力企业高效巡检的智能选择

在现代企业管理中,设备巡检是确保设备正常运行和生产高效的重要环节。然而,传统的巡检方式常常面临着效率低下、信息不准确等问题。为了解决这些挑战,易点易动设备管理系统应运而生。本文将详细介绍易点易动设备管理系统如何助力企业实现高效…

红队攻防实战之DEATHNOTE

难道向上攀爬的那条路,不是比站在顶峰更让人热血澎湃吗 渗透过程 获取ip 使用Kali中的arp-scan工具扫描探测 端口扫描 可以看到开放了22和80端口。 访问80端口,重定向到 修改hosts文件,将该域名解析到ip 如图 修改完再次访问&#xff0…

Python 递归、闭包与装饰器的编程魔法

更多资料获取 📚 个人网站:ipengtao.com 在Python编程中,递归、闭包和装饰器是一些强大的工具,它们能够为代码增色不少,提高代码的可读性和灵活性。本文将深入探讨这三种编程魔法的原理和应用,通过丰富的示…

040.Python面向对象_设计原则

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

【工具栏】idea安装翻译工具

然后重启idea 打开设置 翻译方式: 选中要翻译的文本 然后右键 运行项目的时候,方便查找错误

快速幂+高精乘(填坑)洛谷1226+1045

引言 最近在刷题的时候偶然见到这样一个题目,见下图 大致的意思是,让我们计算a的b次方取模p的结果,再我了解了关于快速幂的内容之后,很快便解决了这道题,每次乘完a后取模最后就可以得到结果。但是在这之后&#xff0c…

淡化了技术指标 还能做现货黄金交易?

技术指标是分析和预测现货黄金走势的其中一种方法,普通投资者多数依赖技术指标为自己的交易做判断。然而,近几年有一种观点认为,我们应该淡化技术指标,少使用或者不用技术分析来服务我们的交易。这个观点引起了不少投资者的思考&a…

NFTScan | 12.04~12.10 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2023.12.04~ 2023.12.10 NFT Hot News 01/ NFTScan 与 MintCore 联合推出适用于 NFT 的 Layer2 网络 Mint 12 月 5 日,根据官方消息,NFT 基础设施服务商 NFTScan …

Ajax跨域请求

最近使用js构造请求时发生了CORS跨域问题,mark一下 ajax跨域,这应该是最全的解决方案了 | Dailc的个人主页Everything about dailchttps://dailc.github.io/2017/03/22/ajaxCrossDomainSolution.htmlAJAX - 廖雪峰的官方网站研究互联网产品和技术&#…

基于SSM的乡镇篮球队管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本乡镇篮球队管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信…

华为云CodeArts Artifact:保障制品质量与安全的最佳选择

近期,为降低用户使用成本、满足个性化选择诉求,华为云制品仓库CodeArts Artifact 从软件开发生产线 CodeArtS 解耦出来,可单独购买。这是一款打破了传统制品管理的限制,高效、安全、好用的软件包管理工具。 体验通道:…

独热编码和词向量的简单理解

把单词用向量表示,是把深度神经网络语言模型引入自然语言处理领域的一个核心技术。想要让机器理解单词,就必须要把它变成一串数字(向量)。下面介绍的 One-Hot Encoding(One-Hot 编码)和 Word Embedding &am…

接口自动化框架Pytest —— 配置文件pytest.ini的详细使用

前言 我们在执行用例的时候,每次都在命令行中输入-v,-s等一些命令行参数的时,比较麻烦。其中pytest.ini这个配置文件可以快速的帮助我们解决这个问题。 配置文件 pytest.ini文件是pytest的主配置文件,可以改变pytest的运行方式…

Async 异步任务注解类的用法及原理分析

背景 看项目源码发现有一个 Async 注解,它是 Spring 的一个注解,作用是在独立的线程中完成注解方法的操作,底层原理是动态代理。 之前不知道这个知识点,小小测试了一下,发现项目中这个注解的用法是错误的&#xff0c…

Cypress安装与使用教程(2)—— 软测大玩家

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

JVM学习笔记-如何在IDEA打印JVM的GC日志信息

若要在Idea上打印JVM相应GC日志,其实只需在Run/Debug Configurations上进行设置即可。 拿《深入Java虚拟机》书中的3-7代码例子来演示,如 1 public class JvmTest {2 private static final int _1MB1024*1024;3 public static void main(String…