【视觉SLAM入门】7.4.后端优化 --- 基于位姿图和基于因子图

news2024/9/23 6:30:36

"议论平恕,无所向背”

  • 1. 位姿图
    • 1.1 具体做法
    • 1.2 小结
  • 2. 因子图
    • 2.1 具体做法
      • 2.1.1 贝叶斯网络
      • 2.1.2 因子图
      • 2.1.3 更具体的因子图
      • 2.1.4 增量的求解方法

引入:

  • 上节BA将位姿和路标都作为优化的节点,H矩阵也告诉我们路标远大于位姿,时长会导致资源等问题。

办法:

  1. 滑动窗口法:保持H固定大小,丢弃历史
  2. 位姿图:不管路标,只管位姿,从BA变成Pose Graph,容易看出资源会少很多很多,如下:
    在这里插入图片描述

1. 位姿图

1.1 具体做法

其实仍然是用构建非线性最小二乘问题然后优化解的,只是优化变量变成了位姿 ξ \xi ξ

  • 假设,位姿 ξ i \xi_i ξi 经过运动 Δ ξ i j \Delta \xi_{ij} Δξij 变到了 ξ j \xi_j ξj ,根据李群李代数知识,有如下等式:

Δ ξ i j = ξ i − 1 ∘ ξ j = l n ( e x p ( − ξ i ) ^    e x p ( ξ j ^ ) ) ˇ \Delta \xi_{ij} = \xi_i^{-1} \circ \xi_j = ln(exp(-\xi_i)\hat{} \; exp(\xi_j \hat{})) \v{} Δξij=ξi1ξj=ln(exp(ξi)^exp(ξj^))ˇ

用李群表示则如下:

Δ T i j = T i − 1 T j \Delta T_{ij} = T_i^{-1} T_j ΔTij=Ti1Tj

T i j T_{ij} Tij 右移:
在这里插入图片描述
求它关于优化变量 ξ i \xi_i ξi ξ j \xi_j ξj 的导数,按照李群李代数的方法,中间过程略,最终构建的总体目标函数如下:

min ⁡ ξ 1 2 ∑ i , j ∈ ε e i j T Σ i j − 1 e i j \min\limits_{\xi} \frac{1}{2} \sum\limits_{i,j \in \varepsilon} e_{ij}^T \Sigma^{-1}_{ij}e_{ij} ξmin21i,jεeijTΣij1eij

这里的 ε \varepsilon ε 就是所有边的集合,二范数含义就是平方项。关于这个问题的求解,我们可以用G-N,L-M等之前用的很多。略。

1.2 小结

自从PTAM提出来以后,后端优化没必要实时性了;人们将前后端分开作两个线程–跟踪和建图。
前段需要实时响应视频速度,如每秒30HZ,而后端优化只要完成后将结果返回给前端即可,所以实时性没必要了。

2. 因子图

2.1 具体做法

在介绍因子图的做法前,要先了解贝叶斯网络。

2.1.1 贝叶斯网络

直接用一个动态的贝叶斯网络来表达我们的SLAM的运动和观测方程:

在这里插入图片描述

  • x x x 表示位姿节点
  • u u u 输入量节点
  • l l l 路标节点
  • z z z 观测数据节点
  • 箭头表示依赖关系,比如 x 2 x_2 x2 在运动方程中就依赖于 u 2 u_2 u2 x 1 x_1 x1, 图中也是这么标注的。
  • 一次观测或者一次运动实际上是给出的条件概率关系:

P ( x 3 ∣ x 2 , u 3 ) P ( z 1 ∣ x 1 , l 1 ) P(x_3|x_2, u_3) \qquad\quad P(z_1|x_1,l_1) P(x3x2,u3)P(z1x1,l1)

图绘制完,我们后端优化的目标就是—不断调整贝叶斯网络中随机变量的取值,使得整个网络的后验概率最大化:

{ x , l } ∗ = a r g m a x ( x 0 ) ∏ P ( x k ∣ x k − 1 , u k ) ∏ P ( z k ∣ x i , l j ) \{x,l\}^* = arg max(x_0) \prod P(x_k|x_{k-1}, u_k) \prod P(z_k|x_i, l_j) {x,l}=argmax(x0)P(xkxk1,uk)P(zkxi,lj)


我们发现要做这个公式,里边的乘积会很多,所以将因子化为节点,会更直观,就得到了—因子图

2.1.2 因子图

根据上边的公式,可以重新结合公式和概率公式绘制网络,得到因子图:

在这里插入图片描述

  • 圆圈: 变量节点
  • 方块: 因子节点

