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

用逆深度是因为这样可以在优化中从优化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.mzph.cn/news/137132.shtml

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

相关文章

C语言求解:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位(约瑟夫问题)

完整代码&#xff1a; /* 有n个人围成一圈&#xff0c;顺序排号。从第一个人开始报数&#xff08;从1到3报数&#xff09;&#xff0c;凡报到3的人 退出圈子&#xff0c;问最后留下的是原来第几号的那位*/ #include<stdio.h>//约瑟夫问题 //递推关系f(n)(f(n-1)2)\mod n…

(动手学习深度学习)第13章 计算机视觉---图像增广与微调

13.1 图像增广 总结 数据增广通过变形数据来获取多样性从而使得模型泛化性能更好常见图片增广包裹翻转、切割、变色。 图像增广代码实现

线性代数 | 矩阵运算 加减 数乘 矩阵的幂运算

文章目录 1 矩阵加减和数乘2 矩阵与矩阵的乘法2.1 相乘条件&#xff1a;看中间&#xff0c;取两头2.2 相乘计算方法 3 矩阵的幂3.1 观察归纳法3.2 邻项相消法3.3 化为对角 4 判断是否可逆&#xff08;证明题或者要求求出逆矩阵&#xff09;4.1 直接观察4.2 由定义式推得4.2.1 待…

包教包会:Mysql主从复制搭建

笑小枫的专属目录 一、无聊的理论知识1. 主从复制原理2. 主从复制的工作过程3. MySQL四种同步方式 二、docker下安装、启动mysql1. 安装主库2. 安装从库 三、配置Master(主)四、配置Slave(从)五、链接Master(主)和Slave(从)六、主从复制排错1. 错误&#xff1a;error connectin…

win10 下 ros + Qt 工程CMakeLists.txt

win10 下 ros Qt 工程CMakeLists.txt 系统&#xff1a;win10 ros: melodic Qt: 5.12.12 源码目录: D:\workspace\catkin_qt 示例代码 https://github.com/ncnynl/ros-qt.git 由于示例代码是Qt4 &#xff0c;目前我是用QT5,所以CMakeLists.txt 修改如下 CMakeLists.txt #####…

asp.net core weapi 结合identity完成登录注册

1.安装所需要的nuget包 <PackageReference Include"Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version"6.0.24" /><PackageReference Include"Microsoft.EntityFrameworkCore" Version"6.0.24" /><PackageR…

算法--数据结构

这里写目录标题 本节内容链表与邻接表链表主要思想链表操作初始化在head结点后面插入普通插入删除操作 例子 双链表&#xff08;双向循环链表&#xff09;主要思想操作初始化双向插入删除第k个点 邻接表主要思想 栈和队列栈主要思想主要操作 队列主要思想操作 单调栈与单调队列…

通用工作站设计方案 :807-ORI-S3R500 -多路PCIe3.0的单CPU通用工作站

