滤波笔记四:扩展卡尔曼滤波

情境:

有一个正在移动的路人,他的状态通过二维位置和二维速度表示: x = ( p x , p y , v x , v y ) T x=(p_x,p_y,v_x,v_y)^T x=(px,py,vx,vy)T,即标准等速模型。我们有两种特定传感器:1. 激光雷达 2. 雷达。

  • 激光雷达的测量空间: z 1 = ( p x , p y ) z_1=(p_x, p_y) z1=(px,py)
  • 雷达的测量空间: z 2 = ( ρ , φ , ρ ˙ ) T z_2=(\rho, \varphi, \dot{\rho})^T z2=(ρ,φ,ρ˙)T;

1. Introduction

假设我们使用高斯分布描述了预测状态 x x x,如果我们把这个高斯分布映射到非线性函数 h h h, 那么结果就不再是一个高斯分布了,这时卡尔曼滤波也不再适用:
在这里插入图片描述
在以上情境中,当我们有一个正态分布,其直方图如下图可见,对于每个值,计算其对应的 h h h,如预测的位置和速度映射到极坐标上的距离(range),方向(bearing)和距离变化率(range rate):
h ( x ′ ) = ( ρ ϕ ρ ˙ ) = ( p x ′ 2 + p y ′ 2 arctan ⁡ ( p y ′ / p x ′ ) p x ′ v x ′ + p y ′ v y ′ p x ′ 2 + p y ′ 2 ) h\left(x^{\prime}\right)=\left(\begin{array}{c}\rho \\ \phi \\ \dot{\rho}\end{array}\right)=\left(\begin{array}{c}\sqrt{p^{\prime 2}_{ x}+p^{\prime 2}_{y}} \\ \arctan \left(p_{y}^{\prime} / p_{x}^{\prime}\right) \\ \frac{p_{x}^{\prime} v_{x}^{\prime}+p_{y}^{\prime} v_{y}^{\prime}}{\sqrt{p_x^{\prime 2}+p_{y}^{\prime 2}}}\end{array}\right) h(x)= ρϕρ˙ = px′2+py′2 arctan(py/px)px′2+py′2 pxvx+pyvy

在图像中使用正反切可见,新的对应直方图并不再是一个高斯分布,因为 h h h 是非线性的,因此这里不能使用卡尔曼方程。
在这里插入图片描述
一种可行的方案是, h ( x ) h(x) h(x) 函数进行线性化操作。这也是扩展卡尔曼滤波器的核心思想。因此在这个例子中,我们必须使用在原始高斯分布的均值位置和 h h h 相切的一个线性函数,近似出测量值函数,这样得到的结果满足高斯分布。
在这里插入图片描述
那么该如何对非线性函数进行线性化处理呢?

2. Taylor Series Expansion

2.1 One-dimensional Taylor Series Expansion

扩展卡尔曼滤波器使用了泰勒展开法,我们首先评估在均值位置 μ \mu μ 的非线性函数,对式子求一阶泰勒展开得:
h ( x ) ≈ h ( μ ) + ∂ h ( μ ) ∂ x ( x − μ ) h(x) \approx h(\mu)+\frac{\partial h(\mu)}{\partial x}(x-\mu) h(x)h(μ)+xh(μ)(xμ)

从式中可以看出,

  1. 首先评估在均值位置 μ \mu μ 的非线性函数 h ( μ ) h(\mu) h(μ) ;
  2. 使用围绕 μ \mu μ 的斜度来推断这条线的斜度,由 h h h 的第一个导数给出: ∂ h ( μ ) ∂ x \frac{\partial h(\mu)}{\partial x} xh(μ)

这样可得上图红色直线所示的线性函数。

2.2 Multivariate Taylor Series

多维泰勒系数展开:
T ( x ) = f ( a ) + f ′ ( a ) 1 ! ( x − a ) + f ′ ′ ( a ) 2 ! ( x − a ) 2 + f ′ ′ ′ ( a ) 3 ! ( x − a ) 3 + … T(x)=f(a)+\frac{f^{\prime}(a)}{1 !}(x-a)+\frac{f^{\prime \prime}(a)}{2 !}(x-a)^{2}+\frac{f^{\prime \prime \prime}(a)}{3 !}(x-a)^{3}+\ldots T(x)=f(a)+1!f(a)(xa)+2!f′′(a)(xa)2+3!f′′′(a)(xa)3+

