机器人的状态估计
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=Ak−1xk−1+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(x∣v,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(y∣x)p(x∣v)(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(y∣x)=k=0∏Kp(yk∣xk)
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(x∣v)=p(x0∣xˇ0)k=1∏Kp(xk∣,xk−1,vk)
对公式(4) x ^ \hat{x} x^ 取对数,去掉一些与x值无关的项。得到 J v , k 和 J y , k J_{v,k} 和 J_{y,k} Jv,k和Jy,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=0∑KJV,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} (HTW−1H)x^=HTW−1z(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ˇv1⋮vk−−−y0⋮yK⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤ x = [ x 0 ⋮ x K ] x = \begin{bmatrix} x_0\\ \vdots \\x_K \end{bmatrix} x=⎣⎢⎡x0⋮xK⎦⎥⎤ 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=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1−A0−C01⋱−C1⋱−AK−1−⋱1−CK⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
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ˇ0−Q1−⋱−QK−∣∣∣∣−∣∣∣∣−R0−R1−⋱−RK⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
贝叶斯推断
目的:如何建立后验概率 p ( x ∣ v , y ) p(x|v,y) p(x∣v,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(x∣v)=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,y∣v)=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,y∣v)分解为: 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,y∣v)=p(x∣y,v)×p(y∣v)(10)
我们关心 p ( x ∣ y , v ) p(x|y,v) p(x∣y,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(x∣y,v)=N(xˇ+PˇCT(CPˇCT+R−1)−1(y−Cxˇ),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 (A−1+BD−1C)−1≡A−AB(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)−1≡D−1−D−1C(A−1+BD−1C)−1BD−1
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≡(A−1+BD−1C)−1BD−1
( 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)−1CA≡D−1C(A−1+BD−1C)−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(x∣y,v)=N⟨(Pˇ+CTR−1C)−1(Pˇ−1x+CTR−1yˇ),(Pˇ−1+CTR−1C)−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ˇ+CTR−1C)−1(Pˇ−1x+CTR−1yˇ)=x^
( P ˇ − 1 + C T R − 1 C ) − 1 = P ^ (\check{P}^{-1}+C^T R^{-1}C)^{-1} = \hat{P} (Pˇ−1+CTR−1C)−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ˇ+CTR−1C)x^=P^−1x^=Pˇ−1x+CTR−1yˇ
此时将 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=A−TQ−1A−1 代入上式: ( 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} (A−TQ−1A−1CTR−1C)x^=P^−1x^=A−TQ−1v+CTR−1y(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=[A−1C] 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} (HTW−1H)x^=HTW−1z(14) 。
离散时间的递归平滑算法
Cholesky 平滑算法
由公式(14)得出: H T W − 1 H H^TW^{-1}H HTW−1H 是一个三对角块,采用一种方式Cholesky分解 需要一次前向和后向迭代,可以将三对角块分解为:
H T W − 1 H = L L T (15) H^TW^{-1}H = LL^T \tag{15} HTW−1H=LLT(15)
求解公式(16)得到 d:
L d = H T W − 1 z (16) Ld = H^TW^{-1}z\tag{16} Ld=HTW−1z(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−>XK−1−>....。
综合前向和后向两步,我们综合的写为:
前向: 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} Lk−1Lk−1T=Ik−1+Ak−1TQk−1Ak−1(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,k−1Lk1T=−Qk−1Ak−1(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} Lk−1dk−1=qk−1−Ak−1TQk−1vk(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,k−1Lk,k−1T+Qk−1+CkTRk−1Ck(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,k−1dk−1+Qk−1vk+CkTRk−1yk(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} LK−1Tx^k−1=−Lk,k−1Tx^+dk−1(18f)
这六个递归方程,在代数上等价于传统的Rauch-Tung-Striebel 平滑算法;而五个前向迭代,则等价于著名的卡尔曼滤波器。
Rauch-Tung-Striebel 平滑算法
Cholesky 平滑算法不是平滑算法的标准方程形式。
将公式(18b)中的 L k , k − 1 L_{k,k-1} Lk,k−1 解出,和(18a)一起代入公式(18d)中,***得出 I k I_k Ik*** 。
令 P ^ k , f = I K − 1 \hat{P}_{k,f} = I_K^{-1} P^k,f=IK−1
在 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,f−1=Ak−1P^k−1,fAk−1T+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,f−1=Pˇk,f−1+CTRk−1Ck(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,fCkTRk−1(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,f−1=P^k,f−1(1−KkCk) ,整理得到经典的卡尔曼滤波协方差更新步骤: 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=(1−KkCk)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,f−1xk,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=AK−1x^k−1,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,f−1x^k,f=Pˇk,f−1xˇk,f+CkTRk−1yk(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(yk−Ckxˇk,f)(24)
最后进行后向迭代求出 x ^ k − 1 \hat{x}_{k-1} x^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 ) (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^k−1=x^k,f−1+Pˇk−1Ak−1TPˇk,f−1(x^k−xˇ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,f−1=Ak−1P^k−1,fAk−1T+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=AK−1x^k−1,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=(1−KkCk)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(yk−Ckxˇ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^k−1=x^k,f−1+Pˇk−1Ak−1TPˇk,f−1(x^k−xˇ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(xk∣x0,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(xk∣xˇ0,v1:k,y0:k)=ηp(yk∣xk)p(xk∣xˇ0,v0:k,y0:k−1)(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(xk∣xˇ0,v0:k,y0:k−1)=∫p(xk∣xk−1,vk)p(xk−1∣v1:k,y0:k−1)dxk−1(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(xk∣xˇ0,v1:k,y0:k)=ηp(yk∣xk)∫p(xk∣xk−1,vk)p(xk−1∣v1:k,y0:k−1)dxk−1(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(xk∣xˇ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+Fk−1(xk−1−x^k−1)+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} yk≈yˇ+Gk−1(xk−xˇ)+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(xk∣xk−1,vk)≈N(xˇk+Fk−1(xk−1−x^k−1),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(yk∣xk)≈N(yˇk+Gk(xk−x^k−1)′,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(xk∣xˇ0,v1:k,y0:k)=ηp(yk∣xk)∫p(xk∣xk−1,vk)p(xk−1∣v1:k,y0:k−1)dxk−1∼N(xˇk+Kk(yk−yˇk),(1−KkGk)(Fk−1P^k−1Fk−1T+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ˇ=Fk−1P^k−1Fk−1T+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^k−1,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=(1−KkGk)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(yk−g(xˇk,0))(45)
y k − g ( x ˇ k , 0 ) y_k-g(\check{x}_k,0) yk−g(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,yk∣xˇ0,v1:k,y0:k−1) 的联合分布。
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,yk∣xˇ0,v1:k,y0:k−1)=p(xk∣xˇ0,v1:k,y0:k)p(yk∣xˇ0,v1:k,y0:k−1)
可以写出 p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) p(x_k|\check{x}_0,v_{1:k},y_{0:k}) p(xk∣xˇ0,v1:k,y0:k) 的均值和方差。即为广义高斯滤波。之后对应找到: x ^ k 、 P ^ k 、 K k \hat{x}_k、\hat{P}_k、K_k x^k、P^k、Kk 。但是如果我们不进行线性化,方差和均值不能求出来,所以需要对其进行近似。
迭代扩展卡尔曼滤波
相比较广义高斯滤波,对模型进行如线性化即扩展卡尔曼滤波,之后进行了广义高斯滤波,进行代入联合分布的均值、方差中的各项值。
不同点:公式(37)、(38)中的 x ˇ k 、 y ˇ k \check{x}_k 、\check{y}_k xˇk、yˇk 换为了我们所选区的点 x o p x_{op} xop 。
所以我们需要进行迭代计算, x o p ← x ^ k x_{op} \leftarrow \hat{x}_k xop←x^k 每一次迭代将工作点设置为上一次迭代的后验均值,即 x ^ k \hat{x}_k x^k 。
EKF只进行了一次线性化。
- IEKF的均值是一个MAP解(找最优),
- 全贝叶斯估计p(x|y)、MAP解与真实x之间是有偏的。
- IEKF和MAP的解优于EKF
蒙特卡洛方法
对数据分布进行大量的采样,计算非线性变换的值,再用变换后的值构建输出分布。
- 高斯分布的非线性变换本身不再是高斯分布,只保留了那个分布的一、二阶矩。
- 非线性变换本身存在误差
- 线性化点理论上是x均值,但实际是x均值的估计值,也可能是个错误的值
- y均值= g(x均值)是成问题。
Sigma Point变换
SP变换,或无迹变换是线性化方法和蒙特卡洛方法的折中。
核心思想:选定输入分布的几个点(Sigma Point),计算这几个点的非线性变换,用他的结构构建输出分布。
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+kcoliL(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=μx−L+kcoliL(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=0∑2Lα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^k−1,mwk,m]←p(xk−1∣xˇ0,v1:k−1,y1:k−1)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^k−1,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,m∣xˇ0,v1:k,y1:k−1)p(xˇk,m∣xˇ0,v1:k,y1:k)=ηp(yk∣xˇ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(yk∣xˇk,m)=p(yk∣yˇ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=1Mwl∑n=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,yk∣xˇ0,v1:k,y0:k−1)=p(xk∣xˇ0,v1:k,y0:k)p(yk∣xˇ0,v1:k,y0:k−1) 可以写出 p ( x k ∣ x ˇ 0 , v 1 : k , y 0 : k ) p(x_k|\check{x}_0,v_{1:k},y_{0:k}) p(xk∣xˇ0,v1:k,y0:k) 的均值和方差。
-
将预测置信度和观测噪声堆叠在一起,进行SP。
-
对SP后的结果展开为状态和噪声的形式,代入非线性观测模型进行求解;
-
构建高斯分布。带公式求均值,方差
- 最后代入广义高斯滤波的公式中。
完全不需要求导;
甚至不需要运动和观测方程得解析形式,视为黑盒模型;
迭代Sigma Point 卡尔曼滤波
迭代扩展卡尔曼滤波,进行多次线性化。
迭代Sigma Point 卡尔曼滤波,进行多次广义高斯滤波。
EKF和SPKF 都不太理想,迭代起来就比较与真值接近。
ISPKF收敛于均值,而MAP收敛与模。
离散时间的批量估计
最大后验估计(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) (HTW−1H)δx=HTW−1e(xop)
贝叶斯推断
流程:
线性化方程,提升形式,计算先验均值方差,写出联合分布概率密度,用高斯推断计算出后验均值和方差,代入公式推出来结果。
贝叶斯推断和MAP基本上是一样的,不过显式给出来了协方差。
注:
- 相比于MAP,EKF得问题主要有两个过程,没有迭代过程,依赖马尔可夫假设;
- EKF基本上和单词的MAP迭代一样(实际上稍微由于单词迭代)
- 相比于各种针对EKF得改进,实际当中马尔科夫性是一个更本质得约束
- 也有Sliding Window Filter这种介于批量和递归之间的滤波方法。