卡尔曼滤波系列推导

机器人的状态估计

1.线性高斯系统的状态估计

离散时间的批量估计

  • 贝叶斯推断:从状态的先验概率密度函数出发,通过初始状态、输入、运动方程和观测数据,计算状态的后验概率密度函数。

  • 最大后验估计:用优化理论,寻找给定信息下的最大后验估计。

  • 运动方程观测方程如下:

    运动方程: x k = A k − 1 x k − 1 + v k + ω k , k = 1 , . . . . . K (1) x_k = A_{k-1}x_{k-1} + v_k + \omega_k,\qquad k = 1,.....K \tag{1} xk=Ak1xk1+vk+ωk,k=1,.....K(1)

    观测方程: y k = C k x k + n k , k = 0.... K (2) y_k = C_kx_k + n_k,\qquad k= 0....K \tag{2} yk=Ckxk+nk,k=0....K(2)

最大后验估计(MAP)

目的 x ^ = arg ⁡ max ⁡ x p ( x ∣ v , y ) (3) \hat{x} =\mathop{\arg\max}\limits_{x}p(x|v,y) \tag{3} x^=xargmaxp(xv,y)(3)

由贝叶斯定理,将(3)式写为, x ^ = arg ⁡ max ⁡ x p ( y ∣ x ) p ( x ∣ v ) (4) \hat{x} = \arg\max\limits_{x}p(y|x)p(x|v)\tag{4} x^=argxmaxp(yx)p(xv)(4)

进行因子分解:

p ( y ∣ x ) = ∏ k = 0 K p ( y k ∣ x k ) p(y|x) = \prod\limits_{k=0}^{K}p(y_k|x_k) p(yx)=k=0Kp(ykxk)

p ( x ∣ v ) = p ( x 0 ∣ x ˇ 0 ) ∏ k = 1 K p ( x k ∣ , x k − 1 , v k ) p(x|v) = p(x_0|\check{x}_0)\prod\limits_{k=1}^{K}p(x_k|,x_{k-1},v_k) p(xv)=p(x0xˇ0)k=1Kp(xk,xk1,vk)

对公式(4) x ^ \hat{x} x^ 取对数,去掉一些与x值无关的项。得到 J v , k 和 J y , k J_{v,k} 和 J_{y,k} Jv,kJy,k 称为平方马氏距离。并得到目标函数 J ( x ) J(x) J(x)

​ J ( x ) = ∑ k = 0 K J V , K ( x ) + J y , k ( x ) (5) ​J(x) = \sum_{k=0}^{K} J_{V,K}(x) +J_{y,k}(x) \tag{5} J(x)=k=0KJV,K(x)+Jy,k(x)(5)

此时问题转化为了 x ˇ = arg ⁡ min ⁡ x J ( x ) (6) \check{x} = \arg\min\limits_{x}J(x)\tag{6} xˇ=argxminJ(x)(6)

这是一个无约束的优化问题 ,式子中所有的项都是x的二次形式,所以把所有的数据排成一列,即提升形式

( H T W − 1 H ) x ^ = H T W − 1 z (7) (H^TW^{-1}H)\hat{x} = H^TW^{-1}z\tag{7} (HTW1H)x^=HTW1z(7)

批量最小二乘解

z = [ x ˇ v 1 ⋮ v k − − − y 0 ⋮ y K ] z = \begin{bmatrix} \check{x} \\ v_1 \\ \vdots\\ v_k \\ ---\\y_0\\ \vdots \\ y_K \end{bmatrix} z=xˇv1vky0yK x = [ x 0 ⋮ x K ] x = \begin{bmatrix} x_0\\ \vdots \\x_K \end{bmatrix} x=x0xK H = [ 1 − A 0 1 ⋱ ⋱ − A K − 1 1 − − − − C 0 C 1 ⋱ C K ] H = \begin{bmatrix} 1 \\-A_0 &1 \\ &\ddots &\ddots \\ &&-A_{K-1}& 1 \\-&-&-&-\\C_0\\&C_1\\&&\ddots\\&&&C_K \end{bmatrix} H=1A0C01C1AK11CK

W = [ P ˇ 0 ∣ Q 1 ∣ ⋱ ∣ Q K ∣ − − − − − − − − − ∣ R 0 ∣ R 1 ∣ ⋱ ∣ R K ] W = \begin{bmatrix} \check{P}_0 &&&& |\\ & Q_1 &&&|\\ &&\ddots &&|\\ &&&Q_K &| \\ -&-&-&-&-&-&-&-&-\\ &&&&|&R_0\\ &&&&|&&R_1\\ &&&&|&&&\ddots \\&&&&|&&&&R_K \end{bmatrix} W=Pˇ0Q1QKR0R1RK

贝叶斯推断

目的:如何建立后验概率 p ( x ∣ v , y ) p(x|v,y) p(xv,y)

将运动方程(1)写为提升形式 x = A ( v + w ) x = A(v+w) \qquad x=A(v+w) (将 x 1 , x 2 , . . . . x k x_1,x_2,....x_k x1,x2,....xk 递归代入)

