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.rhkb.cn/news/187756.html

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

相关文章

Android 图层列表 、 LayerDrawable 、 layer-list \ 改变 seekbar thumb 滑块 的颜色

android 官网 &#xff1a; 图层列表 LayerDrawable / layer-list LayerDrawable 是管理其他可绘制对象数组的可绘制对象。列表中的每个可绘制对象均按照列表顺序绘制。列表中的最后一个可绘制对象绘于顶部。 每个可绘制对象均由单个 <layer-list> 元素内的 <item>…

树之二叉排序树(二叉搜索树)

什么是排序树 说一下普通二叉树可不是左小右大的 插入的新节点是以叶子形式进行插入的 二叉排序树的中序遍历结果是一个升序的序列 下面是两个典型的二叉排序树 二叉排序树的操作 构造树的过程即是对无序序列进行排序的过程。 存储结构 通常采用二叉链表作为存储结构 不能 …

内网如何使用Python第三方库包(举例JustinScorecardPy)

内网如何使用Python第三方库包 一、下载python whl文件(官网有的) 1、第一种方法 要直接下载whl文件&#xff0c;你可以按照以下步骤操作&#xff1a; 首先&#xff0c;访问 https://pypi.org/ 或 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 网站。这两个都是Python的官方…

光刻掩膜版怎么制作的?

光掩膜版基本上是 IC 设计的“主模板”。掩模版有不同的尺寸。常见尺寸为 6 x 6 英寸一般的掩膜版由石英或玻璃基板组成。光掩膜版涂有不透明薄膜。更复杂的掩模版使用其他材料。 一般来说&#xff0c;术语“photo mask”用于描述与 1X 步进机或光刻系统一起使用的“主模板”。…

希尔排序原理

目录&#xff1a; 一、希尔排序与插入排序 1&#xff09;希尔排序的概念 2&#xff09;插入排序实现 二、希尔排序实现 一、希尔排序与插入排序 1&#xff09;希尔排序的概念 希尔排序(Shells Sort)是插入排序的一种又称“缩小增量排序”&#xff08;Diminishing Incremen…

ElasticSearch7.x - HTTP 操作 - 索引操作

创建索引 对比关系型数据库,创建索引就等同于创建数据库 在 Postman 中,向 ES 服务器发 PUT 请求 :http://192.168.254.101:9200/shopping 说明 {"acknowledged"【响应结果】: true, # true 操作成功"shards_acknowledged"【分片结果】: true, # 分片操…

紧急事件,停电导致安森美韩国厂全线停工 | 百能云芯

11月9日的消息报道&#xff0c;全球半导体公司安森美遭遇了一场意外的停电事故&#xff0c;发生在位于韩国的富川晶圆厂&#xff0c;导致整个工厂陷入停工状态&#xff01; 停电事件发生在11月5日&#xff0c;导致富川晶圆厂的产线暂时停工&#xff0c;停电持续了大约20分钟。由…

Mac电脑Visio文件编辑查看软件推荐Visio Viewer for Mac

mac版Visio Viewer功能特色 在Mac OS X上查看Visio绘图和图表 在Mac OS X上轻松查看MS Visio文件 在Mac上快速方便地打开并阅读Visio文件&#xff08;.vsd&#xff0c;.vsdx&#xff09;。 支持通过放大&#xff0c;缩小&#xff0c;旋转&#xff0c;文本选择和复制&#xff0…

DSP开发例程(4): logbuf_print_to_uart

目录 DSP开发例程: logbuf_print_to_uart新建工程源码编辑app.cfgos.cmain.c 调试说明 DSP开发例程: logbuf_print_to_uart SYS/BIOS 提供了 xdc.runtime.Log, xdc.runtime.LoggerBuf 和 xdc.runtime.LoggerSys 这几个模块用于日志记录. 日志信息在 应用程序调试和状态监控中非…

第二十九章 目标检测中的测试模型评价指标(车道线感知)

