VINS-Mono-VIO初始化 (五:视觉惯性对齐求解)

整体思想就是根据预积分的公式,把已知量和未知量各放到一边,因为前面的数据都是变换到 c 0 c_{0} c0下的,不是真正意义上和重力对齐的世界坐标,然后位移和速度的预积分中会用到加速度计获取的重力加速度g,但是这个重力g是没有和世界的重力方向对齐的,所以里面就存在了未知量,通过每组预积分的数据联立起来构成一个大矩阵对重力向量进行求解,这里是求解了重力方向(对于起始帧 c 0 c_{0} c0的重力方向),重力大小也有,不过不准确,所以后续还会利用重力先验对方向进行调整

有个小问题:这个预积分前面不是也会涉及重力吗,是直接不理会当作影响不大来进行处理?那这个已知量里面也包含里一定的未知量的积分影响在里面,待我看下代码确定一下整体的初始化流程和思想,后续会出篇整体初始化思想流程

关于位移的预积分量的定义,把 c 0 c_{0} c0 换成 w w w 就是之前的式子了,因为重力还没对齐所以只转换到 c 0 c_{0} c0 坐标系下,就是系统开始的第一帧下

先对平移进行推导


上一节零偏估计里面推导出这个式子
在这里插入图片描述
代入进去则有
R c 0 b k ( s P c k + 1 c 0 − R b k + 1 c 0 ⋅ P c b ) = R c 0 b k [ s P c k c 0 − R b k c 0 ⋅ P c b + R c 0 b k ⋅ v b k ⋅ Δ t − 1 2 g c 0 Δ t 2 + α ] R^{b_{k}}_{c_{0}}(sP^{c_{0}}_{c_{k+1}}-R^{c_{0}}_{b_{k+1}}·P^{b}_{c})=R^{b_{k}}_{c_{0}}[sP^{c_{0}}_{c_{k}}-R^{c_{0}}_{b_{k}}·P^{b}_{c}+R^{b_{k}}_{c_{0}}·v^{b_{k}}·Δt-\frac{1}{2}g^{c_{0}}Δt^{2}+α] Rc0bk(sPck+1c0Rbk+1c0Pcb)=Rc0bk[sPckc0Rbkc0Pcb+Rc0bkvbkΔt21gc0Δt2+α]
原本的 v b k c 0 v^{c_{0}}_{b_{k}} vbkc0 指的是再 c 0 c_{0} c0 坐标系下 b k b_{k} bk 的速度,现在直接拿在 b k b_{k} bk 系下的速度通过旋转矩阵进行变换,其实意思是一样的。
现在把已知量放左边,未知量放右边
α − P c b ⋅ R c 0 b k ⋅ R b k + 1 c 0 ⋅ P c b = R c 0 b k ( P c k + 1 c 0 − P c k c 0 ) s − v b k Δ t + 1 2 R c 0 b k g c 0 Δ t 2 α-P^{b}_{c}·R^{b_{k}}_{c_{0}}·R^{c_{0}}_{b_{k+1}}·P^{b}_{c}=R^{b_{k}}_{c_{0}}(P^{c_{0}}_{c_{k+1}}-P^{c_{0}}_{c_{k}})s-v^{b_{k}}Δt+\frac{1}{2}R^{b_{k}}_{c_{0}}g^{c_{0}}Δt^{2} αPcbRc0bkRbk+1c0Pcb=Rc0bk(Pck+1c0Pckc0)svbkΔt+21Rc0bkgc0Δt2
左边都是已知量,最后是一个 3 × 1 3×1 3×1 的一个向量
上面的式子就和论文中的公式对应了
在这里插入图片描述
在这里插入图片描述

对速度进行推导

根据原始预积分的定义有
R c 0 b k ⋅ V b k + 1 c 0 = R c 0 b k ( V b k c 0 − g c 0 ⋅ Δ t ) + β R^{b_{k}}_{c_{0}}·V^{c_{0}}_{b_{k+1}}=R^{b_{k}}_{c_{0}}(V^{c_{0}}_{b_{k}}-g^{c_{0}}·Δt)+β Rc0bkVbk+1c0=Rc0bk(Vbkc0gc0Δt)+β
然后变换一下表达方式,含义是不变的
= > R c 0 b k ⋅ R b k + 1 c 0 ⋅ V b k + 1 = R c 0 b k ( R b k c 0 ⋅ V b k − g c 0 ⋅ Δ t ) + β =>R^{b_{k}}_{c_{0}}·R^{c_{0}}_{b_{k+1}}·V^{b_{k+1}}=R^{b_{k}}_{c_{0}}(R^{c_{0}}_{b_{k}}·V^{b_{k}}-g^{c_{0}}·Δt)+β =>Rc0bkRbk+1c0Vbk+1=Rc0bk(Rbkc0Vbkgc0Δt)+β
同样把已知量放左边,未知量放右边
= > β = − V b k + R c 0 b k ⋅ R b k + 1 c 0 ⋅ V b k + 1 + R c 0 b k ⋅ g c 0 ⋅ Δ t =>β=-V^{b_{k}}+R^{b_{k}}_{c_{0}}·R^{c_{0}}_{b_{k+1}}·V^{b_{k+1}}+R^{b_{k}}_{c_{0}}·g^{c_{0}}·Δt =>β=Vbk+Rc0bkRbk+1c0Vbk+1+Rc0bkgc0Δt