提升之后,均值 x ˇ = E ( x ) = A v \check{x} = E(x)=Av xˇ=E(x)=Av协方差 P ˇ = A Q A T \check{P} = AQA^T Pˇ=AQAT

那么先验就可以简洁的写出: p ( x ∣ v ) = N   ( x ˇ , P ˇ ) = N ( A v , A Q A T ) (8) p(x|v) = N~(\check{x},\check{P}) = N(Av,AQA^T)\tag{8} p(xv)=N (xˇ,Pˇ)=N(Av,AQAT)(8)

观测方程(2)写为提升形式 y = C x + n y = Cx +n y=Cx+n

则此时,状态、观测的联合概率密度函数可以写为: p ( x , y ∣ v ) = N ( [ x ˇ C x ˇ ] , [ P ˇ P ˇ C T C P ˇ C P ˇ C T + R ] ) (9) p(x,y|v) = N(\begin{bmatrix} \check{x} \\ C\check{x} \end{bmatrix},\begin{bmatrix} \check{P}&\check{P}C^T \\ C\check{P} &C\check{P}C^T+R \end{bmatrix} ) \tag{9} p(x,yv)=N([xˇCxˇ],[PˇCPˇPˇCTCPˇCT+R])(9)

(因为已知 v v v ,所以 x x x 的先验分布也已经确定了)

可将 p ( x , y ∣ v ) p(x,y|v) p(x,yv)分解为: p ( x , y ∣ v ) = p ( x ∣ y , v ) × p ( y ∣ v ) (10) p(x,y|v) = p(x|y,v) \times p(y|v) \tag{10} p(x,yv)=p(xy,v)×p(yv)(10)

我们关心 p ( x ∣ y , v ) p(x|y,v) p(xy,v) 表示了全贝叶斯的后验概率公式。根据高斯概率联合密度可写为: p ( x ∣ y , v ) = N ( x ˇ + P ˇ C T ( C P ˇ C T + R − 1 ) − 1 ( y − C x ˇ ) , P ˇ − P ˇ C T ( C P ˇ C T + R ) − 1 C P ˇ ) (11) p(x|y,v) = N(\check{x}+\check{P}C^T(C\check{P}C^T+R^{-1})^{-1}(y-C\check{x}), \check{P}-\check{P}C^T(C\check{P}C^T+R)^{-1}C\check{P})\tag{11} p(xy,v)=N(xˇ+PˇCT(CPˇCT+R1)1(yCxˇ),PˇPˇCT(CPˇCT+R)1CPˇ)(11)

根据**SMW(矩阵求逆引理)**恒等式:

( A − 1 + B D − 1 C ) − 1 ≡ A − A B ( D + C A B ) − 1 C A (A^{-1}+BD^{-1}C)^{-1}\equiv A-AB(D+CAB)^{-1}CA (A1+BD1C)1AAB(D+CAB)1CA

( D + C A B ) − 1 ≡ D − 1 − D − 1 C ( A − 1 + B D − 1 C ) − 1 B D − 1 (D+CAB)^{-1} \equiv D^{-1}-D^{-1}C(A^{-1}+BD^{-1}C)^{-1}BD^{-1} (D+CAB)1D1D1C(A1+BD1C)1BD1

A B ( D + C A B ) − 1 ≡ ( A − 1 + B D − 1 C ) − 1 B D − 1 AB(D+CAB)^{-1} \equiv (A^{-1}+BD^{-1}C)^{-1}BD^{-1} AB(D+CAB)1(A1+BD1C)1BD1

( D + C A B ) − 1 C A ≡ D − 1 C ( A − 1 + B D − 1 C ) − 1 (D+CAB)^{-1}CA \equiv D^{-1}C(A^{-1}+BD^{-1}C)^{-1} (D+CAB)1CAD1C(A1+BD1C)1

可将式(11)转换成:

p ( x ∣ y , v ) = N ⟨ ( P ˇ + C T R − 1 C ) − 1 ( P ˇ − 1 x + C T R − 1 y ˇ ) , ( P ˇ − 1 + C T R − 1 C ) − 1 ⟩ (12) p(x|y,v) = N\langle(\check{P}+C^TR^{-1}C)^{-1}(\check{P}^{-1}\check{x +C^T R^{-1}y}),(\check{P}^{-1}+C^T R^{-1}C)^{-1}\rangle \tag{12} p(xyv)=N(Pˇ+CTR1C)1(Pˇ1x+CTR1yˇ),(Pˇ1+CTR1C)1(12)

上述公式,前面的一项为 x ^ \hat{x} x^ ,后面的一项为 P ^ \hat{P} P^

( P ˇ + C T R − 1 C ) − 1 ( P ˇ − 1 x + C T R − 1 y ˇ ) = x ^ (\check{P}+C^TR^{-1}C)^{-1}(\check{P}^{-1}\check{x +C^T R^{-1}y}) = \hat{x} (Pˇ+CTR1C)1(Pˇ1x+CTR1yˇ)=x^

( P ˇ − 1 + C T R − 1 C ) − 1 = P ^ (\check{P}^{-1}+C^T R^{-1}C)^{-1} = \hat{P} (Pˇ1+CTR1C)1=P^

