视觉SLAM十四讲笔记-6-1

文章目录

  • 视觉SLAM十四讲笔记-6-1
  • 非线性优化
    • 6.1 状态估计问题
      • 6.1.1 批量状态估计与最大后验估计
      • 6.1.2 最小二乘的引出
      • 6.1.3 例子:批量状态估计

非线性优化

主要目标:
1. 理解最小二乘法的含义和处理方式;
2. 理解高斯牛顿法(Gauss-Newton’s method),列文伯格-马夸尔特方法(Levenburg-Marquadt’s method)等下降策略;
3. 学习Ceres库和g2o库的基本使用用法;
在前几讲中,介绍了经典SLAM模型的运动方程和观测方程.现在已经知道,运动方程中的位姿可以由变换矩阵来描述,然后用李代数进行优化.观测方程由相机成像模型给出,其中内参是随相机固定的,而外参则是相机的位姿.这即为经典SLAM在视觉情况下的具体表达.
然而,由于噪声的存在,运动方程和观测方程的等式必定不是精确成立的.尽管相机可以非常好地符合针孔模型,但遗憾的是,得到的数据是受各种未知噪声影响的.即使有高精度的相机,运动方程和观测方程也只能近似成立.所以,与其假设数据必须符合方程,不如讨论如何在有噪声的情况中进行精确的状态估计.
解决状态估计问题需要一定程度的最优化背景知识.本节将介绍基本的无约束非线性优化方法,同时介绍优化库g2o和Ceres的使用方式.

6.1 状态估计问题

6.1.1 批量状态估计与最大后验估计

