目录

  • 一、BA优化
  • 二、利用稀疏性求解

一、BA优化

BA(Bundle Adjustment)优化,是指从视觉重建中提炼出最优的 3D3D3D 模型和相机参数(内参数和外参数)。从每一个特征点反射出来的几束光线(bundles of light rays),在我们把相机姿态和特征点空间位置做出最优的调整 (adjustment) 之后,最后收束到相机光心的这个过程。和重投影不同的是,BA优化是对多段相机的位姿和位姿下的路标点的空间坐标进行优化。

我们的误差可以写成:
e(ξ,p)=z−1sKTPe(\xi,p)=z-\frac 1 s KTP e(ξ,p)=z−s1​KTP
即:
e(ξ,p)=z−1sK⋅exp⁡(ξ∧)⋅Pe(\xi,p)=z-\frac 1 s K\cdot\exp(\xi^\land)\cdot P e(ξ,p)=z−s1​K⋅exp(ξ∧)⋅P
根据我之前写的文章:

SLAM–最小化重投影误差

我们可以得出误差eee分别对位姿和路标坐标的偏导JδξJ_{\delta \xi}Jδξ​和JpJ_pJp​:
Jδξ=∂e∂δξ=−[fxZ′0−fxX′Z′2−fxX′Y′Z′2fx+fxX′2Z′2−fxY′Z′0fyZ′−fyY′Z′2−fy−fyY′2Z′2fyY′X′Z′2fyX′Z′]J_{\delta \xi} =\frac{\partial \pmb e}{\partial \delta \xi}=-\begin{bmatrix} \frac {f_x}{Z'} & 0 &-\frac{f_xX'}{Z'^2} &-\frac{f_xX'Y'}{Z'^2} &f_x+ \frac{f_xX'^2}{Z'^2} & -\frac{f_xY'}{Z'} & \\ ~\\ 0&\frac{f_y}{Z'}&-\frac{f_yY'}{Z'^2} & -f_y-\frac{f_yY'^2}{Z'^2} & \frac{f_yY'X'}{Z'^2} & \frac{f_yX'}{Z'} & \\ \end{bmatrix} Jδξ​=∂δξ∂eee​=−⎣⎢⎡​Z′fx​​ 0​0Z′fy​​​−Z′2fx​X′​−Z′2fy​Y′​​−Z′2fx​X′Y′​−fy​−Z′2fy​Y′2​​fx​+Z′2fx​X′2​Z′2fy​Y′X′​​−Z′fx​Y′​Z′fy​X′​​​⎦⎥⎤​

Jp=∂e∂P=−[fxZ′0−fxX′Z′20fyZ′−fyY′Z′2]⋅RJ_p=\frac {\partial \pmb e}{\partial \pmb P}=-\begin{bmatrix} \frac {f_x}{Z'}&0&-\frac{f_xX'}{Z'^2} \\ ~\\0&\frac{f_y}{Z'}&-\frac{f_yY'}{Z'^2}\\ \end{bmatrix}\cdot \pmb R Jp​=∂PPP∂eee​=−⎣⎢⎡​Z′fx​​ 0​0Z′fy​​​−Z′2fx​X′​−Z′2fy​Y′​​⎦⎥⎤​⋅RRR

我们令位姿变量为ξ\xiξ,特征点空间位置为ppp,对于m个位姿和n个特征点:
x=[ξ1ξ2...ξm∣p1p2...pn]T\pmb x=[\xi_1 \quad \xi_2 ...\xi_m| \quad p_1 \quad p_2...p_n]^T xxx=[ξ1​ξ2​...ξm​∣p1​p2​...pn​]T

优化的目标函数为:
12∥f(x+Δx)∥2=12∑i=1m∑j=1n∥eij+FijΔξi+EijΔpj∥2\frac 1 2 \left\| f(x+\Delta x) \right\|^2=\frac 1 2\sum_{i=1}^m \sum_{j=1}^n\left\|e_{ij}+F_{ij}\Delta \xi_i+E_{ij}\Delta p_j \right\|^2 21​∥f(x+Δx)∥2=21​i=1∑m​j=1∑n​∥eij​+Fij​Δξi​+Eij​Δpj​∥2
其中,FijF_{ij}Fij​是相对姿态的偏导数,EijE_{ij}Eij​是相对与路标点的偏导;