此时要解决因子乘积最大化的问题,通常,取所有因子的条件概率为高斯分布的形式,则运动数据和观测数据符合:

P ( x k ∣ x k − 1 ) = N ( f ( x k − 1 , u k ) , R k ) P ( z k j ∣ x k , l j ) = N ( h ( x k , l j ) , Q k j ) P(x_k|x_{k-1}) = N(f(x_{k-1}, u_k), R_k)\qquad P(z_{kj}|x_k, l_j) = N(h(x_k, l_j), Q_{kj}) P(xkxk1)=N(f(xk1,uk),Rk)P(zkjxk,lj)=N(h(xk,lj),Qkj)

同样的,它的解法—因子图优化,和之前的类似,也是用GN,LM等。

2.1.3 更具体的因子图

在实际中,我们可能不止有相机,还有其他先验信息—比如,GPS等,它们测到的点是确定的,也就是这些点的先验信息知道了,就可以在图中添加它们的先验信息了,还有编码器,IMU等。如下:

在这里插入图片描述

2.1.4 增量的求解方法

无论怎么求,最后都会落到这一步:

H Δ x = g H \Delta x = g HΔx=g

但是,当新的节点和新的边加入,它的所有节点更新量就要重新计算一次更新量。
对资源占用很大。我们继续分析因子图:

  • 按照里程计的方式添加节点,在因子图中只有最后一个与之相连的节点会受影响。(实际上是接近的影响大一点)
  • 那么我们只需要在有新的变量和因子加入时,分析它和因子图的连接和影响关系:
      1. 如果按照回环检测方式添加,回环开始到这一帧这一段的节点都受影响,都要调整
      1. 如果只添加一个任意节点,则影响区域几乎只作用于离他最近的点

如下:
在这里插入图片描述

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

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

相关文章

初识Mybatis(二)动态SQL、缓存和逆向工程

动态SQL Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的痛点问题。 (比如多条件查询的设置,实现判空等) 1、if 创建DynamicSQLMapper接口,DynamicSQL…

C语言基础知识点(六)二维数组指针和地址

#include <stdio.h>int main() {int a[2][3] {2, 4, 6,8, 10, 12};printf("a:%p, a1:%p\n", a, a 1); // 相差3*sizeof&#xff08;int&#xff09;12&#xff0c;二维数组名是一个指向每一行的指针&#xff0c;a:0061FF08, a1:0061FF14prin…

Redis Part1

单体架构&#xff1a;一台Web服务器、一台数据库服务器。 1.了解NoSql 什么是Nosql&#xff1f; NoSQL&#xff0c;即Not-Only-SQL&#xff0c;意思就是我们干事情不能只用SQL&#xff0c;泛指非关系型的数据库&#xff01;NoSQL定位&#xff1a;作为关系型数据库的补充&am…

信息安全三级概述

信息安全三级概述

C语言之const

C语言之const const修饰全局变量 此时全局变量只能使用但是不能修改&#xff0c; 如果直接拿全局变量修改值&#xff0c;编译直接报错 如果使用全局变量的地址修改值&#xff0c;运行时程序异常结束 const修饰普通局部变量 可以读取变量的值 不能直接通过变量进行修改值&a…

开源库源码分析:Okhttp源码分析(一)

开源库源码分析&#xff1a;OkHttp源码分析 导言 接下来就要开始分析一些常用开源库的源码了&#xff0c;作为最常用的网络请求库&#xff0c;OkHttp以其强大的功能深受Android开发者的喜爱&#xff08;比如说我&#xff09;&#xff0c;还有对该库进行二次封装而成的热门库&a…

为何红黑树在B/B+树之上仍然占据重要地位?

为何红黑树在B/B树之上仍然占据重要地位&#xff1f; 引言二、红黑树和B/B树的基本原理2.1、红黑树的特点和性质2.2、B/B树的特点和性质2.3、红黑树和B/B树的比较 三、B/B树相对于红黑树的优势四、红黑树仍然占据重要地位的原因总结 博主简介 &#x1f4a1;一个热爱分享高性能服…

成都营运《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作

成都营运《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作

【深度学习】 Python 和 NumPy 系列教程(廿七):Matplotlib详解:3、多子图和布局:散点矩阵图(Scatter Matrix Plot)

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 3、多子图和布局 1. subplot()函数 2. subplots()函数 3. 散点矩阵图&#xff08;Scatter Matrix Plot&#xff09; 一、前言 Python是一种高级编程语言&#xff0c;由Guido van Rossum于…

