视觉SLAM学习打卡【9】-后端·卡尔曼滤波器&光束法平差

  • 从本节开始步入后端,对前端视觉里程计粗略得到的位姿以及空间点进一步优化.
  • 共介绍两种方法:卡尔曼滤波器(EKF)光束法平差(BA).
  • 建议在初学BA时多下些功夫了解什么是边缘化,不光本节用到,下一节的滑动窗口法也要用到边缘化的概念.(当然,本讲也给出了相应的理解)

一、后端状态估计问题的处理方法

(1)批量(Batch):考虑一段长时间内的状态估计问题,不仅用过去的所有信息更新自己的状态,也会用未来的信息来更新。
(2)渐进(Incremental / recursive / 滤波):当前状态只由前一个时刻决定。

  • 线性系统+高斯噪声=卡尔曼滤波器(KF)
  • 非线性系统+线性近似+高斯噪声=扩展卡尔曼滤波器(EKF)
  • 非线性系统+非高斯噪声+非参数化=粒子滤波器

二、卡尔曼滤波器KF

希望用过去0到k中的数据更新现在的状态 x k x_{k} xk(批量式处理),即估计 P ( x k ∣ x 0 , u 1 : k , z 1 : k ) . P(\boldsymbol{x}_k|\boldsymbol{x}_0,\boldsymbol{u}_{1:k},\boldsymbol{z}_{1:k}). P(xkx0,u1:k,z1:k).

(1)总体思路:从贝叶斯法则推导卡尔曼滤波(似然 x 先验)

P ( x k ∣ x 0 , u 1 : k , z 1 : k ) ∝ P ( z k ∣ x k ) P ( x k ∣ x 0 , u 1 : k , z 1 : k − 1 ) . P\left(\boldsymbol{x}_k|\boldsymbol{x}_0,\boldsymbol{u}_{1:k},\boldsymbol{z}_{1:k}\right)\propto P\left(\boldsymbol{z}_k|\boldsymbol{x}_k\right)P\left(\boldsymbol{x}_k|\boldsymbol{x}_0,\boldsymbol{u}_{1:k},\boldsymbol{z}_{1:k-1}\right). P(xkx0,u1:k,z1:k)P(zkxk)P(xkx0,u1:k,z1:k1).

附:贝叶斯公式 : P ( A ∣ B ) = P ( B ∣ A ) × P ( A ) / P ( B ) \mathrm:{P(A|B)=P(B|A)\times P(A)/P(B)} P(AB)=P(BA)×P(A)/P(B)

