VINS-Mono-后端优化 (三:视觉雅可比推导)

news2024/11/27 12:45:52

用逆深度是因为这样可以在优化中从优化3个变量降低到1个,降低优化的维度加快求解速度
用逆深度是因为当距离很远的时候, 1 x \frac{1}{x} x1 x x x 就会无穷大,而3D点很近的情况也一般不会有,这也是为了数值稳定性

用逆深度的话就要和其中一帧进行绑定,这个就是和观测到该点的第一帧进行绑定,这样才能表示一个3D点信息

划窗中维护的全部都是IMU下的位姿,所以相机要通过外参变换到IMU坐标系下

在这里插入图片描述
这里就构成了视觉误差,需要求关于优化变量的雅可比矩阵,这里约束了第 i i i 帧和第 j j j 帧的 IMU 的姿态,同时还会优化相机和IMU的外参,这个也是紧耦合的特点之一(上一节同时优化 IMU预积分自身的零偏Ba也是紧耦合特点之一),3D点(逆深度)也是要优化,总共就是4个参数

转换公式如下:
i i i 帧归一化坐标系 -> 第 j j j 帧相机系, 1 λ \frac{1}{\lambda} λ1,就是深度, λ \lambda λ 是逆深度
在这里插入图片描述
将旋转和平移分开后如下:
在这里插入图片描述

将刚刚第 i i i 帧相机系下的3D点进行归一化,然后和光流追踪到的匹配点进行残差计算,这就获得了视觉重投影误差
在这里插入图片描述

计算残差对优化量的雅可比

有带时间延时估计的雅可比计算和不带时间估计的雅可比计算
这里先讲不带时间延时的雅可比计算

这里的误差项是2维的,坐标点是3维的
要求误差对旋转的雅可比只能通过链式求导的方式
∂ r ∂ p j ⋅ ∂ p j ∂ x \frac{\partial r}{\partial p_{j}}·\frac{\partial p_{j}}{\partial x} pjrxpj

∂ r ∂ p j \frac{\partial r}{\partial p_{j}} pjr 是2×3维的,对平移 x , y , z x,y,z x,y,z 进行求导
= [ 1 z 0 − x z 2 0 1 z − y z 2 ] =\begin{bmatrix}\frac{1}{z}&0&-\frac{x}{z^{2}} \\ 0&\frac{1}{z}&-\frac{y}{z^{2}} \end{bmatrix} =[z100z1z2xz2y]

这里的误差也有协方差矩阵,提点的置信度是设定为1.5个像素不变
残差也得乘上置信度

计算 p j p_{j} pj T T T 的雅可比

平移 x , y , z x,y,z x,y,z 的公式为
在这里插入图片描述

T T T 包含旋转 R R R 和平移 t t t

i i i 时刻求导

i i i 时刻的变量也是要优化的量,所以当然也要求导

p w b i p_{wb_{i}} pwbi 求导

∂ p j ∂ p w b i = R b c T ⋅ R w b j T \frac{\partial p_{j}}{\partial p_{wb_{i}}}=R^{T}_{bc}·R^{T}_{wb_{j}} pwbipj=RbcTRwbjT

R w b i R_{wb_{i}} Rwbi 求导

∂ p j ∂ R w b i \frac{\partial p_{j}}{\partial R_{wb_{i}}} Rwbipj
先把公式中有 R w b i R_{wb_{i}} Rwbi 的项提取出来

= R b c T R w b j T R w b i ( R b c P c i + p b c ) =R^{T}_{bc}R^{T}_{wb_{j}}R_{wb_{i}}(R_{bc}P^{c_{i}}+p_{bc}) =RbcTRwbjTRwbi(RbcPci+pbc)
= A R w b i b =AR_{wb_{i}}b =ARwbib

后面那一串 b b b 乘完后是向量,所以可以对李代数进行扰动求导(纯旋转矩阵是不能对李代数求导的,因为矩阵无法对向量求导,这里是乘完后是个向量,所以可以用向量来表示旋转的扰动量,然后用导数的定义来进行求导)