前言 近期参与到了手写AI的车道线检测的学习中去&#xff0c;以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新&#xff0c;力求完整精炼&#xff0c;引人启示。所需前期知识&#xff0c;可以结合手写AI进行系统的学习。 介绍 自动驾驶的一大前提是保证人的安全…

中国智能驾驶的“突围赛”打响,这家本土厂商为何能成为“先行者”?

中国本土厂商正在成为全球智能汽车产业链的“核心力量”。 根据《高工智能汽车研究院》数据显示&#xff0c;今年1-6月&#xff0c;自主品牌标配L2&#xff08;含L2&#xff09;级辅助驾驶交付新车155.34万辆。其中&#xff0c;搭载中国本土智能驾驶解决方案提供商&#xff08…

Nacos使用指南

Nacos使用指南 1.认识Nacos Nacos是SpringCloudAlibaba的一个组件&#xff0c;遵循SpringCloud规范 2.Nacos的优势 1.支持服务端主动检测服务提供者状态。临时实例采用心跳检测&#xff0c;非临时实例采用主动检测 2.Nacos支持服务列表变更消息推送&#xff0c;消息更加及…

C++入门篇3(类和对象【重点】)

文章目录 C入门篇3&#xff08;类和对象【重点】&#xff09;1、面向过程和面向对象2、类的引入3、类的定义4、类的访问限定符及封装4.1、访问限定符4.2、封装 5、类的作用域6、类的实例化&#xff08;对象&#xff09;7、类对象模型7.1、类对象的存储方式7.2、结构体&#xff…

mysql索引下推

文章目录 什么是索引下推索引下推优化的原理索引下推的具体实践没有使用ICP使用ICP 总结索引下推使用条件相关系统参数 什么是索引下推 索引下推(Index Condition Pushdown&#xff0c;简称ICP)&#xff0c;是MySQL5.6版本的新特性&#xff0c;它能减少回表查询次数&#xff0…

【Proteus仿真】【51单片机】汽车尾灯控制设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED模块等。 主要功能&#xff1a; 系统运行后&#xff0c;系统运行后&#xff0c;系统开始运行&#xff0c;K1键控制左转向灯&#xff1b;…

C# .NET Core API 注入Swagger

C# .NET Core API 注入Swagger 环境 Windows 10Visual Studio 2019(2017就有可以集中发布到publish目录的功能了吧)C#.NET Core 可跨平台发布代码,超级奈斯NuGet 套件管理dll将方法封装(据说可以提高效率,就像是我们用的dll那种感觉)Swagger 让接口可视化编写时间2020-12-09 …

MySQL on duplicate key update用法

基本使用方法 public static final String SQL_TQI_SINK "insert into " ConfigureContext.get(ConfigKeyConstants.MYSQL_TABLE_TQI) " \n" "(mile_km, mile_start_km, mile_start_m, is_out, tqi_alig_l, \n" "tqi_alig_r, tqi_surf_l…

c语言刷题第10周(16~20)

规律&#xff1a; 若多个次数最多按ASCII码顺序输出。 用for循环i取&#xff08;0~26&#xff09; 则输出满足条件的字符串中位置最靠前的那个。 用while循环遍历&#xff08;while&#xff08;a[i]!\0&#xff09;&#xff09; 从键盘输入任意只含有大小写字母的串s&…

22款奔驰S400L升级原厂360全景影像 打破死角

本次星骏汇小许介绍的是22款奔驰S400L升级原厂360全景影像&#xff0c;上帝视角看清车辆周围环境&#xff0c;更轻松驾驶 升级360全景影像系统共有前后左右4个摄像头&#xff0c;分别在车头&#xff0c;车尾&#xff0c;以及两边反光镜下各一个&#xff0c;分别用来采集车头&a…

手写C++ 实现链表的反转、删除、合并

目录 一、手写List成员方法 1.1 打印链表 1.2 删除链表节点 1.3 链表中倒数第k个节点 1.4 反转链表 1.5 合并两个排序链表 二、完整代码 一、C实现链表成员方法 在上一篇博客《手写链表C》&#xff0c;实现了基本的List类。在面试中&#xff0c;经常被问到List如何反转、…