为了简明公式,我们令:
xc=[ξ1ξ2...ξm]xp=[p1p2...pn]x_c=[\xi_1 \quad \xi_2 \space...\space\xi_m]\\ x_p= [p_1 \quad p_2 \space...\space p_n]\\ xc​=[ξ1​ξ2​ ... ξm​]xp​=[p1​p2​ ... pn​]
我们的目标函数可以写成:
12∥f(x+Δx)∥2=12∥e+FΔxc+EΔxp∥2\frac 1 2 \left\| f(x+\Delta x) \right\|^2=\frac 1 2\left\|e+F\Delta x_c+E\Delta x_p \right\|^2 21​∥f(x+Δx)∥2=21​∥e+FΔxc​+EΔxp​∥2
对于线性增量方程:HΔx=gH\Delta x=gHΔx=g,这里H=JTJH=J^TJH=JTJ;

我们可以把雅克比矩阵分块:
J=[FE],JT=[FTET]J=[F \quad E],\quad J^T=\begin{bmatrix} F^T \\ \\E^T\end{bmatrix} J=[FE],JT=⎣⎡​FTET​⎦⎤​
则:
H=JTJ=[FTFFTEETFETE]H=J^TJ=\begin{bmatrix} F^TF &&F^TE \\ \\E^TF && E^TE\end{bmatrix} H=JTJ=⎣⎡​FTFETF​​FTEETE​⎦⎤​

二、利用稀疏性求解

JijJ_{ij}Jij​表示在位姿ξi\xi_iξi​只观测到pjp_jpj​时的雅克比矩阵,所以其他部分的导数为零。
Jij(x)=[0,0,...,(∂eij∂δξi)2×6,...,02×6,∣02×3,...,(∂eij∂pi)2×3]\large {J_{ij}(x)=\begin{bmatrix}0, &0,...,(\frac{\partial \pmb e_{ij}}{\partial \delta \xi_i}) _{2\times 6},...,0_{2 \times 6},|0_{2\times 3},...,(\frac{\partial \pmb e_{ij}}{\partial p_i}) _{2\times 3} \end{bmatrix}} Jij​(x)=[0,​0,...,(∂δξi​∂eeeij​​)2×6​,...,02×6​,∣02×3​,...,(∂pi​∂eeeij​​)2×3​​]
所以对于整体:
H=∑ijJijTJijH=\sum_{ij}J_{ij}^TJ_{ij} H=ij∑​JijT​Jij​
由此可以把所有的JijJ_{ij}Jij​放到一个JJJ表达式里:
J=[J11J12⋮Ji1Ji2⋮Jij]J=\begin{bmatrix} J_{11}\\J_{12}\\ \vdots \\J_{i1}\\J_{i2}\\ \vdots\\J_{ij} \end{bmatrix} J=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​J11​J12​⋮Ji1​Ji2​⋮Jij​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​
又有稀疏性和对称性,我们把HHH分块化:
H=[BEETC]H=\begin{bmatrix} B &E\\E^T &C \end{bmatrix} H=[BET​EC​]
由HΔx=gH\Delta x=gHΔx=g可变为:
[BEETC][ΔxcΔxp]=[vw]\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} [BET​EC​][Δxc​Δxp​​]=[vw​]
利用稀疏性进行高斯消元:
[I−EC−10I][BEETC][ΔxcΔxp]=[I−EC−10I][vw]⟹[B−EC−1ET0ETC][ΔxcΔxp]=[v−EC−1ww]\begin{bmatrix} I & -EC^{-1}\\0 &I\end{bmatrix}\begin{bmatrix} B &E\\E^T &C \end{bmatrix} \begin{bmatrix} \Delta x_c \\\Delta x_p \end{bmatrix} = \begin{bmatrix} I & -EC^{-1}\\0 &I\end{bmatrix}\begin{bmatrix} v\\w\end{bmatrix}\\~\\~ \\ \Longrightarrow \begin{bmatrix} B-EC^{-1}E^T &0\\E^T &C \end{bmatrix} \begin{bmatrix} \Delta x_c \\\Delta x_p \end{bmatrix} = \begin{bmatrix} v-EC^{-1}w\\w\end{bmatrix} [I0​−EC−1I​][BET​EC​][Δxc​Δxp​​]=[I0​−EC−1I​][vw​]  ⟹[B−EC−1ETET​0C​][Δxc​Δxp​​]=[v−EC−1ww​]
整理得:
(B−EC−1ET)Δxc=v−EC−1w(B-EC^{-1}E^T)\Delta x_c =v-EC^{-1}w (B−EC−1ET)Δxc​=v−EC−1w
继而可以求出:
∆xp=C−1(w−ET∆xc)∆x_p = C^{−1} (w − E^T ∆x_c ) ∆xp​=C−1(w−ET∆xc​)