第 k 到 k+1 都会产生上面两个式子,会有很多个这种式子拼起来

构成 H x = b Hx=b Hx=b 的矩阵方程,代码中就是一些矩阵拼接的操作
x = [ v k , v k + 1 , g , s ] ∈ 10 × 1 x=[v_{k},v_{k+1},g,s]∈10×1 x=[vk,vk+1,g,s]10×1,所以 H 属于 10 × 10 H属于10×10 H属于10×10 b ∈ 10 × 1 b∈10×1 b10×1,实际上由于有多组数据,10 会变成 N,速度,重力都是3维的,尺度因子是1,所以每一组就是 10

有多个数据则矩阵写为,通过对每一组数据进行矩阵分块填入这个大矩阵里面,然后一次性求解出所有速度、重力和尺度
在这里插入图片描述

求解后获得重力向量
然后根据当地的重力先验来对刚才算出来的重力进行修正

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解udp

1.再谈端口号 1.1复习 我们上一篇谈了很久的应用层的http,并在此前我们使用socket编程写了一个能相互通信的客户端与服务端,但是我们也只是粗略的理解了一下tcp和udp在编程过程中所形成的差异性,并没有实质去了解一下其详细内容,…

三维地图数据共享与统一存储

这家总部位于北京的高新企业是一家致力于三维数字地理技术的领军企业,提供中国领先的三维数据获取服务,并依据三维数据自动建模云计算服务、提供全国性的地图与位置服务。这项技术其实我们每天都有可能用到,例如百度地图、高德地图就属于三维…

数据结构——线性表①(顺序表)

一、线性表定义 线性表是一种数据结构,它是由n个具有相同数据类型的数据元素a1,a2,…,an组成的有限序列。 其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个…

处理固定资产折旧报错 AFAB “根据记帐循环, 您必须接下来对期间 001记帐”

会计在运用进行固定资产折旧时,发现有个报错“根据记帐循环, 您必须接下来对期间 001记帐”, 根据记帐循环, 您必须接下来对期间 001记帐 消息编号 AA683 诊断 不可以在指定的期间过帐折旧,因为此操作会遗漏过帐期间。 系统响应 该期间不能进…

多输入多输出 | Matlab实现k-means-ELM(k均值聚类结合极限学习机)多输入多输出组合预测

多输入多输出 | Matlab实现k-means-ELM(k均值聚类结合极限学习机)多输入多输出组合预测 目录 多输入多输出 | Matlab实现k-means-ELM(k均值聚类结合极限学习机)多输入多输出组合预测预测效果基本描述程序设计参考资料 预测效果 基…

ATECLOUD如何进行电源模块各项性能指标的测试?

ATECLOUD平台进行电源模块各项性能指标的测试是通过以下步骤实现的: 连接测试设备:将测试设备与云计算服务器连接,实现数据采集和远程控制。测试设备包括示波器、电子负载、电源、万用表等,这些设备通过纳米BOX连接到云测试平台上…

力扣刷题-栈-逆波兰表达式求值

150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值。 有效的运算符包括 , - , * , / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达…

NSSCTF做题第十页(1)

[GXYCTF 2019]禁止套娃 看源代码也没什么东西&#xff0c;扫一下看看 发现了git泄露 话不多说直接开整 下载下来了 flag.php 还是代码审计 <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){ if (!preg_…

JVM虚拟机:堆结构的逻辑分区

堆内存的逻辑分区 堆内存的逻辑分区如下所示: 堆内存中分为新生代和老年代,二者空间大小1:3。在新生代里面分为两类区域(eden、survivor),三个区域(eden、survivor、survivor),三个区大小比例为8:1:1。 对象存放的位置 栈 当我们new一个对象的时候,首先会将对象…

数据库2。。

创建临时表 create temporary table test1 &#xff08; id int(4) primary key, name char(10), sex char(2) &#xff09;; # 创建临时表一般用于调试&#xff0c;而且临时表创建之后在表目录当中是不显示的&#xff0c;连接退出之后&#xff0c;临时表会被销毁&#xff0c;…

SAP MM学习笔记39 - MRP(资材所要量计划)

这一章开始&#xff0c;离开请求书&#xff0c;学点儿新知识啦。 MRP ( Material Requirement Planning ) - 资材所要量计划。 它的位置在下面的调达周期图上来看&#xff0c;就是右上角的 所要量决定那块儿。 1&#xff0c;MRP(资材所要量计划) 的概要 MRP 的主要目的就是 确…

精密数据工匠:探索 Netty ChannelHandler 的奥秘

通过上篇文章&#xff08;Netty入门 — Channel&#xff0c;把握 Netty 通信的命门&#xff09;&#xff0c;我们知道 Channel 是传输数据的通道&#xff0c;但是有了数据&#xff0c;也有数据通道&#xff0c;没有数据加工也是没有意义的&#xff0c;所以今天学习 Netty 的第四…