回顾第二章的经典SLAM模型.它由一个运动方程和一个观测方程构成.
{xk=f(xk−1,uk)+wkzk,j=h(yj,xk)+vk,j\left\{\begin{array}{l} \boldsymbol{x}_{k}=f\left(\boldsymbol{x}_{k-1}, \boldsymbol{u}_{k}\right)+\boldsymbol{w}_{k} \\ \boldsymbol{z}_{k, j}=h\left(\boldsymbol{y}_{j}, \boldsymbol{x}_{k}\right)+\boldsymbol{v}_{k, j} \end{array}\right. {xk​=f(xk−1​,uk​)+wk​zk,j​=h(yj​,xk​)+vk,j​​
上述两个方程:
运动方程:根据 uku_kuk​ 的输入,在噪声 www 的影响下,位置 xxx 的变化;观测方程:在 xkx_kxk​ 处对路标 yjy_jyj​ 进行观测,在噪声 vvv 的影响下产生一个观测数据 zkjz_{kj}zkj​.
通过第四章的学习可知,这里的 xkx_kxk​ 是相机的位姿,可以用 SE(3)SE(3)SE(3) 来描述.至于观测方程,从第五章可知,可以用针孔相机模型来表示.
下面讨论具体参数化形式.
首先,位姿变量 xkx_kxk​ 可以由 Tk∈SE(3)T_k \in SE(3)Tk​∈SE(3) 表达.
然后,观测方程由针孔模型给出,假设在 xkx_kxk​ 处对路标 yjy_jyj​ 进行了一次观测,对应到图像上的像素位置为 zk,jz_{k,j}zk,j​,那么观测方程可以表示成
szk,j=K(Rkyj+tk)sz_{k,j} = K(R_ky_j+t_k) szk,j​=K(Rk​yj​+tk​)
其中 KKK 为相机内参,sss 为像素点的距离,也就是 (Rkyj+tk)(R_ky_j+t_k)(Rk​yj​+tk​) 的第三个分量.如果用变换矩阵 TkT_kTk​ 描述位姿,那么路标点 yjy_jyj​ 必须以齐次坐标来描述.计算完成后要转换为非齐次坐标.
接下来,考虑数受到噪声影响后会发生什么改变,在运动和观测方程中,通常假设两个噪声wkw_kwk​ 和 vk,jv_{k,j}vk,j​ 满足零均值的高斯分布,像这样:
wk∼N(0,Rk),vk∼N(0,Qk,j)\boldsymbol{w}_{k} \sim \mathcal{N}\left(\mathbf{0}, \boldsymbol{R}_{k}\right), \boldsymbol{v}_{k} \sim \mathcal{N}\left(\mathbf{0}, \boldsymbol{Q}_{k, j}\right) wk​∼N(0,Rk​),vk​∼N(0,Qk,j​)
其中 N\mathcal{N}N 代表高斯分布,0\mathbf{0}0 代表零均值,Rk,Qk,j\boldsymbol{R}_{k},\boldsymbol{Q}_{k, j}Rk​,Qk,j​ 为协方差矩阵.
在这些噪声的影响下,希望通过带噪声的数据 zzz 和 uuu 推断位姿 xxx 和地图 yyy 以及它们的概率分布,这构成了一个状态估计问题.
处理这个状态估计问题的方法大致分为两种.
1.由于在SLAM过程中,这些数据是随时间逐渐到来的,所以,应该持有一个当前时刻的估计状态,然后用新的数据来更新它.这种方式称为增量/渐进(incremental)的方法,或者叫滤波器.
2.另一种方式,是把数据"攒"起来一并处理,这种方式称为批量(batch)的方法.例如,可以把0到k时刻所有的输入和观测数据都放在一起,问在这样的输入和观测下,如何估计整个0到k时刻的轨迹与地图尼?
这两种不同的处理方式印出来很多不同的估计手段.大体来说,增量方法仅关心当前时刻的状态估计 xkx_kxk​, 而对之前的状态则不多考虑;相对地,批量方法可以在更大的范围达到最优化,被认为优于传统的滤波器,而成为视觉SLAM的主流方法.
极端情况下,可以让机器人或无人机收集所有时刻的数据,再带回计算中心统一处理,这正是SfM(Structure from Motion)的主流做法.但是,这种极端情况不是实时的,不符合SLAM的运用场景.所以在SLAM中,使用的方法通常是一些折中的手段.例如,可以固定一些历史轨迹,仅对当前时刻附近的一些轨迹进行优化,这是后面要讲到的滑动窗口估计法
本节先重点介绍以非线性优化为主的批量优化方法,将卡尔曼滤波器及更深入的知识留到介绍后端的章节中再进行介绍.
接下来讨论一下批量优化方法:
考虑从1到N的所有时刻,并假设有M个路标点.定义所有时刻的机器人位姿和路标点坐标为:
x={x1,...,xN},y={y1,...,ym}x =\left \{ x_1,...,x_N \right \} ,y = \left \{ y_1, ..., y_m \right \} x={x1​,...,xN​},y={y1​,...,ym​}
用不带下标的 uuu 表示所有时刻的输入, zzz 表示所有时刻的观测数据.那么,对于机器人的状态估计来说,从概率学的观点来说,就是已知输入数据 uuu 和观测数据 zzz 的条件下,求状态 xxx 和 yyy 的条件概率分布:
P(x,y∣z,u)P(x,y|z,u) P(x,y∣z,u)
特别地,当不知道控制输入,只有一张张图像时,即只考虑观测方程带来的数据时,相当于估计 P(x,y∣z)P(x,y|z)P(x,y∣z)的条件概率分布,此问题被称为 SfMSfMSfM.
为了估计状态变量的条件分布,利用贝叶斯法则,有:
概率论中有如下计算公式:
P(A∣B)=P(AB)P(B)=P(B∣A)P(A)P(B)P(A|B) = \frac{P(AB)}{P(B)} = \frac{P(B|A)P(A)}{P(B)} P(A∣B)=P(B)P(AB)​=P(B)P(B∣A)P(A)​
因此:
P(x,y∣z,u)=P(z,u∣x,y)P(x,y)P(z,u)∝P(z,u∣x,y)⏟似 然 P(x,y)⏟先 验 P(\boldsymbol{x}, \boldsymbol{y} \mid \boldsymbol{z}, \boldsymbol{u})=\frac{P(\boldsymbol{z}, \boldsymbol{u} \mid \boldsymbol{x}, \boldsymbol{y}) P(\boldsymbol{x}, \boldsymbol{y})}{P(\boldsymbol{z}, \boldsymbol{u})} \propto \underbrace{P(\boldsymbol{z}, \boldsymbol{u} \mid \boldsymbol{x}, \boldsymbol{y})}_{\text {似 然 }} \underbrace{P(\boldsymbol{x}, \boldsymbol{y})}_{\text {先 验 }} P(x,y∣z,u)=P(z,u)P(z,u∣x,y)P(x,y)​∝似 然 P(z,u∣x,y)​​先 验 P(x,y)​​
上式称为贝叶斯法则,P(x,y∣z,u)P(\boldsymbol{x}, \boldsymbol{y} \mid \boldsymbol{z}, \boldsymbol{u})P(x,y∣z,u)称为后验概率,右侧的 P(z,u∣x,y){P(\boldsymbol{z}, \boldsymbol{u} \mid \boldsymbol{x}, \boldsymbol{y})}P(z,u∣x,y)称为似然,另一部分 P(x,y)P(\boldsymbol{x}, \boldsymbol{y})P(x,y)称为先验.
直接求后验分布是困难的,但是求一个状态最优估计,使得在该状态下后验概率最大化则是可行的.(使得在该状态下后验概率的可能性更大,即转化为一个状态最优估计问题)
(x,y)∗MAP=arg⁡max⁡P(x,y∣z,u)=arg⁡max⁡P(z,u∣x,y)P(x,y)(\boldsymbol{x}, \boldsymbol{y})^{*}{ }_{\mathrm{MAP}}=\arg \max P(\boldsymbol{x}, \boldsymbol{y} \mid \boldsymbol{z}, \boldsymbol{u})=\arg \max P(\boldsymbol{z}, \boldsymbol{u} \mid \boldsymbol{x}, \boldsymbol{y}) P(\boldsymbol{x}, \boldsymbol{y}) (x,y)∗MAP​=argmaxP(x,y∣z,u)=argmaxP(z,u∣x,y)P(x,y)
贝叶斯法则中分母与 x,yx,yx,y 无关,因此可以忽略.贝叶斯法则告诉我们求解最大后验概率等价于最大似然和先验的乘积.
进一步,当不知道机器人位姿或者路标大概在什么地方时,此时就没有了先验.那么,可以求解最大似然估计(MaximizeLikelihood Estimation,MLE):
(x,y)∗MLE=arg⁡max⁡P(z,u∣x,y)(\boldsymbol{x}, \boldsymbol{y})^{*}{ }_{\mathrm{MLE}}=\arg \max P(\boldsymbol{z}, \boldsymbol{u} \mid \boldsymbol{x}, \boldsymbol{y}) (x,y)∗MLE​=argmaxP(z,u∣x,y)
直观地讲,似然是指"在现在的位姿下,可能产生怎样的观测数据".由于观测数据是已知的,因此最大似然估计可以理解为:“在什么样的状态下,最可能产生现在观测到的数据”.这就是最大似然估计的直观意义.

6.1.2 最小二乘的引出

这里根据观测方程来推导观测模型的最大似然估计
如何求解最大似然估计尼?在高斯分布的假设下,最大似然能够有较为简单的形式.回顾观测模型,对于每一次观测:
zk,j=h(yj,xk)+vk,j\boldsymbol{z}_{k, j}=h\left(\boldsymbol{y}_{j}, \boldsymbol{x}_{k}\right)+\boldsymbol{v}_{k, j} zk,j​=h(yj​,xk​)+vk,j​
噪声项vk∼N(0,Qk,j)\boldsymbol{v}_{k} \sim \mathcal{N}\left(\mathbf{0}, \boldsymbol{Q}_{k, j}\right)vk​∼N(0,Qk,j​),所以观测数据的条件概率为:
P(zj,k∣xk,yj)=N(h(yj,xk),Qk,j)P(z_{j,k}|x_k,y_j) = N(h(y_j,x_k),Q_{k,j}) P(zj,k​∣xk​,yj​)=N(h(yj​,xk​),Qk,j​)
它依然是一个高斯分布.考虑单次观测的最大似然估计,可以使用最小化负对数来求一个高斯分布的最大似然.

高斯分布在负对数下具有较好的数学形式.考虑任意高维高斯分布 x∼N(μ,Σ)x \sim \mathcal{N}(\mu ,\Sigma )x∼N(μ,Σ),它的概率密度函数展开形式为:
P(x)=1(2π)Ndet⁡(Σ)exp⁡(−12(x−μ)TΣ−1(x−μ))P(\boldsymbol{x})=\frac{1}{\sqrt{(2 \pi)^{N} \operatorname{det}(\boldsymbol{\Sigma})}} \exp \left(-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu})\right) P(x)=(2π)Ndet(Σ)​1​exp(−21​(x−μ)TΣ−1(x−μ))
对其取负对数,变为:
−ln⁡(P(x))=12ln⁡((2π)Ndet⁡(Σ))+12(x−μ)TΣ−1(x−μ)-\ln (P(\boldsymbol{x}))=\frac{1}{2} \ln \left((2 \pi)^{N} \operatorname{det}(\boldsymbol{\Sigma})\right)+\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{\mathrm{T}} \boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu}) −ln(P(x))=21​ln((2π)Ndet(Σ))+21​(x−μ)TΣ−1(x−μ)
因为对数函数是单调递增的,所以对原函数求最大化相当于对负对数求最小化.在最小化上式的 xxx 时,第一项与 xxx 无关,可以略去.于是,只要最小化右侧的二次型项,就能得到对状态的最大似然估计.带入SLAM的观测模型,相当于在求:
(xk,yj)∗=arg⁡max⁡N(h(yj,xk),Qk,j)=arg⁡min⁡((zk,j−h(xk,yj))TQk,j−1(zk,j−h(xk,yj)))\begin{aligned} \left(\boldsymbol{x}_{k}, \boldsymbol{y}_{j}\right)^{*} &=\arg \max \mathcal{N}\left(h\left(\boldsymbol{y}_{j}, \boldsymbol{x}_{k}\right), \boldsymbol{Q}_{k, j}\right) \\ &=\arg \min \left(\left(\boldsymbol{z}_{k, j}-h\left(\boldsymbol{x}_{k}, \boldsymbol{y}_{j}\right)\right)^{\mathrm{T}} \boldsymbol{Q}_{k, j}^{-1}\left(\boldsymbol{z}_{k, j}-h\left(\boldsymbol{x}_{k}, \boldsymbol{y}_{j}\right)\right)\right) \end{aligned} (xk​,yj​)∗​=argmaxN(h(yj​,xk​),Qk,j​)=argmin((zk,j​−h(xk​,yj​))TQk,j−1​(zk,j​−h(xk​,yj​)))​
该式等价于最小化噪声项(即误差)的一个二次型.这个二次型称为马哈拉诺斯距离(Mahalanobis distance),又叫马氏距离.
这也可以看成由 Qk,j−1Q_{k,j}^{-1}Qk,j−1​ 加权之后的欧氏距离(二范数).Qk,j−1Q_{k,j}^{-1}Qk,j−1​也叫作信息矩阵,即高斯分布协方差矩阵的逆.