变形为:

( P ˇ + C T R − 1 C ) x ^ = P ^ − 1 x ^ = P ˇ − 1 x + C T R − 1 y ˇ (\check{P}+C^TR^{-1}C) \hat{x} = \hat{P}^{-1} \hat{x} = \check{P}^{-1}\check{x +C^T R^{-1}y} (Pˇ+CTR1C)x^=P^1x^=Pˇ1x+CTR1yˇ

此时将 x ˇ = A v \check{x} = Av xˇ=Av P ˇ = ( A Q A T ) − 1 = A − T Q − 1 A − 1 \check{P} = (AQA^T)^{-1} = A^{-T} Q^{-1}A^{-1} Pˇ=(AQAT)1=ATQ1A1 代入上式: ( A − T Q − 1 A − 1 C T R − 1 C ) x ^ = P ^ − 1 x ^ = A − T Q − 1 v + C T R − 1 y (13) (A^{-T} Q^{-1}A^{-1}C^TR^{-1}C) \hat{x} = \hat{P}^{-1} \hat{x} = A^{-T}Q^{-1}v + C^TR^{-1}y \tag{13} (ATQ1A1CTR1C)x^=P^1x^=ATQ1v+CTR1y(13)

定义 z = [ v y ] z = \begin{bmatrix} v\\y\end{bmatrix} z=[vy] H = [ A − 1 C ] H = \begin{bmatrix} A^{-1} \\ C \end{bmatrix} H=[A1C] W = [ Q R ] W = \begin{bmatrix} Q \\ & R \end{bmatrix} W=[QR]

则公式(13)写为: ( H T W − 1 H ) x ^ = H T W − 1 z (14) (H^TW^{-1}H)\hat{x} = H^TW^{-1}z \tag{14} (HTW1H)x^=HTW1z(14)

离散时间的递归平滑算法

Cholesky 平滑算法

由公式(14)得出: H T W − 1 H H^TW^{-1}H HTW1H 是一个三对角块,采用一种方式Cholesky分解 需要一次前向和后向迭代,可以将三对角块分解为:

H T W − 1 H = L L T (15) H^TW^{-1}H = LL^T \tag{15} HTW1H=LLT(15)

求解公式(16)得到 d

L d = H T W − 1 z (16) Ld = H^TW^{-1}z\tag{16} Ld=HTW1z(16)

由公式(14)知: d = L T x ^ (17) d = L^T\hat{x}\tag{17} d=LTx^(17) 求解得到 x ^ \hat{x} x^

前向过程为(15)、(16),后向过程为(17)先求 X K − > X K − 1 − > . . . . X_K -> X_{K-1} -> .... XK>XK1>....

综合前向和后向两步,我们综合的写为:

前向: k = 1..... K k = 1.....K k=1.....K

L k − 1 L k − 1 T = I k − 1 + A k − 1 T Q k − 1 A k − 1 (18a) L_{k-1} L_{k-1}^T = I_{k-1} + A_{k-1}^{T}Q_k^{-1}A_{k-1} \tag{18a} Lk1Lk1T=Ik1+Ak1TQk1Ak1(18a)

L k , k − 1 L k 1 T = − Q k − 1 A k − 1 (18b) L_{k,k-1}L_{k_1}^T = -Q_{k}^{-1}A_{k-1}\tag{18b} Lk,k1Lk1T=Qk1Ak1(18b)

L k − 1 d k − 1 = q k − 1 − A k − 1 T Q k − 1 v k (18c) L_{k-1}d_{k-1} = q_{k-1}-A_{k-1}^TQ_k^{-1}v_k \tag{18c} Lk1dk1=qk1Ak1TQk1vk(18c)

I k = − L k , k − 1 L k , k − 1 T + Q k − 1 + C k T R k − 1 C k (18d) I_{k} = -L_{k,k-1}L_{k,k-1}^T + Q_k^{-1} + C_k^{T}R_k^{-1}C_k\tag{18d} Ik=Lk,k1Lk,k1T+Qk1+CkTRk1Ck(18d)

q k = − L k , k − 1 d k − 1 + Q k − 1 v k + C k T R k − 1 y k (18e) q_k = -L_{k,k-1}d_{k-1}+ Q_k^{-1}v_k +C^T_kR_k^{-1}y_k\tag{18e} qk=Lk,k1dk1+Qk1vk+CkTRk1yk(18e)

后向: k = K . . . . . 1 k = K.....1 k=K.....1

L K − 1 T x ^ k − 1 = − L k , k − 1 T x ^ + d k − 1 (18f) L^T_{K-1}\hat{x}_{k-1} = -L^T_{k,k-1}\hat{x} +d_{k-1}\tag{18f} LK1Tx^k1=Lk,k1Tx^+dk1(18f)

这六个递归方程,在代数上等价于传统的Rauch-Tung-Striebel 平滑算法;而五个前向迭代,则等价于著名的卡尔曼滤波器

Rauch-Tung-Striebel 平滑算法

Cholesky 平滑算法不是平滑算法的标准方程形式

