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

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

非线性优化

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

6.1 状态估计问题

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

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

6.1.2 最小二乘的引出

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

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

上式相当于观测方程独立的最大似然估计
现在考虑批量时刻的数据.通常假设各个时刻的输入和观测是相互独立的,这意味着各个时刻之间是相互独立的,各个观测之间是独立的,并且输入和观测是独立的.于是可以对联合分布做因式分解:
P ( z , u ∣ x , y ) = ∏ k P ( u k ∣ x k − 1 , x k ) ∏ k , j P ( z k , j ∣ x k , y j ) 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,ux,y)=kP(ukxk1,xk)k,jP(zk,jxk,yj)
这说明可以独立地处理各个时刻的运动和观测.定义各次输入和观测数据与模型之间的误差:
e u , k = x k − f ( x k − 1 , u k ) e z , j , k = z k , j − h ( x k , y j ) \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=xkf(xk1,uk)ez,j,k=zk,jh(xk,yj)
那么,最小化所有时刻估计值与真实读数之间的马氏距离.等价于求最大似然估计.负对数允许把乘积变成求和:
m i n    J ( x , y ) = ∑ k e u , k T R k − 1 e u , k + ∑ k ∑ j e z , k , j T Q k , j − 1 e z , k , j min \;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)=keu,kTRk1eu,k+kjez,k,jTQk,j1ez,k,j
这样就得到了一个最小二乘问题它的解等价于状态的最大似然估计

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

6.1.3 例子:批量状态估计

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

[ − u 1 − u 2 − u 3 − u 4 − u 5 − u 6 ] − [ 1 − 1 0 0 0 1 − 1 0 0 0 1 − 1 0 1 0 0 0 0 1 0 0 0 0 1 ] [ x 0 x 1 x 2 x 3 ] = [ e u , 1 e u , 2 e u , 3 z u , 1 z u , 2 z u , 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} u1u2u3u4u5u6100000110100011010001001x0x1x2x3=eu,1eu,2eu,3zu,1zu,2zu,3

那么:
H = [ 1 − 1 0 0 0 1 − 1 0 0 0 1 − 1 0 1 0 0 0 0 1 0 0 0 0 1 ] 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=100000110100011010001001
Σ = d i a g ( Q 1 , Q 2 , Q 3 , R 1 , R 2 , R 3 ) \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).
整个问题可以写成:
x m a p ∗ = a r g      m i n      e T Σ − 1 e x_{map}^* = arg \;\;min\;\; e^T\Sigma ^{-1}e xmap=argmineTΣ1e
之后将会看到,该问题有唯一的解:
x m a p ∗ = ( H T Σ − 1 H ) − 1 H T Σ − 1 y x_{map}^* = (H^T\Sigma^{-1}H )^{-1}H^T\Sigma^{-1}y xmap=(HTΣ1H)1HTΣ1y

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在《视觉SLAM十四》中,章节安排如下: 1. 数学基础部分:介绍这本书的基本信息,包括自测题。概述SLAM系统的组成和各模块的工作。介绍三维空间运动、李群和李代数、针孔相机模型以及非线性优化。完成一个曲线拟合的实验。 2. SLAM技术部分:解特征点法的视觉里程计,包括特征点的提取与匹配、对极几何约束的计算、PnP和ICP等方法。学习直接法的视觉里程计,包括光流和直接法的原理,并使用g2o实现一个简单的RGB-D直接法。构建一个视觉里程计框架,解决优化和关键帧选择的问题。深入讨论后端优化,包括Bundle Adjustment和位姿图的优化。介绍回环检测和地图构建的方法。最后,介绍当前的开源SLAM项目和未来的发展方向。 另外,对于四元数的学习,可以先了解复平面的概念。复平面是一个用来描述复数的平面,其中实部和虚部分别对应平面的横坐标和纵坐标。了解复平面后,可以开始学习四元数的概念和应用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [视觉SLAM十四笔记](https://blog.csdn.net/dada19980122/article/details/111404967)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【视觉SLAM十四笔记【逐行代码带你解析】【适合纯小白 ps:因为我就是】(持续更新中)](https://blog.csdn.net/R_ichun/article/details/131964588)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值