上式相当于观测方程独立的最大似然估计
现在考虑批量时刻的数据.通常假设各个时刻的输入和观测是相互独立的,这意味着各个时刻之间是相互独立的,各个观测之间是独立的,并且输入和观测是独立的.于是可以对联合分布做因式分解:
P(z,u∣x,y)=∏kP(uk∣xk−1,xk)∏k,jP(zk,j∣xk,yj)P(z,u|x,y) = \prod_{k}^{} P(u_k|x_{k-1,x_k})\prod_{k,j}^{} P(z_{k,j}|x_k,y_j) P(z,u∣x,y)=k∏​P(uk​∣xk−1,xk​​)k,j∏​P(zk,j​∣xk​,yj​)
这说明可以独立地处理各个时刻的运动和观测.定义各次输入和观测数据与模型之间的误差:
eu,k=xk−f(xk−1,uk)ez,j,k=zk,j−h(xk,yj)\begin{aligned} &\boldsymbol{e}_{u, k}=\boldsymbol{x}_{k}-f\left(\boldsymbol{x}_{k-1}, \boldsymbol{u}_{k}\right) \\ &\boldsymbol{e}_{z, j, k}=\boldsymbol{z}_{k, j}-h\left(\boldsymbol{x}_{k}, \boldsymbol{y}_{j}\right) \end{aligned} ​eu,k​=xk​−f(xk−1​,uk​)ez,j,k​=zk,j​−h(xk​,yj​)​
那么,最小化所有时刻估计值与真实读数之间的马氏距离.等价于求最大似然估计.负对数允许把乘积变成求和:
minJ(x,y)=∑keu,kTRk−1eu,k+∑k∑jez,k,jTQk,j−1ez,k,jmin \;J(\boldsymbol{x},\boldsymbol{y})=\sum_{k} e_{u, k}^{T} \boldsymbol{R}_{k}^{-1} e_{u, k}+\sum_{k} \sum_{j} e_{z, k, j}^{T} Q_{k, j}^{-1} e_{z, k, j} minJ(x,y)=k∑​eu,kT​Rk−1​eu,k​+k∑​j∑​ez,k,jT​Qk,j−1​ez,k,j​
这样就得到了一个最小二乘问题.它的解等价于状态的最大似然估计.

