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

"议论平恕,无所向背”

  • 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.mzph.cn/news/76886.shtml

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

相关文章

Python绘图系统16:动态更新tkinter组件

文章目录 前情提要源代码模式输入序列源码 Python绘图系统: 📈从0开始的3D绘图系统📉一套3D坐标,多个函数📊散点图、极坐标和子图自定义控件:极坐标📉绘图风格📉风格控件图表类型和…

rsync远程同步+inotify监控

目录 一、Rsync 简介 1、rsync是什么 2、备份的方式 3、rsync同步方式 4、常用rsync命令 5、配置源的两种表达方法 二、rsync实验 1、本地复制 ​编辑​编辑 2、异地复制 2.1 rsync服务器配置 2.2 rsync客户端配置 2.2.1 普通同步 2.2.2 免密同步 2.2.3 --delet…

EmguCV-C#版本Opencv图像识别和处理

目录 0、简介 1、图像处理 (1)颜色处理 (2)图像差 (3)图像拼接 (4)直方图 (5)颜色空间/通道提取 2、预处理 (1)均衡化 &…

idea2021.1.3版本双击启动,没反应

今天打开电脑,点开idea,界面悬在这里,几秒然后就是没了。然后就一直打不开idea了。 然后又是卸载重装,又是删除缓存文件。我把电脑关于idea的文件全都删除了 。重新安装后(首次运行倒是可以打开,但是关掉id…

Python爬虫-IP隐藏技术与代理爬取

前言 在进行爬虫程序开发和运行时,常常会遇到目标网站的反爬虫机制,最常见的就是IP封禁,这时需要使用IP隐藏技术和代理爬取。 一、IP隐藏技术 IP隐藏技术,即伪装IP地址,使得爬虫请求的IP地址不被目标网站识别为爬虫。…

spring boot 使用AOP+自定义注解+反射实现操作日志记录修改前数据和修改后对比数据,并保存至日志表

一、添加aop starter依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>二&#xff1a;自定义字段翻译注解。&#xff08;修改功能时&#xff0c;需要显示如…

【mysql】—— 函数的基本介绍

前言&#xff1a; MySQL是一种常用的关系型数据库管理系统&#xff0c;它提供了许多内置的函数来进行数据操作和处理。本期&#xff0c;我将给大家介绍的就是关于 “函数” 的相关知识&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;日期函数 &#…

Linux基础命令(示例代码 + 解释)

查看目录下文件 ls [-a -l -h] [路径] -a&#xff08;全部&#xff09; -l&#xff08;细节&#xff09; -h&#xff08;大小&#xff09; ls ls / ls -a ls -l ls -h ls -alh ls -l -h -a ls -lah /切换目录 cd [路径] change di…

webrtc-m79-测试peerconnectionserver的webclient-p2p-demo

1 背景 webrtc的代码中有peerconnectionclient和peerconnectionserver的例子&#xff0c;但是没有对应的web端的例子&#xff0c;这里简单的写了一个测试例子&#xff0c;具体如下&#xff1a; 2 具体操作 2.1 操作流程 2.2 测试效果 使用webclient与peerconnectionclient的…

算法 数据结构 双向环形链表 手撸环形链表 环形链表实现容器 环形链表添加修改删除获取大小 环形链表实现自定义容器 手撸容器 双向环形哨兵链表 数据结构(六)

1. 环形链表&#xff1a; 2. 建议先不要看我写得自己先实现下&#xff0c;只将Node内部类复制自己命名得容器内&#xff0c; 实现方法&#xff1a; a. add方法&#xff08;添加到头部&#xff0c;尾部添加&#xff0c;指定位置添加&#xff09; b. get方法&#xff08;获取首部…

HBASE知识点

HBASE是什么&#xff1f; 高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库。利用HDFS作为其文件存储系统&#xff0c;利用MapReduce来处理HBase中的海量数据。利用Zookeeper作为其分布式协同服务。用于存储非结构化和半结构化的松散数据。 HBase数据模型 RowKey: 唯…

Java“牵手”拼多多商品详情数据,拼多多商品详情接口,拼多多API接口申请指南

拼多多商品详情API接口的作用是获取拼多多平台上某个商品的详细信息&#xff0c;包括商品标题、价格、图片、规格、参数、店铺信息等。 开发者可以通过该接口获取到商品的原始数据&#xff0c;方便进行数据分析、价格比较、爬取等操作。通过该接口获取到的商品详情数据可以结合…

flink命令行提交jar包任务

1. 环境准备 1.1 flink环境准备 关于如何安装flink&#xff0c;这个写的非常详细&#xff0c;https://blog.csdn.net/qq_43699958/article/details/132826440 在flink的bin目录启动flink cluster [rootlocalhost bin]# ./start-cluster.sh1.2 Linux环境准备 1.2.1 关闭linu…

43.MQ—RabbitMQ

目录 一、MQ—RabbitMQ。 &#xff08;1&#xff09;同步调用与异步调用。 &#xff08;1.1&#xff09;同步调用。 &#xff08;1.2&#xff09;异步调用。 &#xff08;2&#xff09;MQ之间的区别。 &#xff08;3&#xff09;RabbitMQ学习。 &#xff08;3.1&#xf…

一文读懂:苹果手机怎么录屏?

“刚买的苹果14&#xff0c;最近需要用来录屏&#xff0c;找了很久都没找到&#xff0c;朋友说苹果手机没有录屏功能&#xff0c;可是我半信半疑&#xff0c;花了这么多钱买的&#xff0c;怎么可能没有录屏功能呢&#xff0c;有人知道苹果手机怎么录屏吗&#xff1f;” 苹果手…

骨传导耳机对大脑有影响吗?骨传导耳机到底好不好

先上结论&#xff0c;骨传导耳机对大脑没有影响。骨传导耳机使用的是骨传导技术&#xff0c;声音是通过头骨骨头和颌骨给内耳传递的&#xff0c;而不是通过传统的空气传播&#xff0c;它将声音传输到颅骨&#xff0c;然后透过骨头振动直接刺激内耳&#xff0c;绕过外耳和中耳。…

C#,《小白学程序》第十五课:随机数(Random)第二,统计学初步,数据统计的计算方法与代码

1 文本格式 /// <summary> /// 《小白学程序》第十五课&#xff1a;随机数&#xff08;Random&#xff09;第二&#xff0c;统计学初步&#xff0c;数据统计的计算方法与代码 /// 用随机数做简单的统计并用图形显示统计结果。 /// </summary> /// <param name&q…

数电课程设计——课设一:加减计数器

为了帮助大家更好学习FPGA硬件语言&#xff0c;创立此资源 包含文件有&#xff1a;实验报告、仿真文件&#xff0c;资料很全&#xff0c;有问题可以私信 一、实验内容 1、利用QuartusII和Modelsim实现100进制可逆计数器编码显示实验。 二、实验步骤 &#xff08;1&#xff…

CentOS 7 openssl 3.0.10 rpm包制作 —— 筑梦之路

源码下载地址&#xff1a; https://www.openssl.org/source/openssl-3.0.10.tar.gz 编写spec文件&#xff1a; cat << EOF > openssl.specSummary: OpenSSL 3.0.10 for CentosName: opensslVersion: %{?version}%{!?version:3.0.10}Release: 1%{?dist}Obsoletes…

企业可以自己建立大数据平台吗?有哪些好处?

随着企业的快速发展&#xff0c;企业累积了越来越多的数据&#xff0c;但管理巨量的大数据是一件非常难的事情&#xff0c;且很多数据没有充分发挥作用。因此不少企业在问&#xff0c;企业可以自己建立大数据平台吗&#xff1f;有哪些好处&#xff1f; 企业可以自己建立大数据…