将公式(18b)中的 L k , k − 1 L_{k,k-1} Lk,k1 解出,和(18a)一起代入公式(18d)中,***得出 I k I_k Ik***

P ^ k , f = I K − 1 \hat{P}_{k,f} = I_K^{-1} P^k,f=IK1

I k I_k Ik P ˇ k , f − 1 = A k − 1 P ^ k − 1 , f A k − 1 T + Q k (19a) \check{P}_{k,f}^{-1} = A_{k-1}\hat{P}_{k-1,f}A_{k-1}^T +Q_k \tag{19a} Pˇk,f1=Ak1P^k1,fAk1T+Qk(19a)

I k = P ^ k , f − 1 = P ˇ k , f − 1 + C T R k − 1 C k (19) I_k =\hat{P}_{k,f}^{-1} = \check{P}^{-1}_{k,f} + C^TR^{-1}_kC_k\tag{19} Ik=P^k,f1=Pˇk,f1+CTRk1Ck(19)

此时定义卡尔曼增益 K k K_k Kk : K k = P ^ k , f C k T R k − 1 (20) K_k = \hat{P}_{k,f} C^T_kR_k^{-1}\tag{20} Kk=P^k,fCkTRk1(20)

代入公式(19)得到:

K k = P ˇ k , f C T ( C K P ˇ k , f C k T + R k ) − 1 (21) K_k = \check{P}_{k,f}C^T(C_K\check{P}_{k,f}C^T_k+R_k)^{-1}\tag{21} Kk=Pˇk,fCT(CKPˇk,fCkT+Rk)1(21)

再将(21)代入(19)中,解出 P ˇ k , f − 1 = P ^ k , f − 1 ( 1 − K k C k ) \check{P}_{k,f}^{-1} = \hat{P}_{k,f}^{-1}(1-K_kC_k) Pˇk,f1=P^k,f1(1KkCk) ,整理得到经典的卡尔曼滤波协方差更新步骤: P ^ k , f = ( 1 − K k C k ) P ˇ k , f (22) \hat{P}_{k,f}=(1-K_kC_k)\check{P}_{k,f}\tag{22} P^k,f=(1KkCk)Pˇk,f(22)

接着求出 q k q_k qk ,令 P ^ k , f − 1 x k , f = q k \hat{P}_{k,f}^{-1}x_{k,f} = q_k P^k,f1xk,f=qk ,同时使用到了公式(19a),化简整理得到:

x ˇ k , f = A K − 1 x ^ k − 1 , f + v k (23a) \check{x}_{k,f} = A_{K-1}\hat{x}_{k-1,f} + v_k \tag{23a} xˇk,f=AK1x^k1,f+vk(23a)

P ^ k , f − 1 x ^ k , f = P ˇ k , f − 1 x ˇ k , f + C k T R k − 1 y k (23) \hat{P}^{-1}_{k,f} \hat{x}_{k,f} = \check{P}_{k,f}^{-1}\check{x}_{k,f} +C^T_kR_k^{-1}y_k\tag{23} P^k,f1x^k,f=Pˇk,f1xˇk,f+CkTRk1yk(23)

对公式(23)两边同乘 P ^ k , f \hat{P}_{k,f} P^k,f 得到,

x ^ k , f = x ˇ k , f + K k ( y k − C k x ˇ k , f ) (24) \hat{x}_{k,f} = \check{x}_{k,f} + K_k(y_k - C_k\check{x}_{k,f})\tag{24} x^k,f=xˇk,f+Kk(ykCkxˇk,f)(24)

最后进行后向迭代求出 x ^ k − 1 \hat{x}_{k-1} x^k1 ,整理公式得:

x ^ k − 1 = x ^ k , f − 1 + P ˇ k − 1 A k − 1 T P ˇ k , f − 1 ( x ^ k − x ˇ k , f ) (25) \hat{x}_{k-1} = \hat{x}_{k,f-1} + \check{P}_{k-1}A^T_{k-1}\check{P}^{-1}_{k,f}(\hat{x}_k - \check{x}_{k,f}) \tag{25} x^k1=x^k,f1+Pˇk1Ak1TPˇk,f1(x^kxˇk,f)(25)

这是传统后向平滑算法得形式。(这是对均值的修正)

公式(19a),(23a),(23),(21),(22),(24),(25):

前向: k = 1..... K k = 1.....K k=1.....K

P ˇ k , f − 1 = A k − 1 P ^ k − 1 , f A k − 1 T + Q k (26) \check{P}_{k,f}^{-1} = A_{k-1}\hat{P}_{k-1,f}A_{k-1}^T +Q_k \tag{26} Pˇk,f1=Ak1P^k1,fAk1T+Qk(26)

x ˇ k , f = A K − 1 x ^ k − 1 , f + v k (27) \check{x}_{k,f} = A_{K-1}\hat{x}_{k-1,f} + v_k \tag{27} xˇk,f=AK1x^k1,f+vk(27)