∂ A R w b i b ∂ ϕ = A R w b i e x p ( ϕ ∧ ) b − A R w b i b ϕ \frac{\partial AR_{wb_{i}}b}{\partial \phi}=\frac{AR_{wb_{i}}exp(\phi^{\wedge})b-AR_{wb_{i}}b}{\phi} ϕARwbib=ϕARwbiexp(ϕ)bARwbib
= A R w b i ( I + ϕ ∧ ) b − A R w b i b ϕ =\frac{AR_{wb_{i}}(I+\phi^{\wedge})b-AR_{wb_{i}}b}{\phi} =ϕARwbi(I+ϕ)bARwbib
= A R w b i ϕ ∧ b ϕ =\frac{AR_{wb_{i}}\phi^{\wedge}b}{\phi} =ϕARwbiϕb
根据反对成矩阵的性质
= − A R w b i b ∧ ϕ ϕ =\frac{-AR_{wb_{i}}b^{\wedge}\phi}{\phi} =ϕARwbibϕ
= − A R w b i b ∧ =-AR_{wb_{i}}b^{\wedge} =ARwbib

那个信息矩阵乘完第一步也得乘进来这里这个第2步的雅可比矩阵

j j j 时刻进行求导

p w b j p_{wb_{j}} pwbj 求导

∂ p j ∂ p w b j = − R b c T ⋅ R w b j T \frac{\partial p_{j}}{\partial p_{wb_{j}}}=-R^{T}_{bc}·R^{T}_{wb_{j}} pwbjpj=RbcTRwbjT

R w b j R_{wb_{j}} Rwbj 求导

把和 R w b j R_{wb_{j}} Rwbj 有关的项提取出来
= R b c T R w b j T ( R w b i R b c P c i + R w b i p b c + p w b i − p w b j ) =R^{T}_{bc}R^{T}_{wb_{j}}(R_{wb_{i}}R_{bc}P^{c_{i}}+R_{wb_{i}}p_{bc}+p_{wb_{i}}-p_{wb_{j}}) =RbcTRwbjT(RwbiRbcPci+Rwbipbc+pwbipwbj)
= A R w b j T b =AR^{T}_{wb_{j}}b =ARwbjTb

R w b j T R^{T}_{wb_{j}} RwbjT 是只能左乘的,但是我们现在要算他右乘的扰动方向,因为方向会不同,用左乘的求导结果加个负号就是右乘的结果,这里推导直接用右乘,所以要加个逆把这个转置消掉来进行推导
= A ( R w b j e x p ( ϕ ∧ ) ) − 1 b − A ( R w b j ) − 1 b =A(R_{wb_{j}}exp(\phi^{\wedge}))^{-1}b-A(R_{wb_{j}})^{-1}b =A(Rwbjexp(ϕ))1bA(Rwbj)1b
= A ( I − ϕ ∧ ) R w b j T b − A ( R w b j ) − 1 b =A(I-\phi^{\wedge})R^{T}_{wb_{j}}b-A(R_{wb_{j}})^{-1}b =A(Iϕ)RwbjTbA(Rwbj)1b
= − A ϕ ∧ R w b j T b =-A\phi^{\wedge}R^{T}_{wb_{j}}b =AϕRwbjTb
= A ( R w b j T b ) ∧ ϕ =A(R^{T}_{wb_{j}}b)^{\wedge}\phi =A(RwbjTb)ϕ
消去 ϕ \phi ϕ
= A ( R w b j T b ) ∧ =A(R^{T}_{wb_{j}}b)^{\wedge} =A(RwbjTb)

后面的 R w b j T b R^{T}_{wb_{j}}b RwbjTb 实际就是 3D 点在 第 j j j 帧 IMU系下的位姿,按照展开前的刚体变换来理解一下就好了

对 IMU-相机 的外参求导$

p b c p_{bc} pbc 求导

= R b c T R w b j T R w b i − R b c T =R^{T}_{bc}R^{T}_{wb_{j}}R_{wb_{i}}-R^{T}_{bc} =RbcTRwbjTRwbiRbcT

R b c R_{bc} Rbc 求导