ORI-S3R500 -多路PCIe3.0的单CPU通用工作站 (研华工业计算机IPC-610&#xff0c;IPC940 升级款) 一、机箱功能和技术指标&#xff1a; 系统 系统型号 ORI-SR500 主板支持 EEB(12*13)/CEB(12*10.5)/ATX(12*9.6)/Mi cro ATX 前置硬盘 最大支持2个3.5寸1个2.5寸SATA …

驱动基石之_tasklet中断下半部_工作队列_中断线程化处理

tasklet中断下半部 linux的中断分为两个部分&#xff1a; 1.中断上半部&#xff1a;在中断上半部期间&#xff0c;不允许被其他中断打断&#xff0c;直到中断上半部的服务函数执行完。 2.中断下半部&#xff1a;中断下半部&#xff0c;在执行中断下半部服务函数的期间&#xf…

10 个适用于 Windows 的最佳 PDF 编辑器,用于轻松编辑 PDF 文件

PDF 是当今最流行的文件格式之一。Adobe 于 1993 年开发了 PDF 文件格式。PDF&#xff08;便携式文档格式&#xff09;主要用于存储复杂的文本文档和电子书。PDF 文件包含固定的布局属性&#xff0c;并且可以存储大量文本和图形。PDF 文件格式主要用于分发大型文档。 使用 PDF…

【中间件篇-Redis缓存数据库03】Redis高级特性和应用(发布 订阅、Stream)

Redis高级特性和应用(发布 订阅、Stream) 发布和订阅 Redis提供了基于“发布/订阅”模式的消息机制&#xff0c;此种模式下&#xff0c;消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道( channel)发布消息&#xff0c;订阅该频道的每个客户端都可以收到该消息。 …

asp.net校园招聘管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 校园招聘管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言开发 应用技术&#xff1a;asp.net c#s…

HackTheBox-Starting Point--Tier 2---Base

文章目录 一 题目二 过程记录2.1 打点2.2 权限获取2.3 横向移动2.4 权限提升 一 题目 Tags Web、Vulnerability Assessment、Custom Applications、Source Code Analysis、Authentication、Apache、PHP、Reconnaissance、Web Site Structure Discovery、SUDO Exploitation、Au…

XOR Construction

思路&#xff1a; 通过题目可以得出结论 b1^b2a1 b2^b3a2 ....... bn-1^bnan-1 所以就可以得出 (b1^b2)^(b2^b3)a1^a2 b1^b3a1^a2 有因为当确定一个数的时候就可以通过异或得到其他所有的数&#xff0c;且题目所求的是一个n-1的全排列 那么求出a的前缀异或和arr之后…

原型制作神器ProtoPie的使用Unity与网页跨端交互

什么是ProtoPie&#xff1f; ProtoPie是一款面向设计师的软件原型设计工具&#xff0c;例如制作App界面交互展示&#xff0c;制作好的原型可以一键发布到Web服务器&#xff0c;就可以浏览器访问。由于其内置了大量常用交互类型&#xff0c;以及"程序化"模块&#xf…

【Redis】掌握篇--Redis与SSM进行整合

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Redis的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Redis与SSM的整合 1.添加Redis依赖 …

Scala爬虫实战:采集网易云音乐热门歌单数据

导言 网易云音乐是一个备受欢迎的音乐平台&#xff0c;汇集了丰富的音乐资源和热门歌单。这些歌单涵盖了各种音乐风格和主题&#xff0c;为音乐爱好者提供了一个探索和分享音乐的平台。然而&#xff0c;有时我们可能需要从网易云音乐上获取歌单数据&#xff0c;以进行音乐推荐…

vscode文件跳转(vue项目)

在 .vue 文件中&#xff0c;点击组件名打开 方式1&#xff1a; 在 vue 组件名上&#xff0c;桉住ctrl 鼠标左键 // 重新打开一个tab 方式2&#xff1a; 在 vue 组件名上&#xff0c;桉住ctrl shift 鼠标左键 // 在右侧拆分&#xff0c;并打开一个tab .vue文件的跳转 按住 …

Python TCP服务端多线程接收RFID网络读卡器上传数据

本示例使用设备介绍&#xff1a;WIFI/TCP/UDP/HTTP协议RFID液显网络读卡器可二次开发语音播报POE-淘宝网 (taobao.com) #python通过缩进来表示代码块&#xff0c;不可以随意更改每行前面的空白&#xff0c;否则程序会运行错误&#xff01;&#xff01;&#xff01;如果缩进不…

MATLAB|风玫瑰图

目录 扫一扫关注公众号 效果图 粉丝给的图&#xff1a; 复刻的图&#xff1a; 其他样式效果&#xff1a; 数据 绘图教程 绘制左边Y轴 绘制主、次网格和主、次刻度的极坐标区域。 添加刮风数据&#xff0c;添加数据和颜色、图列大小映射关系。 颜色条绘制​​​​​​…