上式相当于运动方程和观测方程独立的最大似然估计
直观上看,由于噪声的存在,当把估计的轨迹与地图带入SLAM的运动,观测方程中时,并不会完美地成立.这时怎么办?通过对状态的估计值进行微调,使得整体的误差下降一些.当然,这个下降也有限度,它一般会达到一个极小值.这就是一个典型的非线性优化的过程.
通过观察上式,发现SLAM中的最小二乘问题具有一定的特定结构:
1.首先,整个问题的目标函数有许多个误差(加权的)二次型组成.虽然总体的状态量维数很高,但每个误差项都是简单的,仅与一两个状态变量相关.例如,运动方程只与 xk,xk−1x_k,x_{k-1}xk​,xk−1​ 有关,观测误差只与 xk,yjx_k,y_jxk​,yj​ 有关.这种关系会让整个问题有一种稀疏的形式.
2.其次,如果使用李代数表示增量,则该问题是无约束的最小二乘问题.但如果用旋转矩阵/变换矩阵描述位姿,则会引入旋转矩阵自身的约束,即需在问题中加入 RTR=IR^TR = IRTR=I 且 det(R)=1det(R) = 1det(R)=1约束.额外的约束会使得优化变得困难.
3.使用二次型度量误差.误差的分布将影响此项在整个问题中的权重.之后会讨论这个问题.
这节介绍了最小二乘问题的引出,如何求解这个最小二乘问题,需要一些非线性优化的基础知识.

