Apollo学习笔记(18)EKF

书接上回啊,上一篇详细的介绍了下标准卡尔曼滤波,使用卡尔曼滤波进行更新和预测都是建立在线性系统的基础上,因为高斯分布 x k x_k xk预测后仍然是高斯分布,且高斯分布变换到观测空间后也仍然是符合高斯分布的。

然而,实际工程中,极少有系统是线性系统,那这种情况怎么使用卡尔曼滤波呢?

非线性处理

学过数学的都知道,线性函数可以使用下式进行表达,

f ( x ) = a x + b (1) f(x)=ax+b \tag{1} f(x)=ax+b(1)

然而其他的函数,比如, f ( x ) = a x 2 + b x + c f(x)=ax^2+bx+c f(x)=ax2+bx+c f ( x ) = sin ⁡ x f(x)=\sin{x} f(x)=sinx f ( x ) = ln ⁡ x f(x)=\ln{x} f(x)=lnx f ( x ) = a x f(x)=a^x f(x)=ax等,这些都不是线性函数,按道理来说是都没办法使用卡尔曼滤波的,那工程中如何使用卡尔曼滤波呢?比如无人驾驶中的车辆运动学模型,如何使用卡尔曼滤波对车辆的位置进行跟踪?

大学那会都学过,任何光滑连续的曲线都是可微的,一个光滑的曲线可以用多个连续的短距离的直线来表示,如下图,

在这里插入图片描述
这就给我们在非线性系统上应用卡尔曼滤波提供了一种思路,可以使用泰勒级数对非线性系统进行展开,只取其一阶的泰勒级数,使用非线性系统当前位置的一阶泰勒级数进行近似和逼近。

扩展卡尔曼滤波

上面介绍了,如何将非线性系统通过泰勒展开成一阶系统,现在,来看一下EKF的整体计算流程。其实,扩展卡尔曼滤波与的整体流程与标准卡尔曼是大致相同的,如下,

第一步,确定状态预测方程,
x ^ k = F k x ^ k − 1 + B k u ⃗ k   P k = F k P k − 1 F k T + Q k (2) \hat{x}_{k}=F_{k} \hat{x}_{k-1} +B_{k}\vec{u}_{k} \\ \space P_{k}=F_{k}P_{k-1}F_{k}^{T} +Q_{k} \tag{2} x^k=Fkx^k1+Bku k Pk=FkPk1FkT+Qk(2)

第二步,计算卡尔曼增益,
K ′ = P k H k T ( H k P k H k T + R k ) − 1         (3) K^{'}=P_{k}H_{k}^{T}(H_{k}P_{k}H_{k}^{T}+R_{k})^{-1}    \tag{3} K=PkHkT(HkPkHkT+Rk)1    (3)

第三步,更新系统状态和协方差矩阵,
x ^ k ′ = x ^ k + K ′ ( z ⃗ k − H k x ^ k )   P k ′ = P k − K ′ H k P k (4) \hat{x}_{k}^{'}=\hat{x}_{k}+K^{'}(\vec{z}_{k}-H_{k}\hat{x}_{k}) \\ \space \\ P_{k}^{'}=P_{k}-K^{'}H_{k}P_{k} \tag{4} x^k=x^k+K(z kHkx^k) Pk=PkKHkPk(4)

第四步,将系统状态方程泰勒展开到一阶方程,并用此一阶方程作为下一个计算循环的系统方程,
F k + 1 = δ f δ x ^ ′ x ^ k + 1 = F k + 1 x ^ k + B k + 1 u ⃗ k + 1   P k + 1 = F k + 1 P k F k + 1 T + Q k + 1 (5) F_{k+1} = \frac{\delta f}{\delta \hat{x}^{'}} \\ \hat{x}_{k+1}=F_{k+1} \hat{x}_{k} +B_{k+1}\vec{u}_{k+1} \\ \space P_{k+1}=F_{k+1}P_{k}F_{k+1}^{T} +Q_{k+1} \tag{5} Fk+1=δx^δfx^k+1=Fk+1x^k+Bk+1u k+1 Pk+1=Fk+1PkFk+1T+Qk+1(5)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值