(2)利用一阶马尔可夫性 预测(渐进式处理)

  • 一阶马尔可夫性:k时刻状态只与k-1时刻状态有关
  • 假设满足一阶马氏性的线性高斯系统为: { x k = A k x k − 1 + u k + w k z k = C k x k + v k k = 1 , … , N . \begin{cases}\boldsymbol{x}_k=\boldsymbol{A}_k\boldsymbol{x}_{k-1}+\boldsymbol{u}_k+\boldsymbol{w}_k\\\boldsymbol{z}_k=\boldsymbol{C}_k\boldsymbol{x}_k+\boldsymbol{v}_k\end{cases}\quad k=1,\ldots,N. {xk=Akxk1+uk+wkzk=Ckxk+vkk=1,,N. w k ∼ N ( 0 , R ) . v k ∼ N ( 0 , Q ) . w_k\sim N(\mathbf{0},\boldsymbol{R}).\quad\boldsymbol{v}_k\sim N(\mathbf{0},\boldsymbol{Q}). wkN(0,R).vkN(0,Q).假设所有的状态和噪声均满足高斯分布
  • 通过运动方程确定x的先验 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 ⊤ + R ) . P\left(\boldsymbol{x}_k|\boldsymbol{x}_0,\boldsymbol{u}_{1:k},\boldsymbol{z}_{1:k-1}\right)=N\left(\boldsymbol{A}_k\hat{\boldsymbol{x}}_{k-1}+\boldsymbol{u}_k,\boldsymbol{A}_k\hat{\boldsymbol{P}}_{k-1}\boldsymbol{A}_k^\top+\boldsymbol{R}\right). P(xkx0,u1:k,z1:k1)=N(Akx^k1+uk,AkP^k1Ak+R). x ˇ k = A k x ^ k − 1 + u k , P ˇ k = A k P ^ k − 1 A k T + R . \check{\boldsymbol{x}}_k=\boldsymbol{A}_k\hat{\boldsymbol{x}}_{k-1}+\boldsymbol{u}_k,\quad\check{\boldsymbol{P}}_k=\boldsymbol{A}_k\hat{\boldsymbol{P}}_{k-1}\boldsymbol{A}_k^\mathrm{T}+\boldsymbol{R}. xˇk=Akx^k1+uk,Pˇk=AkP^k1AkT+R.

附:高斯分布性质: X ∼ N ( μ X , σ X 2 ) X\sim N(\mu_X,\sigma_X^2) XN(μX,σX2),Y=AX+b,则 Y ∼ N ( A μ X + b , A 2 σ X 2 ) Y\sim N(A\mu_X+b,A^2\sigma_X^2) YN(AμX+b,A2σX2)

  • 由观测方程确定观测数据 P ( z k ∣ x k ) = N ( C k x k , Q ) . P\left(\boldsymbol{z}_k|\boldsymbol{x}_k\right)=N\left(\boldsymbol{C}_kx_k,\boldsymbol{Q}\right). P(zkxk)=N(Ckxk,Q).

此处,笔者初学时不太理解, z k z_{k} zk x k {x}_{k} xk的线性方程, x k {x}_{k} xk满足高斯分布,那 z k z_{k} zk也应该服从高斯分布,为什么表示下来不符合上述附的高斯分布性质呢?

回头看,发现观测方程中的 x k {x}_{k} xk在书中前文已经进行了重定义, x k = ⁡ d e f { x k , y 1 , … , y m } . \boldsymbol{x}_k\overset{\mathrm{def}}{\operatorname*{=}}\{\boldsymbol{x}_k,\boldsymbol{y}_1,\ldots,\boldsymbol{y}_m\}. xk=def{xk,y1,,ym}. 因此,观测方程中的 x k {x}_{k} xk其实已经不满足高斯分布。

(3)利用贝叶斯法则 更新

N ( x ^ k , P ^ k ) = η N ( C k x k , Q ) ⋅ N ( x ˇ k , P ˇ k ) . N(\hat{\boldsymbol{x}}_k,\hat{\boldsymbol{P}}_k)=\eta N\left(\boldsymbol{C}_k\boldsymbol{x}_k,\boldsymbol{Q}\right)\cdot N(\check{\boldsymbol{x}}_k,\check{\boldsymbol{P}}_k). N(x^k,P^k)=ηN(Ckxk,Q)N(xˇk,Pˇk).

附:高斯分布概率密度函数: f ( x ) = 1 2 π σ 2 exp ⁡ ( − ( x − μ ) 2 2 σ 2 ) f(x)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp{(-\frac{(x-\mu)^2}{2\sigma^2})} f(x)=2πσ2 1exp(2σ2(xμ)2)

忽略系数,展开指数项,比较 x k x_{k} xk的二次和一次系数,两边近似相等得: ( x k − x ^ k ) T P ^ k − 1 ( x k − x ^ k ) = ( z k − C k x k ) T Q − 1 ( z k − C k x k ) + ( x k − x ˇ k ) T P ˇ k − 1 ( x k − x ˇ k ) . (\boldsymbol{x}_k-\hat{\boldsymbol{x}}_k)^\mathrm{T}\hat{\boldsymbol{P}}_k^{-1}\left(\boldsymbol{x}_k-\hat{\boldsymbol{x}}_k\right)=(\boldsymbol{z}_k-\boldsymbol{C}_k\boldsymbol{x}_k)^\mathrm{T}\boldsymbol{Q}^{-1}\left(\boldsymbol{z}_k-\boldsymbol{C}_k\boldsymbol{x}_k\right)+\left(\boldsymbol{x}_k-\check{\boldsymbol{x}}_k\right)^\mathrm{T}\check{\boldsymbol{P}}_k^{-1}\left(\boldsymbol{x}_k-\check{\boldsymbol{x}}_k\right). (xkx^k)TP^k1(xkx^k)=(zkCkxk)TQ1(zkCkxk)+(xkxˇk)TPˇk1(xkxˇk).定义中间变量·卡尔曼增益K K = P ^ k C k T Q − 1 . K=\hat{P}_kC_k^{\mathrm{T}}Q^{-1}. K=P^kCkTQ1.由二次系数相等可得: P ^ k = ( I − K C k ) P ˇ k . \hat{P}_k=(I-KC_k)\check{P}_k. P^k=(IKCk)Pˇk.由一次系数相等可得: x ^ k = x ˇ k + K ( z k − C k x ˇ k ) \hat{x}_k=\check{x}_k+K\left(\boldsymbol{z}_k-\boldsymbol{C}_k\check{\boldsymbol{x}}_k\right) x^k=xˇk+K(zkCkxˇk)

书中一共给出了K的两种表达式,本质都一样。 K = P ^ k C k T Q − 1 K=\hat{P}_kC_k^{\mathrm{T}}Q^{-1} K=P^kCkTQ1(1)和 K = P ˇ k C k T ( C k P ˇ k C k T + Q k ) − 1 K=\check{P}_k\boldsymbol{C}_k^\mathrm{T}(\boldsymbol{C}_k\check{\boldsymbol{P}}_k\boldsymbol{C}_k^\mathrm{T}+\boldsymbol{Q}_k)^{-1} K=PˇkCkT(CkPˇkCkT+Qk)1(2),把 P ^ k = ( I − K C k ) P ˇ k \hat{P}_k=(I-KC_k)\check{P}_k P^k=(IKCk)Pˇk代入式(1)即可得到式(2).

三、扩展卡尔曼滤波器EKF

(1)整体的推导思路同上述KF,利用一阶泰勒展开把非线性系统转化为线性系统. x k ≈ f ( x ^ k − 1 , u k ) + ∂ f ∂ x k − 1 ∣ x ^ k − 1 ( x k − 1 − x ^ k − 1 ) + w k . \boldsymbol{x}_k\approx f\left(\hat{\boldsymbol{x}}_{k-1},\boldsymbol{u}_k\right)+\left.\frac{\partial f}{\partial\boldsymbol{x}_{k-1}}\right|_{\hat{\boldsymbol{x}}_{k-1}}(\boldsymbol{x}_{k-1}-\hat{\boldsymbol{x}}_{k-1})+\boldsymbol{w}_k. xkf(x^k1,uk)+xk1f x^k1(xk1x^k1)+wk. z k ≈ h ( x ˇ k ) + ∂ h ∂ x k ∣ x ˇ k ( x k − x ˇ k ) + n k . \boldsymbol{z}_k\approx h\left(\check{\boldsymbol{x}}_k\right)+\left.\frac{\partial h}{\partial\boldsymbol{x}_k}\right|_{\check{\boldsymbol{x}}_k}(\boldsymbol{x}_k-\check{\boldsymbol{x}}_k)+\boldsymbol{n}_k. zkh(xˇk)+xkh xˇk(xkxˇk)+nk. F = ∂ f ∂ x k − 1 ∣ x ^ k − 1 F=\left.\frac{\partial f}{\partial\boldsymbol{x}_{k-1}}\right|_{\hat{\boldsymbol{x}}_{k-1}} F=xk1f x^k1 H = ∂ h ∂ x k ∣ x ˇ k H=\left.\frac{\partial h}{\partial\boldsymbol{x}_k}\right|_{\check{\boldsymbol{x}}_k} H=xkh xˇk
(2)预测
运动方程根据高斯分布性质得 先验 P ( x k ∣ x 0 , u 1 : k , z 0 : k − 1 ) = N ( f ( x ^ k − 1 , u k ) , F P ^ k − 1 F T + R k ) . P\left(\boldsymbol{x}_k|\boldsymbol{x}_0,\boldsymbol{u}_{1:k},\boldsymbol{z}_{0:k-1}\right)=N(f\left(\hat{\boldsymbol{x}}_{k-1},\boldsymbol{u}_k\right),\boldsymbol{F}\hat{\boldsymbol{P}}_{k-1}\boldsymbol{F}^\mathrm{T}+\boldsymbol{R}_k). P(xkx0,u1:k,z0:k1)=N(f(x^k1,uk),FP^k1FT+Rk). x ˇ k = f ( x ^ k − 1 , u k ) , P ˇ k = F P ^ k − 1 F T + R k . \check{\boldsymbol{x}}_k=f\left(\hat{\boldsymbol{x}}_{k-1},\boldsymbol{u}_k\right),\quad\check{\boldsymbol{P}}_k=F\hat{\boldsymbol{P}}_{k-1}\boldsymbol{F}^\mathrm{T}+\boldsymbol{R}_k. xˇk=f(x^k1,uk),Pˇk=FP^k1FT+Rk.

按照高斯分布性质,得 x ˇ k \check{x}_{k} xˇk= H x ^ k − 1 − H x ^ k − 1 + f ( x ^ k − 1 , u k ) H\hat{x}_{k-1}-H\hat{x}_{k-1}+f(\hat{x}_{k-1},u_{k}) Hx^k1Hx^k1+f(x^k1,uk)= f ( x ^ k − 1 , u k ) f\left(\hat{\boldsymbol{x}}_{k-1},\boldsymbol{u}_k\right) f(x^k1,uk)

观测的分布满足: P ( z k ∣ x k ) = N ( h ( x ˇ k ) + H ( x k − x ˇ k ) , Q k ) . P\left(\boldsymbol{z}_k|\boldsymbol{x}_k\right)=N(h\left(\check{\boldsymbol{x}}_k\right)+\boldsymbol{H}\left(\boldsymbol{x}_k-\check{\boldsymbol{x}}_k\right),\boldsymbol{Q}_k). P(zkxk)=N(h(xˇk)+H(xkxˇk),Qk).(3)更新
定义卡尔曼增益 K k K_{k} Kk K k = P ˇ k H T ( H P ˇ k H T + Q k ) − 1 K_k=\check{P}_kH^\mathrm{T}(H\check{P}_kH^\mathrm{T}+Q_k)^{-1} Kk=PˇkHT(HPˇkHT+Qk)1最终,得到: x ^ k = x ˇ k + K k ( z k − h ( x ˇ k ) ) , P ^ k = ( I − K k H ) P ˇ k . \hat{\boldsymbol{x}}_k=\check{\boldsymbol{x}}_k+\boldsymbol{K}_k\left(\boldsymbol{z}_k-h\left(\check{\boldsymbol{x}}_k\right)\right),\hat{\boldsymbol{P}}_k=\left(\boldsymbol{I}-\boldsymbol{K}_k\boldsymbol{H}\right)\check{\boldsymbol{P}}_k. x^k=xˇk+Kk(zkh(xˇk)),P^k=(IKkH)Pˇk.

EKF只做一次泰勒展开,可以认为EKF仅是优化中的一次迭代.

四、BA / 光束法平差 / 捆集调整

(1)运动方程、观测方程中参数详指

  • x——相机位姿,指外参R,t(对应李群T,李代数ξ)
  • 路标y——三维点P
  • 观测值z——像素坐标 z = d e f [ u s , v s ] T \boldsymbol{z}\stackrel{\mathrm{def}}{=}[u_s,v_s]^\mathrm{T} z=def[us,vs]T

(2)以最小二乘角度考虑观测误差

e = z − h ( T , p ) . e=z-h(\boldsymbol{T},\boldsymbol{p}). e=zh(T,p).整体的代价函数: 1 2 ∑ i = 1 m ∑ j = 1 n ∥ e i j ∥ 2 = 1 2 ∑ i = 1 m ∑ j = 1 n ∥ z i j − h ( T i , p j ) ∥ 2 . \frac12\sum_{i=1}^m\sum_{j=1}^n\|e_{ij}\|^2=\frac12\sum_{i=1}^m\sum_{j=1}^n\|\boldsymbol{z}_{ij}-h(\boldsymbol{T}_i,\boldsymbol{p}_j)\|^2. 21i=1mj=1neij2=21i=1mj=1nzijh(Ti,pj)2.同时把相机位姿和空间点作为优化变量 x = [ T 1 , … , T m , p 1 , … , p n ] T \boldsymbol{x}=[\boldsymbol{T}_1,\ldots,\boldsymbol{T}_m,\boldsymbol{p}_1,\ldots,\boldsymbol{p}_n]^\mathrm{T} x=[T1,,Tm,p1,,pn]T,从视觉图像中提炼最优的3D模型和相机参数,即为BA

(3)BA的求解

定义优化函数: 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 . \frac12\left\|f(\boldsymbol{x}+\Delta\boldsymbol{x})\right\|^2\approx\frac12\sum_{i=1}^m\sum_{j=1}^n\left\|\boldsymbol{e}_{ij}+\boldsymbol{F}_{ij}\Delta\boldsymbol{\xi}_i+\boldsymbol{E}_{ij}\Delta\boldsymbol{p}_j\right\|^2. 21f(x+Δx)221i=1mj=1n eij+FijΔξi+EijΔpj 2.
把相机位姿变量、空间点变量各放到一起: x c = [ ξ 1 , ξ 2 , … , ξ m ] T ∈ R 6 m x_\mathrm{c}=[\xi_1,\xi_2,\ldots,\xi_m]^\mathrm{T}\in\mathbb{R}^{6m} xc=[ξ1,ξ2,,ξm]TR6m x p = [ p 1 , p 2 , … , p n ] T ∈ R 3 n , \boldsymbol{x}_p=[\boldsymbol{p}_1,\boldsymbol{p}_2,\ldots,\boldsymbol{p}_n]^\mathrm{T}\in\mathbb{R}^{3n}, xp=[p1,p2,,pn]TR3n,则目标函数简化为: 1 2 ∥ f ( x + Δ x ) ∥ 2 = 1 2 ∥ e + F Δ x c + E Δ x p ∥ 2 . \frac12\left\|f(\boldsymbol{x}+\Delta\boldsymbol{x})\right\|^2=\frac12\left\|\boldsymbol{e}+\boldsymbol{F}\Delta\boldsymbol{x}_c+\boldsymbol{E}\Delta\boldsymbol{x}_p\right\|^2. 21f(x+Δx)2=21e+FΔxc+EΔxp2.利用G-N法( H = J T J H=J^{T}J H=JTJ)或者L-M法( H = J T J + λ I H=J^{T}J+\lambda I H=JTJ+λI),最后最小二乘问题都将转化为增量线性方程: HΔx=g,此处 J = [ F E ] \text{HΔx=g},此处J=[F E] HΔx=g,此处J=[FE]其中,H具有以下稀疏特性请添加图片描述
则增量线性方程化为: [ 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].

其中, g = − J ( x ) f ( x ) = [ v w ] g=-J(x)f(x)=\left[\begin{matrix}v\\w\end{matrix}\right] g=J(x)f(x)=[vw]

利用舒尔消元 边缘化得: [ I − E C − 1 0 I ] [ B E E T C ] [ Δ x c Δ x p ] = [ I − E C − 1 0 I ] [ v w ] \begin{bmatrix}I&-EC^{-1}\\0&I\end{bmatrix}\begin{bmatrix}B&E\\E^{\mathrm{T}}&C\end{bmatrix}\begin{bmatrix}\Delta x_{\mathrm{c}}\\\Delta x_{p}\end{bmatrix}=\begin{bmatrix}I&-EC^{-1}\\0&I\end{bmatrix}\begin{bmatrix}v\\w\end{bmatrix} [I0EC1I][BETEC][ΔxcΔxp]=[I0EC1I][vw] [ B − E C − 1 E T 0 E T C ] [ Δ x c Δ x p ] = [ v − E C − 1 w w ] . \begin{bmatrix}B-EC^{-1}E^{\mathrm{T}}&0\\E^{\mathrm{T}}&C\end{bmatrix}\begin{bmatrix}\Delta x_{c}\\\Delta x_{p}\end{bmatrix}=\begin{bmatrix}v-EC^{-1}w\\w\end{bmatrix}. [BEC1ETET0C][ΔxcΔxp]=[vEC1ww].

方程组第一行变成和Δxp无关的项,因此可以先通过第一行求出Δxc,代入第二行求出Δxp。
实际上把求(Δxc Δxp)的问题,转化成了先固定Δxp,求出Δxc,再求Δxp的过程.

笔者认为此处可以理解为求 联合分布 P ( X c X p ) = P ( X p ) P ( X c / X p ) P(X_{c}X_{p})=P(X_{p})P(X_{c}/X_{p}) P(XcXp)=P(Xp)P(Xc/Xp),先求Xc在Xp下的条件分布,再求Xp边缘分布,故称为边缘化。此处为路标点Xp的边缘化,还可以对位姿x进行边缘化.

利用 H 矩阵的稀疏性,使得线性方程求解变得简单(避免直接求 H − 1 H^{-1} H1) ,仅用求对角矩阵C的逆.

神奇的是:边缘化后的H矩阵即为协方差矩阵 p ^ k \hat{p}_{k} p^k

(4)Huber核

Huber核是鲁棒核函数的一种。为了应对误差很大时,二范数增长太快,抹平其他正确值得影响而存在。 H ( e ) = { 1 2 e 2 当 ∣ e ∣ ⩽ δ , δ ( ∣ e ∣ − 1 2 δ ) 其他 H(e)=\begin{cases}\dfrac{1}{2}e^2&\text{当}|e|\leqslant\delta,\\\\\delta\left(|e|-\dfrac{1}{2}\delta\right)&\text{其他}\end{cases} H(e)= 21e2δ(e21δ)eδ,其他请添加图片描述

可见,在误差较大时,Huber核函数增长明显低于二次函数.

Droid-SLAM使用的是密集光束法(Dense Bundle Adjustment)来进行平差流程。这种方法是通过优化相机位姿和三维点云坐标,使得所有的观测误差最小化,从而得到最优的相机位姿和三维点云。 具体的平差流程如下: 1. 初始化相机位姿:使用初始估计的相机位姿,将图像中的特征点投影到三维空间中,得到三维点云的初始坐标。 2. 密集匹配:通过密集匹配算法,将当前帧与上一帧之间的图像区域进行匹配,得到更多的特征点。 3. 三角化:使用当前帧和上一帧的特征点匹配结果,进行三角化计算,得到更多的三维点云。 4. 光束法平差:将所有的相机位姿和三维点云坐标作为优化变量,最小化所有观测误差,得到最优的相机位姿和三维点云坐标。 5. 添加关键帧:如果当前帧与上一关键帧之间的距离超过一定阈值,就将当前帧作为一个新的关键帧加入到系统中。 6. 优化地图:将所有的关键帧和它们对应的三维点云作为优化变量,最小化所有观测误差,得到更加稠密和准确的地图。 7. 回环检测:通过回环检测算法,检测是否存在之前已经访问过的区域,从而进一步提高地图的准确性。 8. 重定位:如果机器人当前位置无法被准确估计,就使用重定位算法,将机器人定位到已知的地图位置上。 这样,Droid-SLAM就可以实现高效、准确的SLAM建图和定位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值