6.1.3 例子:批量状态估计

现在通过一个例子来说明如何求解最小二乘问题.
考虑一个非常简单的离散时间系统:
xk=xk−1+uk+wk,wk∼N(0,Qk)zk=xk+nk,nk∼N(0,Rk)x_k = x_{k-1} + u_k + w_k, \boldsymbol{w}_{k} \sim \mathcal{N}\left(\mathbf{0}, \boldsymbol{Q}_{k}\right) \\ z_k = x_k + n_k, \boldsymbol{n}_{k} \sim \mathcal{N}\left(\mathbf{0}, \boldsymbol{R}_{k}\right) xk​=xk−1​+uk​+wk​,wk​∼N(0,Qk​)zk​=xk​+nk​,nk​∼N(0,Rk​)
这可以表达一辆沿 xxx 轴前进或者后退的汽车.第一个公式为运动方程, uku_kuk​ 为输入, wkw_kwk​ 为噪声;第二个公式为观测方程,zkz_kzk​ 为汽车位置的测量,取时间 k=1,2,3k=1,2,3k=1,2,3.现在希望根据已有的 u,zu,zu,z 进行状态估计.
设初始状态 x0x_0x0​ 已知,下面推导批量状态的最大似然估计.
首先,令批量状态变量为 x=[x0,x1,x2,x3]Tx = [x_0,x_1,x_2,x_3]^Tx=[x0​,x1​,x2​,x3​]T,令批量观测为 z=[z1,z2,z3]Tz = [z_1,z_2,z_3]^Tz=[z1​,z2​,z3​]T,按照同样方法定义 u=[u1,u2,u3]Tu = [u_1,u_2,u_3]^Tu=[u1​,u2​,u3​]T.按照先前的推导,知道最大似然估计为:
xmap∗=argmaxP(x∣u,z)=argmaxP(u,z∣x)=∏k=13P(uk∣xk−1,xk)∏k=13P(zk∣xk)x_{map}^{*} = arg max P(x | u,z) = arg max P(u,z|x) = \prod_{k=1}^{3} P(u_k|x_{k-1},x_{k})\prod_{k=1}^{3}P(z_k|x_k) xmap∗​=argmaxP(x∣u,z)=argmaxP(u,z∣x)=k=1∏3​P(uk​∣xk−1​,xk​)k=1∏3​P(zk​∣xk​)
对于具体的每一项,比如运动方程:
P(uk∣xk−1,xk)=N(xk−xk−1,Qk)P(u_k | x_{k-1},x_{k}) = \mathcal{N}(x_k - x_{k-1}, \boldsymbol{Q}_{k}) P(uk​∣xk−1​,xk​)=N(xk​−xk−1​,Qk​)
观测方程也是类似的:
P(zk∣xk)=N(xk,Rk)P(z_k | x_{k}) = \mathcal{N}(x_k , \boldsymbol{R}_{k}) P(zk​∣xk​)=N(xk​,Rk​)
根据这些方法,就能够实际地解决上面的批量状态估计问题.根据之前的叙述,可以构建误差变量:
eu,k=xk−xk−1−uk,ez,k=zk−xke_{u,k} = x_k - x_{k-1} - u_k,\;\;\; e_{z,k} = z_k - x_k eu,k​=xk​−xk−1​−uk​,ez,k​=zk​−xk​
于是最小二乘的目标函数是:
min∑k=13eu,kTQk−1eu,k+∑k=13ez,kTRk−1ez,kmin \sum_{k=1}^{3} e_{u,k}^T\boldsymbol{Q}_{k}^{-1}e_{u,k} + \sum_{k=1}^{3} e_{z,k}^T\boldsymbol{R}_{k}^{-1}e_{z,k} mink=1∑3​eu,kT​Qk−1​eu,k​+k=1∑3​ez,kT​Rk−1​ez,k​
此外,这个系统是线性系统,可以很容易地将它写成向量的形式,定义向量 y=[−u,z]Ty = [-u,z]^Ty=[−u,z]T,那么可以写成矩阵 HHH,使得:
y−Hx=e∼N(0,Σ)y - Hx = e \sim \mathcal{N}(0,\Sigma ) y−Hx=e∼N(0,Σ)