K k = P ˇ k , f C T ( C K P ˇ k , f C k T + R k ) − 1 (28) K_k = \check{P}_{k,f}C^T(C_K\check{P}_{k,f}C^T_k+R_k)^{-1}\tag{28} Kk=Pˇk,fCT(CKPˇk,fCkT+Rk)1(28)

P ^ k , f = ( 1 − K k C k ) P ˇ k , f (29) \hat{P}_{k,f}=(1-K_kC_k)\check{P}_{k,f}\tag{29} P^k,f=(1KkCk)Pˇk,f(29)

x ^ k , f = x ˇ k , f + K k ( y k − C k x ˇ k , f ) (30) \hat{x}_{k,f} = \check{x}_{k,f} + K_k(y_k - C_k\check{x}_{k,f})\tag{30} x^k,f=xˇk,f+Kk(ykCkxˇk,f)(30)

后向: k = K . . . . . 1 k = K.....1 k=K.....1

x ^ k − 1 = x ^ k , f − 1 + P ˇ k − 1 A k − 1 T P ˇ k , f − 1 ( x ^ k − x ˇ k , f ) (31) \hat{x}_{k-1} = \hat{x}_{k,f-1} + \check{P}_{k-1}A^T_{k-1}\check{P}^{-1}_{k,f}(\hat{x}_k - \check{x}_{k,f}) \tag{31} x^k1=x^k,f1+Pˇk1Ak1TPˇk,f1(x^kxˇk,f)(31)

前五个前向迭代过程被称为卡尔曼滤波器。这六个公式表达的RTS平滑算法。

RTS用到了所有的数据,用未来的数据来修饰当前的变量,即它是非因果的

2. 非线性非高斯系统的状态估计

离散时间的递归估计问题

贝叶斯滤波

贝叶斯滤波仅使用过去以及当前的测量,来构造一个完整的PDF来刻画当前的状态。

p ( x k ∣ x 0 , v 1 : k , y 0 : k ) (32) p(x_k|x_0,v_{1:k},y_{0:k}) \tag{32} p(xkx0,v1:k,y0:k)(32)

贝叶斯滤波是LG系统下分解的前向过程

贝叶斯滤波器:

p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = η p ( y k ∣ x k ) p ( x k ∣ x ˇ 0 , v 0 : k , y 0 : k − 1 ) (33) p(x_k|\check{x}_0,v_{1:k},y_{0:k}) =\eta p(y_k|x_k) p(x_k|\check{x}_0,v_{0:k},y_{0:k-1})\tag{33} p(xkxˇ0,v1:k,y0:k)=ηp(ykxk)p(xkxˇ0,v0:k,y0:k1)(33)

其中, p ( x k ∣ x ˇ 0 , v 0 : k , y 0 : k − 1 ) = ∫ p ( x k ∣ x k − 1 , v k ) p ( x k − 1 ∣ v 1 : k , y 0 : k − 1 ) d x k − 1 (34) p(x_k|\check{x}_0,v_{0:k},y_{0:k-1}) = \int p(x_k|x_{k-1},v_k) p(x_{k-1}|v_{1:k},y_{0:k-1})dx_{k-1}\tag{34} p(xkxˇ0,v0:k,y0:k1)=p(xkxk1,vk)p(xk1v1:k,y0:k1)dxk1(34)

p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = η p ( y k ∣ x k ) ∫ p ( x k ∣ x k − 1 , v k ) p ( x k − 1 ∣ v 1 : k , y 0 : k − 1 ) d x k − 1 (35) p(x_k|\check{x}_0,v_{1:k},y_{0:k}) =\eta p(y_k|x_k)\int p(x_k|x_{k-1},v_k) p(x_{k-1}|v_{1:k},y_{0:k-1})dx_{k-1}\tag{35} p(xkxˇ0,v1:k,y0:k)=ηp(ykxk)p(xkxk1,vk)p(xk1v1:k,y0:k1)dxk1(35)

公式中,首项是观测过程,第二项是运动方程进行预测,第三项是已经知道的先验置信度。

扩展卡尔曼滤波

我们假设 x k x_k xk 的置信度函数限制为高斯分布: p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) ∼ N ( x ^ , P ^ k ) (36) p(x_k|\check{x}_0,v_{1:k},y_{0:k})\sim N(\hat{x},\hat{P}_k)\tag{36} p(xkxˇ0,v1:k,y0:k)N(x^,P^k)(36)

进行线性化

x k = x ˇ k + F k − 1 ( x k − 1 − x ^ k − 1 ) + w ′ (37) x_k = \check{x}_k + F_{k-1}(x_{k-1} - \hat{x}_{k-1} )+ w' \tag{37} xk=xˇk+Fk1(xk1x^k1)+w(37)

y k ≈ y ˇ + G k − 1 ( x k − x ˇ ) + n k ′ (38) y_k \approx \check{y} + G_{k-1}(x_k - \check{x}) + n'_k\tag{38} ykyˇ+Gk1(xkxˇ)+nk(38)

x k x_k xk 求均值和方差,得到