已知之前所述函数 h h h 将预测状态 x ′ = ( p x ′ , p y ′ , v x ′ , v y ′ ) T x'=(p'_x,p_y',v_x',v_y')^T x=(px,py,vx,vy)T 映射到测量空间 z = ( ρ , φ , ρ ˙ ) T z=(\rho, \varphi, \dot{\rho})^T z=(ρ,φ,ρ˙)T,这里是一个多维方程,需要使用多维泰勒展开来线性近似函数 h h h,通常多维泰勒系数展开公式写为:
T ( x ) = f ( a ) + ( x − a ) T D f ( a ) + 1 2 ! ( x − a ) T D 2 f ( a ) ( x − a ) + … T(x)=f(a)+(x-a)^{T} D f(a)+\frac{1}{2 !}(x-a)^{T} D^{2} f(a)(x-a)+\ldots T(x)=f(a)+(xa)TDf(a)+2!1(xa)TD2f(a)(xa)+

其中 D f ( a ) Df(a) Df(a) 为称为 Jacobian matrix D 2 f ( a ) D^2f(a) D2f(a) 被称为 Hessian matrix。他们分别表示了多维方程的一阶和二阶导。

为了获得函数 h h h 的线性近似,我们最多只保留展开项至雅克比矩阵 D f ( a ) Df(a) Df(a);忽略海塞矩阵 D 2 f ( a ) D^2f(a) D2f(a) 及更高阶项。假设 ( x − a ) (x-a) (xa) 值很小, ( x − a ) 2 (x-a)^2 (xa)2 的值就更小了------- EKF 假设比 Jacobian 更高阶项可忽略

3. Jacobian

已知前式的一阶泰勒展开:
h ( x ) ≈ h ( μ ) + ∂ h ( μ ) ∂ x ( x − μ ) h(x) \approx h(\mu)+\frac{\partial h(\mu)}{\partial x}(x-\mu) h(x)h(μ)+xh(μ)(xμ)
我们把这个例子归纳到一个更高的维度,那么 h ( μ ) h(\mu) h(μ) 对应于 x x x 的导数,被称作雅克比矩阵:它是一个矩阵,包含所有偏导数。

3.1 Jacboian Matrix

常规雅克比矩阵公式为:
H j = [ ∂ h 1 ∂ x 1 ∂ h 1 ∂ x 2 … ∂ h 1 ∂ x n ∂ n 2 ∂ x 1 ∂ h 2 ∂ x 2 ⋯ ∂ h 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ h m ∂ x 1 ∂ h m ∂ x 2 ⋯ ∂ h m ∂ x n ] H_{j}=\left[\begin{array}{cccc} \frac{\partial h_{1}}{\partial x_{1}} & \frac{\partial h_{1}}{\partial x_{2}} & \ldots & \frac{\partial h_{1}}{\partial x_{n}} \\ \frac{\partial n_{2}}{\partial x_{1}} & \frac{\partial h_{2}}{\partial x_{2}} & \cdots & \frac{\partial h_{2}}{\partial x_{n}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial h_{m}}{\partial x_{1}} & \frac{\partial h_{m}}{\partial x_{2}} & \cdots & \frac{\partial h_{m}}{\partial x_{n}} \end{array}\right] Hj= x1h1x1n2x1hmx2h1x2h2x2hmxnh1xnh2xnhm

对于示例中已知的测量空间: z = ( ρ , φ , ρ ˙ ) T z=(\rho, \varphi, \dot{\rho})^T z=(ρ,φ,ρ˙)T;状态是一个向量,其包括四个分量: x = ( p x , p y , v x , v y ) T x=(p_x,p_y,v_x,v_y)^T x=(px,py,vx,vy)T ------ 因此,雅可比矩阵 H j H_j Hj 在这里是一个三行四列的矩阵:

H j = [ ∂ ρ ∂ p x ∂ ρ ∂ p y ∂ ρ ∂ v x ∂ ρ ∂ v y ∂ φ ∂ p x ∂ φ ∂ p y ∂ φ ∂ v x ∂ φ ∂ v y ∂ ρ ˙ ∂ p x ∂ ρ ˙ ∂ p y ∂ ρ ˙ ∂ v x ∂ ρ ˙ ∂ v y ] H_{j}=\left[\begin{array}{llll} \frac{\partial \rho}{\partial p_{x}} & \frac{\partial \rho}{\partial p_{y}} & \frac{\partial \rho}{\partial v_{x}} & \frac{\partial \rho}{\partial v_{y}} \\ \frac{\partial \varphi}{\partial p_{x}} & \frac{\partial \varphi}{\partial p_{y}} & \frac{\partial \varphi}{\partial v_{x}} & \frac{\partial \varphi}{\partial v_{y}} \\ \frac{\partial \dot{\rho}}{\partial p_{x}} & \frac{\partial \dot{\rho}}{\partial p_{y}} & \frac{\partial \dot{\rho}}{\partial v_{x}} & \frac{\partial \dot{\rho}}{\partial v_{y}} \end{array}\right] Hj= pxρpxφpxρ˙pyρpyφpyρ˙vxρvxφvxρ˙vyρvyφvyρ˙

计算过所有偏导数后,得到矩阵1
H j = [ p x p x 2 + p y 2 p y p x 2 + p y 2 0 0 − p y p x 2 + p y 2 p x p x 2 + p y 2 0 0 p y ( v x p y − v y p x ) ( p x 2 + p y 2 ) 3 / 2 p x ( v y p x − v x p y ) ( p x 2 + p y 2 ) 3 / 2 p x p x 2 + p y 2 p y p x 2 + p y 2 ] H_{j}=\left[\begin{array}{cccc} \frac{p_{x}}{\sqrt{p_{x}^{2}+p_{y}^{2}}} & \frac{p_{y}}{\sqrt{p_{x}^{2}+p_{y}^{2}}} & 0 & 0 \\ -\frac{p_{y}}{p_{x}^{2}+p_{y}^{2}} & \frac{p_{x}}{p_{x}^{2}+p_{y}^{2}} & 0 & 0 \\ \frac{p_{y}\left(v_{x} p_{y}-v_{y} p_{x}\right)}{\left(p_{x}^{2}+p_{y}^{2}\right)^{3 / 2}} & \frac{p_{x}\left(v_{y} p_{x}-v_{x} p_{y}\right)}{\left(p_{x}^{2}+p_{y}^{2}\right)^{3 / 2}} & \frac{p_{x}}{\sqrt{p_{x}^{2}+p_{y}^{2}}} & \frac{p_{y}}{\sqrt{p_{x}^{2}+p_{y}^{2}}} \end{array}\right] Hj= px2+py2 pxpx2+py2py(px2+py2)3/2py(vxpyvypx)px2+py2 pypx2+py2px(px2+py2)3/2px(vypxvxpy)00px2+py2 px00px2+py2 py

4. Differences between KF and EKF

主要区别有以下几点:

  • 在计算 P ′ P' P 时,矩阵 F F F F j F_j Fj 替换;
  • 在计算 S , K , P S, K, P S,K,P 时,KF 中的矩阵 H H H 被雅克比矩阵 H j H_j Hj 所替换;
  • 在计算 x ′ x' x 时,矩阵 F F F 被预测更新函数 f f f 所替换;
  • 在计算 y y y 时,矩阵 H H H 由函数 h h h 所替换。

(不一定全部要从 KF 变为 EKF,主要看有哪些位置使用的是非线性模型)
注意,线性逼近只针对了 F j F_j Fj, H j H_j Hj,而在预测和更新误差的时候都是使用了真实的 f f f, h h h,所以这个算法的误差主要出现在矩阵运算中。
如在上面的例子中,由于预测阶段还是线性的,所以 F F F 并不需要被 F j F_j Fj 所替换; F F F 也不需要被函数 f f f 所替换。在下图右侧中,除了这两个公式外,都是使用的线性逼近。

在这里插入图片描述可能上图对于线性逼近的共视还不算特别清晰,这里再贴一个 Wiki 的全部流程:
在这里插入图片描述

5. Overall Process

在这里插入图片描述