[−u1−u2−u3−u4−u5−u6]−[1−10001−10001−1010000100001][x0x1x2x3]=[eu,1eu,2eu,3zu,1zu,2zu,3]\begin{bmatrix} -u_1 \\ -u_2 \\ -u_3 \\ -u_4 \\ -u_5 \\ -u_6 \end{bmatrix} - \begin{bmatrix} 1 & -1 & 0& 0\\ 0 & 1 & -1 & 0\\ 0 & 0 & 1& -1\\ 0 & 1& 0& 0\\ 0 & 0& 1& 0\\ 0 & 0 & 0 &1 \end{bmatrix}\begin{bmatrix} x_0 \\ x_1 \\ x_2 \\ x_3 \end{bmatrix} = \begin{bmatrix} e_{u,1} \\ e_{u,2}\\ e_{u,3} \\ z_{u,1} \\ z_{u,2} \\ z_{u,3} \end{bmatrix} ⎣⎢⎢⎢⎢⎢⎢⎡​−u1​−u2​−u3​−u4​−u5​−u6​​⎦⎥⎥⎥⎥⎥⎥⎤​−⎣⎢⎢⎢⎢⎢⎢⎡​100000​−110100​0−11010​00−1001​⎦⎥⎥⎥⎥⎥⎥⎤​⎣⎢⎢⎡​x0​x1​x2​x3​​⎦⎥⎥⎤​=⎣⎢⎢⎢⎢⎢⎢⎡​eu,1​eu,2​eu,3​zu,1​zu,2​zu,3​​⎦⎥⎥⎥⎥⎥⎥⎤​