SLAM--BA优化相关推荐

  1. SLAM中的BA优化

    SLAM中的BA优化 SLAM中的BA优化,先根据相机模型和A,B图像特征匹配好的像素坐标,求出A图像上的像素坐标对应的归一化的空间点坐标,然后根据该空间点的坐标计算重投影到B图像上的像素坐标,重投影 ...

  2. SLAM后端:BA优化(Bundle Adjustment)

    BA是一种优化方法,最小化重投影误差优化PnP得到的R.t 应用场景:利用共视点的3D坐标与相机内参矩阵,根据PnP计算位姿R.t(有误差).利用R.t及相机的投影模型可以计算出这些特征点在第二帧图像 ...

  3. SLAM图优化g2o

    SLAM图优化g2o 图优化g2o框架 图优化的英文是 graph optimization 或者 graph-based optimization, "图"其实是数据结构中的gr ...

  4. SLAM后端优化之-核函数

    1.核函数作用:保证每条边的误差不会大的没边,掩盖掉其他的边 在SLAM后端优化中,BA优化了所有的相机姿态和所有路标点,使用的最小化误差项作的二范数平方和作为目标函数:当我们的误差来源特别大的时候: ...

  5. (01)ORB-SLAM2源码无死角解析-(63) BA优化(g2o)→局部建图线程:Optimizer::LocalBundleAdjustment→位姿与地图点优化

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  6. 如何用ceres进行两帧之间的BA优化

    学习高博的书已有很长一段时间了,一直看理论,看代码,而没有自己亲自上手,最近在做BA优化,大部分SLAM是用g2o进行的,而对于ceres用的很少,由于博主根本看不懂g2o的代码风格,个人觉得很无语( ...

  7. SfM三维点云重建:BA优化--【VS2015+OpenCV3.4+PCL1.8】

    前言 在SfM多视图三维点云重建–[VS2015+OpenCV3.4+PCL1.8]中实现的增量式SfM三维点云重建,会随着图片数量的增加而导致误差逐渐累积,最后可能无法完成重建.在三维重建中常使用B ...

  8. 激光SLAM后端优化——雅克比矩阵推导

    激光SLAM后端优化--雅克比矩阵推导 Jacobi Matrix Jacobi Matrix In the EKF system, the maintained state quantities i ...

  9. ORB-SLAM2学习笔记——全局BA优化

    ORB-SLAM2学习笔记--全局BA优化 1.理论部分(待更新) 2.代码详解 void Optimizer::GlobalBundleAdjustemnt(Map* pMap, int nIter ...

  10. 激光SLAM后端优化总结之卡尔曼滤波

    激光SLAM后端优化总结之卡尔曼滤波 一.贝叶斯滤波 1.1 状态估计模型 1.2 公式推导 二.卡尔曼滤波(KF) 三.扩展卡尔曼滤波(EKF) 一.贝叶斯滤波 1.1 状态估计模型 1.2 公式推 ...

最新文章

  1. 9.java.lang.ClassCastException
  2. Android实现文字一个一个显示出来
  3. 自适应关于帧场编码问题
  4. java线程基础_Java多线程基础
  5. LeetCode 第 69 场力扣双周赛
  6. VB589语音识别芯片开发
  7. heartbeat+DRBD+mysql高可用集群实战
  8. 如何使用ADI公司的AD9833自制任意波形/函数发生器
  9. 数学建模——国赛写作模板篇
  10. OpenWRT软路由系统安装与优化
  11. 参考文献名称怎么复制_论文格式之注释:脚注、尾注、参考文献怎么弄?
  12. 【Python爬虫实战】查找企业股东有哪些关联公司
  13. 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成⼀个新的正整数,求组成的新数最小的删数方案(O((n-k)logk)优化)
  14. JAVA并发编程:悲观锁与乐观锁
  15. word无法打开请去应用商店_抖音去水印 | HTTP Catcher方法全解析
  16. URLEncoder.encode(String url)和URLDecoder.decode(String url)
  17. 【笔试面试】HR面的面试技巧
  18. 辩论赛计算机软件更重要论据,善意的谎言辩论会正方观点要例子
  19. 【CSDN超实用的浏览器插件】——去广告、快捷搜索、自定义工具等诸多功能等你探索
  20. Java生成微信小程序二维码,5种实现方式,一个比一个简单

热门文章

  1. 【问题解决】c.a.c.n.c.NacosPropertySourceBuilder : parse data from Nacos error,dataId:xxxxxx.yml
  2. java jmx教程_【JAVA】JMX简单使用方法
  3. 如果同时需要两张表,但其中一个表中没有另一个表中的字段,该如何正确使用
  4. mybatis实体类类型别名
  5. 【转】java注解-最通俗易懂的讲解
  6. 服务器未能识别 HTTP 标头 SOAPAction 的值
  7. 弹出式气泡,使用winAPI
  8. 从零开始学 Web 之 CSS(三)链接伪类、背景、行高、盒子模型、浮动
  9. 2018-05-21 Linux学习
  10. 基于jQuery的响应式网站视频插件FitVids.js