p ( x k ∣ x k − 1 , v k ) ≈ N ( x ˇ k + F k − 1 ( x k − 1 − x ^ k − 1 ) , Q k ′ ) (39) p(x_k|x_{k-1},v_k)\approx N(\check{x}_k + F_{k-1}(x_{k-1} - \hat{x}_{k-1}),Q'_k) \tag{39} p(xkxk1,vk)N(xˇk+Fk1(xk1x^k1),Qk)(39)

p ( y k ∣ x k ) ≈ N ( y ˇ k + G k ( x k − x ^ k − 1 ) ′ , R k ′ ) (40) p(y_k|x_k)\approx N(\check{y}_k + G_{k}(x_{k} - \hat{x}_{k-1} )',R'_k) \tag{40} p(ykxk)N(yˇk+Gk(xkx^k1),Rk)(40)

贝叶斯滤波器 p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) = η p ( y k ∣ x k ) ∫ p ( x k ∣ x k − 1 , v k ) p ( x k − 1 ∣ v 1 : k , y 0 : k − 1 ) d x k − 1 ∼ N ( x ˇ k + K k ( y k − y ˇ k ) , ( 1 − K k G k ) ( F k − 1 P ^ k − 1 F k − 1 T + Q k ′ ) ) p(x_k|\check{x}_0,v_{1:k},y_{0:k}) =\eta p(y_k|x_k)\int p(x_k|x_{k-1},v_k) p(x_{k-1}|v_{1:k},y_{0:k-1})dx_{k-1} \sim N(\check{x}_k+K_k(y_k-\check{y}_k),(1-K_kG_k)(F_{k-1}\hat{P}_{k-1}F^T_{k-1}+Q'_k)) p(xkxˇ0,v1:k,y0:k)=ηp(ykxk)p(xkxk1,vk)p(xk1v1:k,y0:k1)dxk1N(xˇk+Kk(ykyˇk),(1KkGk)(Fk1P^k1Fk1T+Qk))

此时EKF的经典递归更新方程如下:

预测: P ˇ = F k − 1 P ^ k − 1 F k − 1 T + Q k ′ (41) \check{P} =F_{k-1}\hat{P}_{k-1}F^T_{k-1}+Q'_k \tag{41} Pˇ=Fk1P^k1Fk1T+Qk(41)

x ˇ = f ( x ^ k − 1 , v k , 0 ) (42) \check{x} = f(\hat{x}_{k-1},v_k,0)\tag{42} xˇ=f(x^k1,vk,0)(42)

卡尔曼增益:

K k = P ˇ k G k T ( G k P ˇ k G k T + R k ′ ) − 1 (43) K_k = \check{P}_kG^T_k(G_k\check{P}_kG^T_k + R'_k)^{-1} \tag{43} Kk=PˇkGkT(GkPˇkGkT+Rk)1(43)

更新: P ^ k = ( 1 − K k G k ) P ˇ k (44) \hat{P}_k = (1-K_kG_k)\check{P}_k\tag{44} P^k=(1KkGk)Pˇk(44)

x ^ k = x ˇ k + K k ( y k − g ( x ˇ k , 0 ) ) (45) \hat{x}_k =\check{x}_k+K_k(y_k-g(\check{x}_k,0)) \tag{45} x^k=xˇk+Kk(ykg(xˇk,0))(45)

y k − g ( x ˇ k , 0 ) y_k-g(\check{x}_k,0) ykg(xˇk,0)更新量 。估计的均值猜测是为了缩小误差

广义高斯滤波

使用了2.2.3节联合斯概率密度函数 。写出联合分布,然后使用高斯推断。

p ( x k , y k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) p(x_k,y_k|\check{x}_0,v_{1:k},y_{0:k-1}) p(xk,ykxˇ0,v1:k,y0:k1) 的联合分布。

p ( x k , y k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) p ( y k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) p(x_k,y_k|\check{x}_0,v_{1:k},y_{0:k-1}) = p(x_k|\check{x}_0,v_{1:k},y_{0:k})p(y_k|\check{x}_0,v_{1:k},y_{0:k-1}) p(xk,ykxˇ0,v1:k,y0:k1)=p(xkxˇ0,v1:k,y0:k)p(ykxˇ0,v1:k,y0:k1)

可以写出 p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) p(x_k|\check{x}_0,v_{1:k},y_{0:k}) p(xkxˇ0,v1:k,y0:k) 的均值和方差。即为广义高斯滤波。之后对应找到: x ^ k 、 P ^ k 、 K k \hat{x}_k、\hat{P}_k、K_k x^kP^kKk 。但是如果我们不进行线性化,方差和均值不能求出来,所以需要对其进行近似。

迭代扩展卡尔曼滤波

相比较广义高斯滤波,对模型进行如线性化即扩展卡尔曼滤波,之后进行了广义高斯滤波,进行代入联合分布的均值、方差中的各项值

不同点:公式(37)、(38)中的 x ˇ k 、 y ˇ k \check{x}_k 、\check{y}_k xˇkyˇk 换为了我们所选区的点 x o p x_{op} xop

所以我们需要进行迭代计算 x o p ← x ^ k x_{op} \leftarrow \hat{x}_k xopx^k 每一次迭代将工作点设置为上一次迭代的后验均值,即 x ^ k \hat{x}_k x^k

EKF只进行了一次线性化。

  1. IEKF的均值是一个MAP解(找最优),
  2. 全贝叶斯估计p(x|y)、MAP解与真实x之间是有偏的。
  3. IEKF和MAP的解优于EKF
蒙特卡洛方法

对数据分布进行大量的采样,计算非线性变换的值,再用变换后的值构建输出分布。

image-20200829163421589
  1. 高斯分布的非线性变换本身不再是高斯分布,只保留了那个分布的一、二阶矩。
  2. 非线性变换本身存在误差
  3. 线性化点理论上是x均值,但实际是x均值的估计值,也可能是个错误的值
  4. y均值= g(x均值)是成问题。
Sigma Point变换

SP变换,或无迹变换是线性化方法和蒙特卡洛方法的折中

核心思想:选定输入分布的几个点(Sigma Point),计算这几个点的非线性变换,用他的结构构建输出分布。

image-20200829190746374

1.根据输入概率,计算出2L+1个sigmapoint:

L L T = ∑ x x (46) LL^T =\sum_{xx} \tag{46} LLT=xx(46)

x 0 = μ x (47) x_0 = \mu_x\tag{47} x0=μx(47)

x i = μ x + L + k c o l i L (48) x_i = \mu_x + \sqrt{L+k}col_iL\tag{48} xi=μx+L+k coliL(48)

x i + L = μ x − L + k c o l i L (49) x_{i+L} = \mu_x - \sqrt{L+k}col_iL\tag{49} xi+L=μxL+k coliL(49)

2.这样的样本点满足

μ x = ∑ i = 0 2 L α i x i \mu_x = \sum_{i=0}^{2L}\alpha_ix_i μx=i=02Lαixi

∑ x x = ∑ i = 0 2 L α i ( x i − μ i ) ( x i − μ i ) \sum_{xx} = \sum_{i=0}^{2L}\alpha_{i}(x_{i}-\mu_{i})(x_{i}-\mu_{i}) xx=i=02Lαi(xiμi)(xiμi)

其中: α i = { k L + k i = 0 ; k 2 ( L + k ) 其 他 \alpha_{i}=\begin{cases}\frac{k}{L+k} \quad i=0;\\ \frac{k}{2(L+k)} \quad 其他 \end{cases} αi={L+kki=0;2(L+k)k

3.对Sigma Point进行非线性变换,得到: y i = g ( x i ) , i = 0 , . . . , 2 L y_i = g(x_i),\quad i=0,...,2L yi=g(xi),i=0,...,2L

4. 用y的结果构建输出高斯分布:

均值: μ y = ∑ i = 0 2 L α i y i \mu_y = \sum _{i=0}^{2L}\alpha_iy_i μy=i=02Lαiyi

协方差: ∑ y y = ∑ i = 0 2 L α i ( y i − μ y ) ( y i − μ y ) T \sum_{yy} = \sum _{i=0}^{2L}\alpha_i(y_i - \mu_y)(y_i-\mu_y)^T yy=i=02Lαi(yiμy)(yiμy)T

Sigma Point的好处:

  • 不用计算线性化雅可比矩阵;
  • 仅使用了表针矩阵加法乘法和Cholesky分解;
  • 对非线性函数的要求很少(不要求光滑和可微)

线性化的方法对比蒙特卡洛法,均值有偏,而且方差过小了。

粒子滤波

粒子滤波是唯一一种可以处理NLNG系统的实用技术。

粒子滤波的流程:

1.采样:从先验与运动噪声中采样M个样本:

[ x ^ k − 1 , m w k , m ] ← p ( x k − 1 ∣ x ˇ 0 , v 1 : k − 1 , y 1 : k − 1 ) p ( w k ) (50) \begin{bmatrix}\hat{x}_{k-1,m} \\ w_{k,m} \end{bmatrix} \leftarrow p(x_{k-1}|\check{x}_0,v_{1:k-1},y_{1:k-1})p(w_k)\tag{50} [x^k1,mwk,m]p(xk1xˇ0,v1:k1,y1:k1)p(wk)(50)

2.使用运动方程得到预测分布:

x ˇ k , m = f ( x ^ k − 1 , m , v k , w k , m ) (56) \check{x}_{k,m} = f(\hat{x}_{k-1,m},v_k,w_{k,m)}\tag{56} xˇk,m=f(x^k1,m,vk,wk,m)(56)

3.使用观测方程进行比较:

  • 为每个粒子计算权重:

    w k , m = p ( x ˇ k , m ∣ x ˇ 0 , v 1 : k , y 1 : k ) p ( x ˇ k , m ∣ x ˇ 0 , v 1 : k , y 1 : k − 1 ) = η p ( y k ∣ x ˇ k , m ) (57) w_{k,m} = \frac{p(\check{x}_{k,m}|\check{x}_0,v_{1:k},y_{1:k})}{p(\check{x}_{k,m}|\check{x}_0,v_{1:k},y_{1:k-1})} = \eta p(y_k|\check{x}_{k,m})\tag{57} wk,m=p(xˇk,mxˇ0,v1:k,y1:k1)p(xˇk,mxˇ0,v1:k,y1:k)=ηp(ykxˇk,m)(57)

    在实践中,通常使用非线性观测模型来模拟期望的传感器读数 y ˇ k , m \check{y}_{k,m} yˇk,m :

    y ˇ k , m = g ( x ˇ k , m , 0 ) \check{y}_{k,m}= g(\check{x}_{k,m},0) yˇk,m=g(xˇk,m,0)

    假设 p ( y k ∣ x ˇ k , m ) = p ( y k ∣ y ˇ k , m ) (58) p(y_k|\check{x}_{k,m}) = p(y_k|\check{y}_{k,m})\tag{58} p(ykxˇk,m)=p(ykyˇk,m)(58)

  • 对粒子进行重要性采样(Sample importance resampling)

    x ^ k , m ← 重 要 性 采 样 { x ˇ k , m , w k , m } \hat{x}_{k,m}\leftarrow _{}^{重要性采样} \{\check{x}_{k,m},w_{k,m}\} x^k,m{xˇk,m,wk,m}

重采样(轮盘赌) β m = ∑ n = 1 m w n ∑ l = 1 M w l \beta_m = \frac{\sum_{n=1}^mw_n}{\sum_{l=1}^Mw_l} βm=l=1Mwln=1mwn

  • 三自由度定位使用几百个粒子即可;
  • 粒子数量也可动态设置;
  • 重采样可以每隔一段时间做一次
Sigma Point 卡尔曼滤波

SPKF,无迹卡尔曼滤波。

整个过程分为预测步骤校正步骤

预测步骤:

  • 先验置信度和运动噪声堆叠在一起,进行SP。
  • 对SP后的结果展开为状态和噪声的形式,代入非线性运动模型进行求解;
  • 构建高斯分布。带公式求均值,方差

校正步骤:

  • 使用了广义高斯滤波,联合概率高斯分布。

    p ( x k , y k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) = p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) p ( y k ∣ x ˇ 0 , v 1 : k , y 0 : k − 1 ) p(x_k,y_k|\check{x}_0,v_{1:k},y_{0:k-1}) = p(x_k|\check{x}_0,v_{1:k},y_{0:k})p(y_k|\check{x}_0,v_{1:k},y_{0:k-1}) p(xk,ykxˇ0,v1:k,y0:k1)=p(xkxˇ0,v1:k,y0:k)p(ykxˇ0,v1:k,y0:k1) 可以写出 p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) p(x_k|\check{x}_0,v_{1:k},y_{0:k}) p(xkxˇ0,v1:k,y0:k) 的均值和方差。

  • 预测置信度和观测噪声堆叠在一起,进行SP。

  • 对SP后的结果展开为状态和噪声的形式,代入非线性观测模型进行求解;

  • 构建高斯分布。带公式求均值,方差

  • 最后代入广义高斯滤波的公式中。

完全不需要求导;

甚至不需要运动和观测方程得解析形式,视为黑盒模型;

迭代Sigma Point 卡尔曼滤波

迭代扩展卡尔曼滤波,进行多次线性化

迭代Sigma Point 卡尔曼滤波,进行多次广义高斯滤波

EKF和SPKF 都不太理想,迭代起来就比较与真值接近。

ISPKF收敛于均值,而MAP收敛与模。

image-20200829212031043

离散时间的批量估计

最大后验估计(MAP)

从上一讲内容中我们已经知道批量解可以等价于最小二乘问题

流程:定义优化变量、优化目标函数。

  • 优化变量: x 0 , x 1 , . . . . x K x_0,x_1,....x_K x0,x1,....xK
  • **优化目标函数:**运动与观测的误差,定义目标函数(误差的马氏范数)、整体优化目标。

解最优值得两种方法:

  • 牛顿法:

  • 对最终的优化函数进行线性化: j ( x ) 对 x 求 导 j(x)对 x求导 j(x)x

    线性化以后的函数再对 δ x 进 行 求 导 \delta x进行求导 δx,令导数为零,求得最优 δ x \delta x δx

    不断迭代: x o p = x o p + δ x x_{op} = x_{op} + \delta x xop=xop+δx

  • 高斯牛顿法:

  • Levernberg-Marquardt方法:

最终的结果: ( H T W − 1 H ) δ x = H T W − 1 e ( x o p ) (H^TW^{-1}H)\delta x = H^TW^{-1}e(x_op) (HTW1H)δx=HTW1e(xop)

贝叶斯推断

流程:

线性化方程,提升形式,计算先验均值方差,写出联合分布概率密度,用高斯推断计算出后验均值和方差,代入公式推出来结果。

贝叶斯推断和MAP基本上是一样的,不过显式给出来了协方差。

注:

image-20200829215345012
  • 相比于MAP,EKF得问题主要有两个过程,没有迭代过程,依赖马尔可夫假设;
  • EKF基本上和单词的MAP迭代一样(实际上稍微由于单词迭代)
  • 相比于各种针对EKF得改进,实际当中马尔科夫性是一个更本质得约束
  • 也有Sliding Window Filter这种介于批量和递归之间的滤波方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值