那么:
H=[1−10001−10001−1010000100001]H = \begin{bmatrix} 1 & -1& 0& 0\\ 0 & 1& -1 & 0\\ 0 & 0& 1& -1\\ 0 & 1& 0& 0\\ 0 & 0 & 1 & 0\\ 0 & 0& 0 &1 \end{bmatrix} H=⎣⎢⎢⎢⎢⎢⎢⎡​100000​−110100​0−11010​00−1001​⎦⎥⎥⎥⎥⎥⎥⎤​
且 Σ=diag(Q1,Q2,Q3,R1,R2,R3)\Sigma = diag(\boldsymbol{Q}_{1},\boldsymbol{Q}_{2},\boldsymbol{Q}_{3}, \boldsymbol{R}_{1},\boldsymbol{R}_{2},\boldsymbol{R}_{3})Σ=diag(Q1​,Q2​,Q3​,R1​,R2​,R3​).
整个问题可以写成:
xmap∗=argmineTΣ−1ex_{map}^* = arg \;\;min\;\; e^T\Sigma ^{-1}e xmap∗​=argmineTΣ−1e
之后将会看到,该问题有唯一的解:
xmap∗=(HTΣ−1H)−1HTΣ−1yx_{map}^* = (H^T\Sigma^{-1}H )^{-1}H^T\Sigma^{-1}y xmap∗​=(HTΣ−1H)−1HTΣ−1y

