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+1c0−Rbk+1c0⋅Pcb)=Rc0bk[sPckc0−Rbkc0⋅Pcb+Rc0bk⋅vbk⋅Δt−21gc0Δ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} α−Pcb⋅Rc0bk⋅Rbk+1c0⋅Pcb=Rc0bk(Pck+1c0−Pckc0)s−vbkΔ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)+β Rc0bk⋅Vbk+1c0=Rc0bk(Vbkc0−gc0⋅Δ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)+β =>Rc0bk⋅Rbk+1c0⋅Vbk+1=Rc0bk(Rbkc0⋅Vbk−gc0⋅Δ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+Rc0bk⋅Rbk+1c0⋅Vbk+1+Rc0bk⋅gc0⋅Δ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 b∈10×1,实际上由于有多组数据,10 会变成 N,速度,重力都是3维的,尺度因子是1,所以每一组就是 10
有多个数据则矩阵写为,通过对每一组数据进行矩阵分块填入这个大矩阵里面,然后一次性求解出所有速度、重力和尺度
求解后获得重力向量
然后根据当地的重力先验来对刚才算出来的重力进行修正
相关文章:

VINS-Mono-VIO初始化 (五:视觉惯性对齐求解)
整体思想就是根据预积分的公式,把已知量和未知量各放到一边,因为前面的数据都是变换到 c 0 c_{0} c0下的,不是真正意义上和重力对齐的世界坐标,然后位移和速度的预积分中会用到加速度计获取的重力加速度g,但是这个重…...
详解Vue——的双向数据绑定是如何实现的?
引言 在现代的Web开发中,数据绑定是一个非常重要的概念。Vue.js是一种流行的JavaScript框架,它提供了一种简单而强大的方式来实现双向数据绑定。本文将介绍Vue的双向数据绑定原理,并提供相关代码示例。 什么是双向数据绑定? 双向…...

正则表达式引擎比较(翻译自:A comparison of regex engines)
原文: A comparison of regex engines – Rust Leipzig 引言 正则表达式(或简称regex)通常用于模式搜索算法。 有许多不同的正则表达式引擎提供不同的表达式支持、性能约束和语言绑定。 基于 John Maddock 之前的工作 (regex comparison)和…...

后端Linux软件安装大全[JDK、Tomcat、MySQL、Irzsz、Git、Maven、Redis、Nginx...持续更新中]
文章目录 前言1.软件安装方式2.安装jdk3.安装Tomcat4.安装MySQL5.安装lrzsz6. 安装Git7. 安装Maven8. 安装Redis9. 安装Nginx 总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新…...
C++ Dijkstra 最短路径求解算法的两种实现方案
迪杰斯特拉算法(Diikstra) 是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。 核心思想,搜索到某一个顶点后,更新与其相邻顶点的权重。顶点权重的数据含义表示从起始点到此点的最短路径长度(也就是经过的…...

因存在色情内容,夸克被罚50万元
媒体经济的繁荣、自媒体、直播等各种形式的信息传播疯狂发展,但是各种形式的信息资源大规模生产时,“色情”,“暴力”的图像和视频不可控的滋生,特别是某些 APP 或浏览器。一旦打开,满屏都是“哥哥,快来啊”…...

汽车EDI:福特Ford EDI项目案例
项目背景 福特(Ford)是世界著名的汽车品牌,为美国福特汽车公司(Ford Motor Company)旗下的众多品牌之一。此前的文章福特FORD EDI需求分析中,我们已经了解了福特Ford EDI 的大致需求,本文将会介…...

正则表达式的使用实例
正则表达式的使用实例 1- 表示2- 实例 1- 表示 1, [:digit:] 表示0-9全部十个数字 //等价于 0123456789, 而不等价于[0123456789] 2, [[:digit:]] 表示任意一个数字 \{m,n\} 表示其前面的字符出现最少m次,最多n次的情况 \{3,\} 其前面的字符出…...

STM智能小车——OLED实现测速小车
目录 1. 测速模块 2. 测试原理和单位换算 3. 定时器和中断实现测速开发和调试代码 4. 小车速度显示在OLED屏 1. 测速模块 用途:广泛用于电机转速检测,脉冲计数,位置限位等。有遮挡,输出高电平;无遮挡,输出低电平接线…...
pod基本概念
目录 pod基本概念 pause容器 Pod分类: Pod容器的分类 1、基础容器(infrastructure container) 2、初始化容器(initcontainers) 3、应用容器(Maincontainer) 镜像拉取策略(im…...
SQL Server 中定时调度调用存储过程
要在SQL中定时调度调用存储过程,你可以使用SQL Server代理(如果你正在使用SQL Server数据库)。下面是一些步骤来配置SQL Server代理以定时调度调用存储过程: 打开SQL Server Management Studio (SSMS) 并连接到你的SQL Server实例…...

SpringCloud(三) Ribbon负载均衡
SpringCloud(二) Eureka注册中心的使用-CSDN博客 在SpringCloud(二)中学习了如何通过Eureka实现服务的注册和发送,从而通过RestTemplate实现不同微服务之间的调用,加上LoadBalance注解之后实现负载均衡,那负载均衡的原理是什么呢? 目录 一, 负载均衡 1.1 负载均衡原理 1.2 源…...

vue2:路由前置守卫无法获取到this.$store.state.xxx
在获取到vuex的数据时候,想在router目录下的index.js文件去获取到vuex仓库中声明的全局变量,但是通过this.$store.stote.xxx去获取的时候,报错提示:$store未定义 一、store/index.js const store new Vuex.Store({state: {// 属…...

Unity的碰撞检测(五)
温馨提示:本文基于前一篇“Unity的碰撞检测(四)”继续探讨两个游戏对象具备刚体的BodyType均为Dynamic,但是Collision Detection属性不同的碰撞检测,阅读本文则默认已阅读前文。 (一)测试说明 在基于两…...
Flutter笔记:Flutter的应用生命周期状态(lifecycleState)管理
Flutter笔记 Flutter的应用生命周期状态(lifecycleState)管理 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/…...
代碼隨想錄算法訓練營|第五十四天|300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组。刷题心得(c++)
讀題 300.最长递增子序列 看完代码随想录之后的想法 思想上很簡單,dp[i]表示i之前的包括i的numbers[i]節尾的最長上升子序列的長度 並且透過兩層迴圈,一層遍歷全部,一層遍歷到i,透過比較當前dp[i]還是dp[j] 1哪個比較大&…...

正点原子嵌入式linux驱动开发——Linux 串口RS232/485/GPS 驱动
串口是很常用的一个外设,在Linux下通常通过串口和其他设备或传感器进行通信,根据 电平的不同,串口分为TTL和RS232。不管是什么样的接口电平,其驱动程序都是一样的,通过外接RS485这样的芯片就可以将串口转换为RS485信号…...

HDFS工作流程和机制
HDFS写数据流程(上传文件) 核心概念--Pipeline管道 HDFS在上传文件写数据过程中采用的一种传输方式。 线性传输:客户端将数据写入第一个数据节点,第一个数据节点保存数据之后再将快复制到第二个节点,第二节点复制给…...

CMMI/ASPICE认证咨询及工具服务
服务概述 质量专家戴明博士的名言“如果你不能描述做事情的过程,那么你不知道你在做什么”。过程是连接有能力的工程师和先进技术的纽带,因此产品开发过程直接决定了产品的质量和研发的效率。 经纬恒润可结合多体系要求,如IATF16949\ISO26262…...

【NI-DAQmx入门】计数器
1.计数器的作用 NI产品的计数器一般来说兼容TTL信号,定义如下:0-0.8V为逻辑低电平,2~5V为高电平,0.8-2V为高阻态,最大上升下降时间为50ns。 计数器可以感测上升沿(从逻辑低到逻辑高的转变)和下降…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...