代码中的 r i c = R b c , t i c = t b c ric=R_{bc},tic=t_{bc} ric=Rbc,tic=tbc Q = R w b Q=R_{wb} Q=Rwb

导数是符合加法的 ( f ( x ) + g ( x ) ) ′ = f ′ ( x ) + g ′ ( x ) (f(x)+g(x))^{'}=f^{'}(x)+g^{'}(x) (f(x)+g(x))=f(x)+g(x)

加法后面的求导结果 = ( R b c T b ) =(R^{T}_{bc}b) =(RbcTb) ,这个推导和上面类似,就不详细写了

加法前面的求导稍微复杂一点
= ( R b c e x p ( ϕ ∧ ) ) − 1 R w b j T R w b i R b c T e x p ( ϕ ∧ ) P c i − R b c T R w b j T R w b i R b c T P c i =(R_{bc}exp(\phi^{\wedge}))^{-1}R^{T}_{wb_{j}}R_{wb_{i}}R^{T}_{bc}exp(\phi^{\wedge})P^{c_{i}}-R^{T}_{bc}R^{T}_{wb_{j}}R_{wb_{i}}R^{T}_{bc}P^{c_{i}} =(Rbcexp(ϕ))1RwbjTRwbiRbcTexp(ϕ)PciRbcTRwbjTRwbiRbcTPci

下面暂时省略写后面它自身

= ( I − ϕ ∧ ) R b c T R w b j T R w b i R b c T ( I + ϕ ∧ ) P c i =(I-\phi^{\wedge})R^{T}_{bc}R^{T}_{wb_{j}}R_{wb_{i}}R^{T}_{bc}(I+\phi^{\wedge})P^{c_{i}} =(Iϕ)RbcTRwbjTRwbiRbcT(I+ϕ)Pci
= ( I − ϕ ∧ ) A ( I + ϕ ∧ ) P c i =(I-\phi^{\wedge})A(I+\phi^{\wedge})P^{c_{i}} =(Iϕ)A(I+ϕ)Pci
= ( A − ϕ ∧ A ) ( I + ϕ ∧ ) P c i =(A-\phi^{\wedge}A)(I+\phi^{\wedge})P^{c_{i}} =(AϕA)(I+ϕ)Pci
= ( A + A ϕ ∧ − ϕ ∧ A − ϕ ∧ A ϕ ∧ ) P c i − A P c i =(A+A\phi^{\wedge}-\phi^{\wedge}A-\phi^{\wedge}A \phi^{\wedge})P^{c_{i}}-AP^{c_{i}} =(A+AϕϕAϕAϕ)PciAPci

其中 ϕ ∧ A ϕ ∧ \phi^{\wedge}A \phi^{\wedge} ϕAϕ 是二阶,是相对于一阶的无穷小,这里只讨论一阶的展开且 ϕ \phi ϕ 本身就是小量,所以直接约掉

= ( A ϕ ∧ − ϕ ∧ A ) ⋅ P c i =(A\phi^{\wedge}-\phi^{\wedge}A)·P^{c_{i}} =(AϕϕA)Pci
= − A P ∧ ϕ + ( A P ) ∧ ϕ =-AP^{\wedge}\phi+(AP)^{\wedge}\phi =APϕ+(AP)ϕ
约掉 ϕ \phi ϕ
= − A P ∧ + ( A P ) ∧ =-AP^{\wedge}+(AP)^{\wedge} =AP+(AP)

对逆深度 λ \lambda λ 求导

∂ p j ∂ P c i ∂ P c i ∂ λ \frac{\partial p_{j}}{\partial P^{c_{i}}}\frac{\partial P^{c_{i}}}{\partial \lambda} PcipjλPci

前面的 ∂ p j ∂ P c i = R b c T R w b j T R w b i R b c \frac{\partial p_{j}}{\partial P^{c_{i}}}=R^{T}_{bc}R^{T}_{wb_{j}}R_{wb_{i}}R_{bc} Pcipj=RbcTRwbjTRwbiRbc

P c i = 1 λ ⋅ p P^{c_{i}}=\frac{1}{\lambda} ·p Pci=λ1p p p p 是归一化相机系下的3D点

∂ P c i ∂ λ = − 1 λ 2 ⋅ p \frac{\partial P^{c_{i}}}{\partial \lambda}=-\frac{1}{\lambda^{2}}·p λPci=λ21p

这个 − 1 λ 2 -\frac{1}{\lambda^{2}} λ21 是个系数,移到哪里都可以

零空间漂移处理

优化的时候会固定滑窗中的第一帧的xyz和yaw角,因为IMU约束的是相对位姿,且IMU的4个不可观自由度就是 y a w 、 x 、 y 、 z yaw、x、y、z yawxyz,绝对位姿是没有约束的,所以可能会产生在 4自由度的 0 空间漂移的情况,fusion中的GPS就是约束绝对位姿的。

VINS中的固定是先计算第一帧的yaw和xyz的偏移量,然后把后面的帧都减去这个偏移量,偏移回之前的位置,这样的做法就类似ORB中的固定第一帧的位姿,不过这里是减去第一帧的偏移量,其实就是滑窗中的整条轨迹调整回偏移前的位置,这样就保证不受 0 空间的影响。

和 yaw相关的量都会受影响,就是和旋转向量的量都会受影响, P , V P,V P,V 受影响,零偏 B a , B g Ba,Bg Ba,Bg ,外参 T b c Tbc Tbc 不受影响

前面会把旋转矩阵变成rpy,然后把yaw的角度差取出来构成新的偏移旋转矩阵,因为只是yaw发生漂移

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务治理

微服务治理 什么是服务治理 服务治理 是一种方法和实践,用于管理和监控分布式系统中的服务。它旨在确保服务能够在整个生命周期内可靠地运行、可维护、可扩展和符合业务需求。服务治理涉及一系列的实践、策略和工具,用于管理和优化服务的交付和运行。 …

强化学习 - DQN及进化过程(Double DQN,Dueling DQN)

1.DQN 1.1概念 DQN相对于Q-Learning进行了三处改进: 1.引入神经网络:如下图所示希望能从状态A中提取Q(s,a) 2.经验回放机制:连续动作空间采样时,前后数据具有强关联性,而神经网络训练时要求数据之间具有独立同分布特性…

GZ038 物联网应用开发赛题第4套

2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第4套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考评…

双休日做什么副业?适合不同人群的副业赚钱方法

双休日是大多数人可以用来兼职或者做副业的时间,它是大家可以利用的宝贵时光。通过合理规划和努力工作,双休日的副业可以带来额外的收入,并且可以适应不同人群的需求和兴趣。那么,具体来说,适合不同人群的副业赚钱方法…

什么是特权会话管理

特权会话是由具有管理权限的用户在访问 IT 基础架构中的系统、设备或应用程序(本地或远程)时启动的 Internet 会话,包括在该会话期间执行的所有活动。 特权会话可以是数据库或安全管理员,通过 RDP 或 SSH 会话访问数据中心的机密…

Docker 安装与优化

一、安装Docker 1、关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 02、安装依赖包 yum -y install yum-utils device-mapper-persistent-data lvm2#解释 yum-utils #提供了yum-config-manager工具 device mapper #是linux内核中支持逻辑卷…

高压MOS/低压MOS在单相离线式不间断电源上的应用-REASUNOS瑞森半导体

一、前言 单相离线式不间断电源只是备援性质的UPS,市电直接供电给用电设备再为电池充电,一旦市电供电品质不稳或停电时,市电的回路会自动切断,电池的直流电会被转换成交流电接手供电的任务,直到市电恢复正常。UPS只有…

Zeitgeist ZTG Token以及其预测市场加入Moonbeam生态

波卡上的首选多链开发平台Moonbeam宣布与Zeitgeist达成XCM集成,将ZTG Token引入Moonbeam。此集成将使波卡内的Moonbeam和Zeitgeist网络之间的流动性得以流动,并通过Moonbeam的互连合约实现远程链集成。 Zeitgeist是一个基于波卡的Substrate区块链框架构…

Flink SQL自定义标量函数(Scalar Function)

使用场景: 标量函数即 UDF,⽤于进⼀条数据出⼀条数据的场景。 开发流程: 实现 org.apache.flink.table.functions.ScalarFunction 接⼝实现⼀个或者多个⾃定义的 eval 函数,名称必须叫做 eval,eval ⽅法签名必须是 p…

前端训练营:1v1私教,帮你拿到满意的offer

Hello,大家好,我是 Sunday。 熟悉我的小伙伴都知道,我最近这几年一直在做前端教育相关的工作。因为这类工作的原因,让我深刻的感受到这几年整个互联网行业的变化。 大量的公司裁员,导致找工作的人急速增加&#xff0…

解压游戏资源,导出游戏模型

游戏中有很多好看的角色,地图等等资源。 你有没有想过,把他们导出到自己的游戏中进行魔改又或则玩换肤等操作呢? 相信很多同学都喜欢拳皇中的角色, 那么我们今天就拿拳皇15举例子,导出他的资源。 首先要先安装好这个…

算法:穷举,暴搜,深搜,回溯,剪枝

文章目录 算法基本思路例题全排列子集全排列II电话号码和字母组合括号生成组合目标和组合总和优美的排列N皇后有效的数独解数独单词搜索黄金矿工不同路径III 总结 算法基本思路 穷举–枚举 画出决策树设计代码 在设计代码的过程中,重点要关心到全局变量&#xff…

软文推广优化技巧:如何写出有创意的文案

今天媒介盒子要给大家分享的干货内容就是:如何写出有创意的文案。 时代背景会改变,大众的趣味焦点也会转移,同样再好的文案也会失效,但文案背后的触发机制不会变。下面是能够使广告文案起作用的关键因素: 一、 研究产…

偶数科技亮相2023中国程序员节——数据库技术高峰论坛

2023年10月24日,由中国软件行业协会主办的“中国程序员节”在北京、深圳、宁波多地同时召开,其中数据库技术高峰论坛在北京举办,偶数科技亮相本次论坛并分享了题为《大模型、实时需求推动湖仓平台走向开放》的主题演讲。 国际局势复杂、科技竞…

面包机上架亚马逊美国站UL1026测试报告办理

面包机(又称烤面包机)是一种家用电器,用于制作面包、烤饼等食品。在亚马逊美国站销售面包机时,可能需要提供 UL 报告以确保产品安全性。UL1026 是适用于面包机的美国安全标准。 面包机UL1026报告是按照美国国家电气规范NFPA 70所规…

Django生鲜蔬菜采购系统-计算机毕设 附源码 24033

Django生鲜蔬菜采购系统 目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2 生鲜蔬菜采购系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流…

Bean_AOP

Bean 源码 https://github.com/cmdch2017/Bean_IOC.git 获取Bean对象 BeanFactory Bean的作用域 第三方Bean需要用Bean注解 比如消息队列项目中,需要用到Json的消息转换器,这是第三方的Bean对象,所以不能用Component,而要用B…

【Mysql】查询mysql的版本

目录 cmd命令查询 mysql -- help(命令) mysql -u root -p(命令) 数据库管理工具查询 select version(); cmd命令查询 mysql -- help(命令) mysql -u root -p(命令) 执行该命令并且输入数据库密码 数据库管理工具查询 selec…

C++之旅(学习笔记)第6章 基本操作

C之旅(学习笔记)第6章 基本操作 6.1 基本操作 class X{ public:X(Sometype); // "普通的构造函数": 创建一个对象X(); // 默认构造函数X(const X&); // 拷贝构造函数X(X&&); // 移动构造函数X& operator(const …

广州华锐互动:VR互动实训内容编辑器助力教育创新升级

随着科技的飞速发展,教育领域也正在经历一场深刻的变革。其中,虚拟现实(VR)技术为教学活动提供了前所未有的便利和可能性。在诸多的VR应用中,VR互动实训内容编辑器无疑是最具潜力和创新性的一种。广州华锐互动开发的这款编辑器以其独特的功能…