视觉SLAM十四讲笔记-6-1相关推荐

  1. 视觉SLAM总结——视觉SLAM十四讲笔记整理

    视觉SLAM总结--视觉SLAM十四讲笔记整理 说明 基础知识点 1. 特征提取.特征匹配 (1)Harris (2)SIFT (3)SUFT (4)ORB (5)特征匹配 2. 2D-2D:对极约束 ...

  2. 视觉SLAM十四讲笔记-7-2

    视觉SLAM十四讲笔记-7-2 文章目录 视觉SLAM十四讲笔记-7-2 估计相机运动 7.3 2D-2D:对极几何 7.3.1 对极约束 7.3.2 本质矩阵 7.3.3 单应矩阵 7.4 实践:对 ...

  3. 视觉SLAM十四讲笔记-1

    视觉SLAM十四讲笔记-1 文章目录 视觉SLAM十四讲笔记-1 第一讲:预备知识 1.1 本书讲什么 1.2 如何使用本书 参考链接: link link 高翔,张涛,等. 视觉 SLAM 十四讲: ...

  4. 半闲居士视觉SLAM十四讲笔记(2)初识 SLAM- part 2 linux CMake、Kdevelop

    本系列文章由 youngpan1101 出品,转载请注明出处. 文章链接: http://blog.csdn.net/youngpan1101/article/details/71085778 作者: ...

  5. 视觉SLAM十四讲笔记-第五讲 相机与图像

    目录 Ⅰ.单目相机模型 一.针孔相机模型及公式推导 二.畸变模型 三.成像过程 Ⅱ.双目相机模型 Ⅲ.RGB-D 相机模型 Ⅳ.计算机中图像的表示 Ⅴ.牛刀小试-代码实践 一.读取图像数据(灰度图为例 ...

  6. 视觉SLAM十四讲笔记-第四讲 李群与李代数

    目录 前提摘要: 一.群 1.1注意对象不同 1.2 概念 二.李群与李代数 2.1 李群 (Lie Group) 2.2 李代数 三.指数映射和对数映射 3.1 李代数so(3)指数映射 3.2 s ...

  7. 视觉SLAM十四讲笔记-第三讲 刚体运动

    目录 1.两条基本公式:运动方程和观测方程 2.点与坐标系: 3. 旋转矩阵 3.1 两个条件: 4.旋转向量和欧拉角 4.1 旋转向量(Rotation Vector,又称角轴/轴角(Angle A ...

  8. 半闲居士视觉SLAM十四讲笔记(3)三维空间刚体运动 - part 1 旋转矩阵

    本系列文章由 youngpan1101 出品,转载请注明出处. 文章链接: http://blog.csdn.net/youngpan1101/article/details/71086500 作者: ...

  9. 半闲居士视觉SLAM十四讲笔记(1)前言

    本系列文章由 youngpan1101 出品,转载请注明出处. 文章链接: http://blog.csdn.net/youngpan1101/article/details/70193823 作者: ...

  10. 视觉SLAM十四讲笔记

    文章目录 章节安排 1. 数学基础部分(1~6) 2. SLAM技术部分(7~14) 第一讲 前言和简介 第二讲 初识SLAM 相机: 视觉SLAM框架 SLAM问题的数学描述 cmake Cmake ...

最新文章

  1. 基于熵权法优劣解距离法_维普资讯中文期刊服务平台-基于改进TOPSIS方法的航空装备预研项目技术风险评估...
  2. roads 构筑极致用户体验_智美双极 引领旗舰 亚洲龙探索革新的高品质体验
  3. centos7 升级curl版本
  4. linux之eval命令
  5. day3----python变量与常量
  6. away3d创建基础view世界(基础 一)
  7. 云栖专辑 | 阿里开发者们的第4个感悟:自驱是最好的进步方式
  8. feed流和瀑布流_基础知识讲解:什么是feed流?(图文)
  9. cSpring Boot整合RabbitMQ详细教程
  10. C/C++ SQLite 之基础篇
  11. vue 离开页面时间_vue 前端页面无操作时,系统退出登录的定时器设计
  12. arcx函数js_抖音的这个JS,怎么能运行,获取到用户的加载信息
  13. C++ malloc头文件
  14. 问题记录:net::ERR_CERT_DATE_INVALID
  15. 双舵轮AGV里程计、运动控制核心算法
  16. 如何从虚拟机复制文件到实体机
  17. 【年终总结】——回忆过往,不畏将来
  18. Unity DOTS Burst 运行分析
  19. Nano Measurer 1.2.5 for win 纳米颗粒粒度分析
  20. 心形线(Java语言实现) 原理与具体实现

热门文章

  1. c++:过滤多余的空格
  2. 《私募股权基金投资基础知识》---第一章
  3. linux非连续内存,linux高端内存管理之非连续内存区(分配和释放)
  4. 《筱静观察》2019开机仪式暨战略合作签约仪式在北京创新社成功举办
  5. JS逆向加密解密工具Crypto Magician、乐易助手、WT-JS 下载使用
  6. 区块链交易验证和支付验证
  7. 区块链系统开发-区块链交易系统开发-核心技术
  8. matlab分析地形,matlab绘制地形图
  9. 成长的日记教案计算机,第一单元《成长日记ABC》教学设计
  10. ubuntu txt文件打开乱码怎么恢复正常