【视觉SLAM入门】7.3.后端优化 基于KF/EKF和基于BA图优化的后端,推导及举例分析

"时间倾诉我的故事"

  • 1. 理论推导
  • 2. 主流解法
  • 3. 用EKF估计状态
    • 3.1. 基于EKF代表解法的感悟
  • 4. 用BA法估计状态
    • 4.1 构建最小二乘问题
    • 4.2 求解BA推导
    • 4.3 H的稀疏结构
    • 4.4 根据H稀疏性求解
    • 4.5 鲁棒核函数
    • 4.6 编程注意
  • 5.总结

引入:

  • 前端里程计能给出一个短时间内的轨迹和地图,时间长则不准确;
  • 为了得到长时间内最优轨迹和地图,构建一个规模更大的优化问题。在后端优化中,通常考虑更长时间内的状态估计问题。

1. 理论推导

还是摆出最经典的SLAM运动和观测方程
f ( x ) = { x k = f ( x k − 1 , u k ) + w k z k , j = h ( y j , x k ) + v k , j f(x)= \begin{cases} x_k = f(x_{k-1}, u_k) + w_k \\ z_{k,j} = h(y_j, x_k) + v_{k,j} \end{cases} f(x)={xk=f(xk1,uk)+wkzk,j=h(yj,xk)+vk,j
实际上要解决: 拥有某些运动数据 u u u 和观测数据 z z z 时,如何确定状态量 x x x y y y 的分布。

  • 解决如下:
    x k x_k xk k k k 时刻所有的未知量, x k ≜ { x k , y 1 , . . . , y m } x_k \triangleq \{x_k, y_1,...,y_m \} xk{xk,y1,...,ym}
    同时,令 k 时刻所有的观测值为 z k z_k zk
    代入上式,运动和观测方程以后如下:
    f ( x ) = { x k = f ( x k − 1 , u k ) + w k z k , j = h ( y j , x k ) + v k , j f(x)= \begin{cases} x_k = f(x_{k-1}, u_k) + w_k \\ z_{k,j} = h(y_j, x_k) + v_{k,j} \end{cases} f(x)={xk=f(xk1,uk)+wkzk,j=h(yj,xk)+vk,j

k k k 时刻,用 0 − k 0-k 0k 的数据估计现在的状态分布:

P ( x k ∣ x 0 , u 1 : k , z 1 : k ) ⇓ B a y e s 法则交换 z 和 x P ( z k ∣ x k ) P ( x k ∣ x 0 , u 1 : k , z 1 : k − 1 ) ⇓ 按 x k − 1 时刻为条件概率展开 ∫ P ( x k ∣ x k − 1 , x 0 , u 1 : k , z 1 : k − 1 ) P ( x k − 1 ∣ x 0 , u 1 : k , z 1 : k − 1 ) d x k − 1 P(x_k|x_0, u_{1:k}, z_{1:k}) \\\;\\\Downarrow Bayes法则交换z和x \\\;\\ P(z_k|x_k)P(x_k|x_0, u_{1:k},z_{1:k-1}) \\\;\\\Downarrow 按x_{k-1}时刻为条件概率展开 \\\;\\ \int P(x_k|x_{k-1}, x_0, u_{1:k}, z_{1:k-1})P(x_{k-1}|x_0, u_{1:k}, z_{1:k-1})\, \text d x_{k-1} P(xkx0,u1:k,z1:k)Bayes法则交换zxP(zkxk)P(xkx0,u1:k,z1:k1)xk1时刻为条件概率展开P(xkxk1,x0,u1:k,z1:k1)P(xk1x0,u1:k,z1:k1)dxk1

2. 主流解法

上式 ∫ P ( x k ∣ x k − 1 , x 0 , u 1 : k , z 1 : k − 1 ) P ( x k − 1 ∣ x 0 , u 1 : k , z 1 : k − 1 ) d x k − 1 \int P(x_k|x_{k-1}, x_0, u_{1:k}, z_{1:k-1})P(x_{k-1}|x_0, u_{1:k}, z_{1:k-1})\, \text d x_{k-1} P(xkxk1,x0,u1:k,z1:k1)P(xk1x0,u1:k,z1:k1)dxk1

主流的有两种做法:

    1. 假设马尔科夫性,当前状态仅和上个时态有关,用EKF等滤波器方法做状态估计;前两讲讲到过
    1. 当前状态和之前所有状态都有关系,基于BA用非线性优化等优化框架做。

3. 用EKF估计状态

马尔科夫性成立后,当前状态仅和上个时态有关,上边左右式可分别简化为(右式中, u k u_k uk k − 1 k-1 k1 时刻的状态无关,拿掉!):
左边: P ( x k ∣ x k − 1 , x 0 , u 1 : k , z 1 : k − 1 ) = P ( x k ∣ x k − 1 , u k ) 右边: P ( x k − 1 ∣ x 0 , u 1 : k , z 1 : k − 1 ) = P ( x k − 1 ∣ x 0 , u 1 : k , z 1 : k − 1 ) 左边:\qquad P(x_k|x_{k-1}, x_0, u_{1:k}, z_{1:k-1}) = P(x_k|x_{k-1}, u_k)\\\; \qquad右边:\qquad P(x_{k-1}|x_0, u_{1:k}, z_{1:k-1}) = P(x_{k-1}|x_0, u_{1:k}, z_{1:k-1}) 左边:P(xkxk1,x0,u1:k,z1:k1)=P(xkxk1,uk)右边:P(xk1x0,u1:k,z1:k1)=P(xk1x0,u1:k,z1:k1)

  • 由前边的两节知识,可知上式中我们只需维护一个状态量即可,不断迭代更新即可。假设它满足高斯分布,只需要考虑维护状态量的均值和协方差即可。
  • 另记: x ^ \hat x x^ 表示先验, x ˉ \bar x xˉ 表示后验

根据高斯分布性质可得EKF中的预测环节:
P ( x k ∣ x 0 , u 1 : k , z 1 : k − 1 ) = N ( A k x ˉ k − 1 + u k , A k P ^ k − 1 A k T + R ) = 记为 N ( x ˉ k , P ˉ k ) P(x_k|x_0,u_{1:k}, z_{1:k-1}) = N(A_k\bar x_{k-1}+u_k, \;\;\;A_k\hat P_{k-1}A_k^T+R) = 记为\quad N(\bar x_k, \bar P_k) P(xkx0,u1:k,z1:k1)=N(Akxˉk1+uk,AkP^k1AkT+R)=记为N(xˉk,Pˉk)

如此,就可以带入我们的EKF中进行使用。

3.1. 基于EKF代表解法的感悟

运算快,资源低;
局限:

    1. 马尔科夫性质—无法解决类似回环等当前状态与很久之前数据有关的问题
    1. x k x_k xk 在当前时刻的一次线性化,计算出后验概率,是假设该点的线性化在后验概率处还是有效的,实际上不然。只有小范围成立,在远处的地方并不能近似,这是EKF的 非线性误差
  • 2.1 而在非线性优化方法中,在每迭代一次,状态发生改变后就会做一阶或者二阶近似,重新做泰勒展开,适用范围更加广泛,状态变化大时候也适用。
    1. EKF SLAM不可适用于大场景,landmark多的时候,均值和方差是很大的。

4. 用BA法估计状态

BA(Bundle Adjustment):源于三维重建,在这里的意义是 通过不断调整相机的姿态和特征点的位置,使从每一个特征点反射出来的几束光线都收束到相机中心,类似求解只有观测方程的SLAM问题。

4.1 构建最小二乘问题

针对此问题,观测方程:

z = h ( ξ , p ) z = h(\xi, p) z=h(ξ,p)

ξ \xi ξ 是位姿(李代数表示) , p p p 是路标(特征点的位置), 观测误差如下:
e = z − h ( ξ , p ) e = z - h(\xi, p) e=zh(ξ,p)

代价函数(Cost Function)如下:

1 2 ∑ i = 1 m ∑ j = 1 n ∣ ∣ e i j ∣ ∣ 2 = 1 2 ∑ i = 1 m ∑ j = 1 n ∣ ∣ z i j − h ( ξ i , p j ) ∣ ∣ 2 \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^n||e_{ij}||^2 = \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^n||z_{ij}-h(\xi_{i},p_j)||^2 21i=1mj=1n∣∣eij2=21i=1mj=1n∣∣zijh(ξi,pj)2

  • 其中 z ( i , j ) z(i,j) z(i,j) 表示在位姿 ξ i \xi_i ξi 处观察路标 p j p_j pj 产生的数据。当该式最小时,我们的估计位姿 ξ i \xi_i ξi 和 路标 p j p_j pj 最接近真实值。

为了便于理解这里的 h h h ,举在相机中的例子:

  • 这里 h h h 表示将世界坐标下的点 p [ x , y , z ] p[x,y,z] p[x,y,z] 转到像素坐标(也就是程序可读图片的点位置的坐标)下的点 u , v u,v u,v :如下
    在这里插入图片描述

这就是一个观测方程 h h h 的一种具体参数化的过程。

4.2 求解BA推导

再看要求解的非线性最小二乘问题( h h h 非线性显然 ):

1 2 ∑ i = 1 m ∑ j = 1 n ∣ ∣ z i j − h ( ξ i , p j ) ∣ ∣ 2 \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^n||z_{ij}-h(\xi_{i},p_j)||^2 21i=1mj=1n∣∣zijh(ξi,pj)2

首先定义要优化的变量:

x = [ ξ 1 , . . . , ξ m , p 1 , . . . , p n ] T x = [\xi_1, ..., \xi_m,p_1, ..., p_n]^T x=[ξ1,...,ξm,p1,...,pn]T

注意:虽然一个误差项针对的是单个位姿和路标点,但是在整体BA中,必须将优化变量定义为所有待优化的变量。


根据前文:求解非线性问题,要给一个小增量和增量方向,最终要求的也是这个 Δ x \Delta x Δx,这里给增量以后的代价函数为:

1 2 ∣ ∣ f ( x + Δ x ) ∣ ∣ 2 ≈ 1 2 ∑ i = 1 m ∑ j = 1 n ∣ ∣ e i j + F i j Δ ξ i + E i j Δ p j ∣ ∣ 2 \frac{1}{2}||f(x+\Delta x)||^2 \approx \frac{1}{2}\sum_{i=1}^m\sum_{j=1}^n||e_{ij}+F_{ij}\Delta \xi_i + E_{ij}\Delta p_j||^2 21∣∣f(x+Δx)221i=1mj=1n∣∣eij+FijΔξi+EijΔpj2

其中 F i j F_{ij} Fij 表示代价函数对相机姿态的偏导数, E i j E_{ij} Eij 表示对路标点位置的偏导数。

将相机位姿,和空间点变量分别放在一起:上式如下:

x c = [ ξ 1 , ξ 2 , . . . , ξ m ] T ∈ R 6 m , x p = [ p 1 , p 2 , . . . , p m ] T ∈ R 3 n ⇓ 1 2 ∣ ∣ f ( x + Δ x ) ∣ ∣ 2 = 1 2 ∣ ∣ e + F Δ x c + E Δ x p ∣ ∣ 2 x_c = [\xi_1, \xi_2, ..., \xi_m]^T \in \R^{6m}, \qquad x_p = [p_1, p_2, ..., p_m]^T \in \R^{3n} \\\;\Downarrow\\\;\\ \frac{1}{2}||f(x+\Delta x)||^2 = \frac{1}{2} ||e + F\Delta x_c + E \Delta x_p||^2 xc=[ξ1,ξ2,...,ξm]TR6mxp=[p1,p2,...,pm]TR3n21∣∣f(x+Δx)2=21∣∣e+FΔxc+EΔxp2

根据前边的非线性优化,最终我们要面临

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

而求解它要用的雅克比矩阵可以根据位姿和路标分别定义为:

J = [ F E ] J = [F \quad E] J=[FE]

则:
H = J T J = [ F T F F T E E T F E T E ] H = J^TJ= \begin{bmatrix} F^TF & F^TE \\ E^TF & E^TE \end{bmatrix} H=JTJ=[FTFETFFTEETE]

点越多,就代表这个H的维度越大,计算复杂,资源占得多,接下来分析如何观察这个 H H H 的特点。

4.3 H的稀疏结构

根据前边,我们知道 H = J T J H = J^TJ H=JTJ, H H H的研究放在 J J J 上,对于J,考虑一个 e i j e_{ij} eij 它的表述如下:

在这里插入图片描述
几何意义就是:它只涉及第 i 个矩阵和第 j 个路标,其余都为0,描述的是 ξ i \xi_i ξi看到 p j p_j pj 这件事,且前边的是位姿导数(6维),后边的是路标(三维)。

  • 举例说明

假设有2个相机,6个路标。可视化它们的关系如下(可以观测到,则底下用实线连接):

在这里插入图片描述根据上边,把 C 1 C_1 C1 观察到 P 1 P_1 P1 的雅克比直观出来,则如下,因为 C 1 C_1 C1 六维:

在这里插入图片描述
这个时候,将所有 J i j J_{ij} Jij 和 它们相乘之后的 H H H 同样直观展示:

在这里插入图片描述
我们发现:H对应邻接矩阵,可以知道 假如 C i C_i Ci 可以观察到 P j P_j Pj ,那么 H i j H_{ij} Hij 则是有值的,否则是为0.如下:

在这里插入图片描述

4.4 根据H稀疏性求解

根据以上H性质,可以将H分块为:其中 B B B 纯位姿, C C C对角线纯路标,B非对角非零表示共视关系:
H = [ B E E T C ] H = \begin{bmatrix} B & E \\ E^T & C \end{bmatrix} H=[BETEC]

这个时候就可以求解 H Δ x = g H \Delta x = g HΔx=g 这个方程:

[ B E E T C ] [ Δ x c Δ x p ] = [ v w ] \begin{bmatrix} B & E \\ E^T & C \end{bmatrix} \begin{bmatrix}\Delta x_c \\ \Delta x_p\end{bmatrix} = \begin{bmatrix} v \\w \end{bmatrix} [BETEC][ΔxcΔxp]=[vw]

此时通过Schur消元(也叫边缘化)—就是先求一个比如 Δ x c \Delta x_c Δxc 然后再反代回去求 Δ x p \Delta x_p Δxp 的方法去求解。

4.5 鲁棒核函数

  • 说明问题:我们采用的是误差项的二范数平方和,如果出现误匹配,单个项的误差就很大,此时优化算法会均摊误差去调整其他正确的数据。
  • 问题原因:误差很大时,二范数增长过快(平方嘛)
  • 解决:鲁棒核函数–把二范数度量换成增长较低,同时保证光滑(求导要求)的表述,因为它使得整个优化结果更为鲁棒,所以又叫它鲁棒核函数(Robust Kernel)。

列举一个常见的鲁棒核函数,Huber核:

f ( x ) = { 1 2 e 2 i f ∣ e ∣ ≤ δ , δ ( ∣ e ∣ − 1 2 δ ) o t h e r w i s e . f(x)= \begin{cases} \frac{1}{2}e^2 \qquad\qquad\qquad if|e| \le \delta, \\ \delta(|e| - \frac{1}{2} \delta)\qquad\quad otherwise . \end{cases} f(x)={21e2ifeδ,δ(e21δ)otherwise.
它的图像如下:

在这里插入图片描述
此外还有Cauchy核,Tukey核等。

4.6 编程注意

在使用G2O求解时,所有点云都要进行Schur,因为定义的Matrix维度仅仅是相机姿态参数的维度,要确保它不包含其他路标维度,不然报错。

5.总结

  • 假设马尔科夫,EKF代表的滤波器模型
  • 考虑所有状态,构成最小二乘问题,只有观测时又称BA。

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

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

相关文章

MySQL优化第二篇

MySQL优化第二篇 性能分析小表驱动大表慢查询日志日志分析工具mysqldumpslow Show Profile进行SQL分析(重中之重) 七种JOIN 1、inner join :可以简写为join,表示的是交集,也就是两张表的共同数据 sql语句&#xff1a…

用动态ip登录账号的风险高不高?

使用动态ip登录账号在一定程度上提供了额外的安全保障和匿名性,但与此同时也存在一些风险和风控挑战。本文将解密使用动态ip登录账号的真相,明确安全与风险的并存之道。 1、增强隐私保护: 使用动态ip登录账号可以隐藏您的真实IP地址&#xff…

21 Spring Boot整合Redis

目录 一、Redis简介 二、创建springboot整合redis工程 三、添加依赖 四、配置Yml 五、创建Redis配置类 六、创建Redis工具类,封装Redis的api 七、操作Redis 八、验证 一、Redis简介 简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统…

无涯教程-JavaScript - OR函数

描述 如果任何参数为TRUE,则OR函数返回TRUE;如果所有参数为FALSE,则返回FALSE。 语法 OR (logical1, [logical2], ...) 争论 Argument描述Required/Optionallogical1 您要测试的1到255个条件可以是TRUE或FALSE。 您要测试的1到255个条件可以是TRUE或FALSE。 Req…

JDK API文档地址(中文和英文)

JDK1.6 JDK 1.6 中文手册 JDK1.8 Java 8 中文版 - 在线API手册 - 码工具 Java 官方文档 |官方教程|Java 官方文档 API中文手册|Java 官方文档参考文档_w3cschool 网上还有很多百度网盘中也有 JDK17 https://doc.qzxdp.cn/jdk/17/zh/api/index.html 英文文档 所有版本 …

Unity 性能优化之Shader分析处理函数ShaderUtil.HasProceduralInstancing: 深入解析与实用案例

Unity 性能优化之Shader分析处理函数ShaderUtil.HasProceduralInstancing: 深入解析与实用案例 点击封面跳转到Unity国际版下载页面 简介 在Unity中,性能优化是游戏开发过程中非常重要的一环。其中,Shader的优化对于游戏的性能提升起着至关重要的作用。…

学习视觉SLAM需要会些什么?

前言 SLAM是现阶段很多研究生的研究方向,我也是作为一个即将步入视觉SLAM的研究生,网上对于SLAM的介绍很多,但很少有人完整系统的告诉你学习视觉SLAM该有那些基础,那么此贴将告诉你学习SLAM你要有那些方面的基础。 文章目录 前言…

Java 华为真题-选修课

需求: 现有两门选修课,每门选修课都有一部分学生选修,每个学生都有选修课的成绩,需要你找出同时选修了两门选修课的学生,先按照班级进行划分,班级编号小的先输出,每个班级按照两门选修课成绩和的…

计算机网络TCP篇之流量控制

计算机网络TCP篇之流量控制 今天谈一谈我对于tcp流量控制的看法 在网络拓扑中如果发送方节点的发送速率大于接受方节点的接受速率,数据会不断在接受方的缓冲区累积,直到接受方的缓冲区满的时候,发送方继续发送数据,这时候接受方无…

文件上传漏洞~操作手册

目录 上传文件一般过滤方式 客服端校验 服务端校验 黑白名单机制 常规文件上传漏洞绕过 客户端绕过 1.游览器禁用JavaScript 2.正常burp suite抓包改包 服务端绕过 1.Content-Type绕过 2.黑名单绕过 1)命名规则绕过 2)大小写绕过 3&#x…

怎么用excel管理固定资产

在当今的数字时代,我们已经习惯了使用各种电子工具来提高我们的生产力。其中,Excel无疑是一个强大的工具,它不仅可以帮助我们处理数据,还可以用来进行复杂的计算和分析。然而,你可能不知道的是,Excel也可以…

优思学院|什么是精益项目管理?

正确地使用精益思想和技术是可以减少项目中的浪费、提高客户满意度,并提高项目的利润率。 在现实世界中,项目经理的工作充满了挑战。他们不仅需要专注于产品和团队,还必须确保客户的满意度。同时,他们还必须与矩阵组织打交道&…

异步FIFO设计

1 FIFO简介 FIFO的本质是RAM,具有先进先出的特性。 FIFO的基本使用原则:空时不能读,满时不能写 FIFO的两个重要参数:宽度和深度 FIFO的两种类型: 同步FIFO:读写时钟相同,通常用来做数据缓存…

本地录像视频文件如何推送到视频监控平台EasyCVR进行AI视频智能分析?

安防监控平台EasyCVR支持多协议、多类型设备接入,可以实现多现场的前端摄像头等设备统一集中接入与视频汇聚管理,并能进行视频高清监控、录像、云存储与磁盘阵列存储、检索与回放、级联共享等视频功能。视频汇聚平台既具备传统安防监控、视频监控的视频能…

【算法】前缀和与差分

大家好!今天我们来学习前缀和与差分算法。 目录 1. 一维前缀和 1.1 定义 1.2 计算方法 1.3 作用 1.4 适用场景 1.5 模板题 1.6 总结 2. 二维前缀和 2.1 定义 2.2 计算方法 2.3 模板题 2.4 总结 3. 一维差分 3.1 定义 3.2 差分数组 3.3 差分标记 3…

什么是JavaScript中的严格模式(strict mode)?应用场景是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 严格模式(Strict Mode):⭐ 使用场景⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…

SpringMVC多文件上传

文章目录 一、文件上传1.1 导入pom依赖1.2 配置文件上传解析器1.3 设置文件上传表单1.4 实现文件上传 二、文件下载三、多文件上传四、JRebel的使用 一、文件上传 1.1 导入pom依赖 <commons-fileupload.version>1.3.3</commons-fileupload.version><dependency…

高德地图实现-微信小程序地图导航

效果图&#xff1a; 一、准备阶段 1、在高德开放平台注册成为开发者2、申请开发者密钥&#xff08;key&#xff09;。3、下载并解压高德地图微信小程序SDK 高德开放平台&#xff1a; 注册账号(https://lbs.amap.com/)) 申请小程序应用的 key 应用管理(https://console.ama…

苹果“FindMy”APP

“FindMy”是一项 Apple 服务&#xff0c;可以定位设备。在 iOS 13 之前&#xff0c;Apple将该服务拆分为单独的应用程序&#xff1a;“查找我的 iPhone”&#xff08;或 iPad 或 Mac&#xff09;和“查找我的朋友”。该服务适用于iPhone、iPad、Mac、Apple Watch、AirPods、Ai…

MyBatisPlus(二)基础Mapperr接口:增删改查

MyBatisPlus&#xff1a;基础Mapper接口&#xff1a;增删改查 插入一条数据 代码 Testpublic void insert() {User user new User();user.setId(6L);user.setName("张三");user.setAge(25);user.setEmail("zhangsanexample.com");userMapper.insert(use…