点击跳转:
滤波笔记一:卡尔曼滤波.
滤波笔记二:无迹卡尔曼滤波 CTRV&&CTRA模型.
滤波笔记三:粒子滤波.


  1. 偏导计算过程:
    ∂ ρ ∂ p x = ∂ ∂ p x ( p x 2 + p y 2 ) = 2 p x p x 2 + p y 2 = p x p x 2 + p y 2 ∂ ρ ∂ p y = ∂ ∂ p y ( p x 2 + p y 2 ) = 2 p y p x 2 + p y 2 2 = p y p x 2 + p y 2 ∂ ρ ∂ v x = ∂ ∂ v x ( p x 2 + p y 2 ) = 0 ∂ ρ ∂ v y = ∂ ∂ v y ( p x 2 + p y 2 ) = 0 ∂ φ ∂ p x = ∂ ∂ p x arctan ⁡ ( p y / p x ) = 1 ( p y p x ) 2 + 1 ( − p y p x 2 ) = − p y p x 2 + p y 2 ∂ φ ∂ p y = ∂ ∂ p y arctan ⁡ ( p y / p x ) = 1 ( p y p x ) 2 + 1 ( 1 p x ) = p x 2 p x 2 + p y 2 1 p x = p x p x 2 + p y 2 ∂ φ ∂ v x = ∂ ∂ v x arctan ⁡ ( p y / p x ) = 0 ∂ φ ∂ v y = ∂ ∂ v y arctan ⁡ ( p y / p x ) = 0 ∂ ρ ˙ ∂ p x = ∂ ∂ p x ( p x v x + p y v y p x 2 + p y 2 ) \begin{array}{l} \frac{\partial \rho}{\partial p_{x}}=\frac{\partial}{\partial p_{x}}\left(\sqrt{p_{x}^{2}+p_{y}^{2}}\right)=\frac{2 p_{x}}{\sqrt{p_{x}^{2}+p_{y}^{2}}}=\frac{p_{x}}{\sqrt{p_{x}^{2}+p_{y}^{2}}} \\ \frac{\partial \rho}{\partial p_{y}}=\frac{\partial}{\partial p_{y}}\left(\sqrt{p_{x}^{2}+p_{y}^{2}}\right)=\frac{2 p_{y}}{\sqrt[2]{p_{x}^{2}+p_{y}^{2}}}=\frac{p_{y}}{\sqrt{p_{x}^{2}+p_{y}^{2}}} \\ \frac{\partial \rho}{\partial v_{x}}=\frac{\partial}{\partial v_{x}}\left(\sqrt{p_{x}^{2}+p_{y}^{2}}\right)=0 \\ \frac{\partial \rho}{\partial v_{y}}=\frac{\partial}{\partial v_{y}}\left(\sqrt{p_{x}^{2}+p_{y}^{2}}\right)=0 \\ \frac{\partial \varphi}{\partial p_{x}}=\frac{\partial}{\partial p_{x}} \arctan \left(p_{y} / p_{x}\right)=\frac{1}{\left(\frac{p_{y}}{p_{x}}\right)^{2}+1}\left(-\frac{p_{y}}{p_{x}^{2}}\right)=-\frac{p_{y}}{p_{x}^{2}+p_{y}^{2}} \\ \frac{\partial \varphi}{\partial p_{y}}=\frac{\partial}{\partial p_{y}} \arctan \left(p_{y} / p_{x}\right)=\frac{1}{\left(\frac{p_{y}}{p_{x}}\right)^{2}+1}\left(\frac{1}{p_{x}}\right)=\frac{p_{x}^{2}}{p_{x}^{2}+p_{y}^{2}} \frac{1}{p_{x}}=\frac{p_{x}}{p_{x}^{2}+p_{y}^{2}} \\ \frac{\partial \varphi}{\partial v_{x}}=\frac{\partial}{\partial v_{x}} \arctan \left(p_{y} / p_{x}\right)=0 \\ \frac{\partial \varphi}{\partial v_{y}}=\frac{\partial}{\partial v_{y}} \arctan \left(p_{y} / p_{x}\right)=0 \\ \frac{\partial \dot{\rho}}{\partial p_{x}}=\frac{\partial}{\partial p_{x}}\left(\frac{p_{x} v_{x}+p_{y} v_{y}}{\sqrt{p_{x}^{2}+p_{y}^{2}}}\right) \end{array} pxρ=px(px2+py2 )=px2+py2 2px=px2+py2 pxpyρ=py(px2+py2 )=2px2+py2 2py=px2+py2 pyvxρ=vx(px2+py2 )=0vyρ=vy(px2+py2 )=0pxφ=pxarctan(py/px)=(pxpy)2+11(px2py)=px2+py2pypyφ=pyarctan(py/px)=(pxpy)2+11(px1)=px2+py2px2px1=px2+py2pxvxφ=vxarctan(py/px)=0vyφ=vyarctan(py/px)=0pxρ˙=px(px2+py2 pxvx+pyvy) ↩︎

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泠山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值