2327. 知道秘密的人数;1722. 执行交换操作后的最小汉明距离;2537. 统计好子数组的数目

2327. 知道秘密的人数 核心思想&#xff1a;动态规划&#xff0c;每天的人可以分为三种&#xff0c;可分享秘密的人&#xff0c;不可分享秘密的人&#xff0c;忘记秘密的人。定义f[i]为第i天可分享秘密的人&#xff0c;那么第(idelay ,iforget)天&#xff0c;会增加f[i]个可分…

广州口腔医院种植牙-广东省爱牙工程公益种牙,获湾区群众点赞

广州种植牙价格表-自2017年成立以来,广东省爱牙工程一直坚持以公益惠民为宗旨、公益种牙为服务方向,针对群众普遍存在的口腔健康问题,开展形式多样的公益性口腔医疗惠民活动。 广州种植牙费用表-日前,广东省爱牙工程“种植牙惠民行动”第二十季已正式启动。据广东省爱牙工程官方…

DataGrip 2023 年下载、安装教程、亲测可用

文章目录 前言1. 下载2. 安装3、DataGrip 常用操作4 推荐阅读 前言 DataGrip 是 JetBrains 发布的多引擎数据库环境&#xff0c;支持 MySQL 和 PostgreSQL&#xff0c;Microsoft SQL Server 和 Oracle&#xff0c;Sybase&#xff0c;DB2&#xff0c;SQLite&#xff0c;还有 Hy…

窜货链接的有效治理流程

当商跨区域销售时&#xff0c;但产生了窜货&#xff0c;窜货的根本是因为低价&#xff0c;虽然品牌都会禁止经销商窜货销售&#xff0c;但为了获得更多利润&#xff0c;很多经销商还是会悄悄做着窜货销售的行为&#xff0c;而窜货不仅会破坏渠道的正常发展&#xff0c;同时还会…

第六章 图 十、关键路径

开始顶点&#xff08;源点)&#xff1a; 在AOE网中仅有一个入度为0的顶点&#xff0c;称为开始顶点&#xff08;源点)&#xff0c;它表示整个工程的开始; 结束顶点&#xff08;汇点)&#xff1a; 也仅有一个出度为0的顶点&#xff0c;称为结束顶点&#xff08;汇点)&#xf…

Postman应用——初步了解postman

Postman 是一个用于构建和使用 API 的 API 平台&#xff0c;Postman 简化了 API 生命周期的每个步骤并简化了协作&#xff0c;可以更快地创建更好的 API。 Postman 包含一个基于Node.js的强大的运行时&#xff0c;允许您向请求&#xff08;request&#xff09;和分组&#xff…

redis缓存穿透、击穿、雪崩介绍

缓存穿透 概念 缓存穿透指某一特定时间批量请求打进来并访问了缓存和数据库都没有的key&#xff0c;此时会直接穿透缓存直达数据库&#xff0c;从而造成数据库瞬时压力倍增导致响应速度下降甚至崩溃的风险&#xff1b; 解决方案 一、通过布隆过滤器解决 原理&#xff1a;将…

关于content-type的理解

一.content-type的结论 告诉后端传过去的数据是什么类型的数据 二.没有请求体 (1)没有请求体的情况下content-type没有意义。 (2):图示 里面是没有请求体的 (3)有请求体的情况 二.常见的三种方式 (1)application/x-www-form-urlencoded(默认) 参数的表现形式: 传递之前可以…

ESIM实战文本匹配

引言 今天我们来实现ESIM文本匹配&#xff0c;这是一个典型的交互型文本匹配方式&#xff0c;也是近期第一个测试集准确率超过80%的模型。 我们来看下是如何实现的。 模型架构 我们主要实现左边的ESIM网络。 从下往上看&#xff0c;分别是 输入编码层(Input Ecoding) 对前…

变压器寿命预测(python代码,Logistic Regression模型预测效果一般,可以做对比实验)

1.数据来源官网&#xff1a;Data for: Root cause analysis improved with machine learning for failure analysis in power transformers - Mendeley Data 点Download All 10kb即可下载数据 2.下载下来后是这样 每一列的介绍&#xff1a; Hydrogen 氢气&#xff1b; Oxyge…

低代码开源项目整理

低代码是基于可视化和模型驱动理念&#xff0c;结合云原生与多端体验技术&#xff0c;它能够在多数业务场景下实现大幅度的提效降本&#xff0c;为专业开发者提供了一种全新的高生产力开发范式。下面就来分享几个值得学习和使用的前端低代码开源项目&#xff0c;更深入地了解什…