滤波笔记四:扩展卡尔曼滤波
情境:
有一个正在移动的路人,他的状态通过二维位置和二维速度表示: 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′2arctan(py′/px′)px′2+py′2px′vx′+py′vy′
在图像中使用正反切可见,新的对应直方图并不再是一个高斯分布,因为
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(μ)+∂x∂h(μ)(x−μ)
从式中可以看出,
- 首先评估在均值位置 μ \mu μ 的非线性函数 h ( μ ) h(\mu) h(μ) ;
- 使用围绕 μ \mu μ 的斜度来推断这条线的斜度,由 h h h 的第一个导数给出: ∂ h ( μ ) ∂ x \frac{\partial h(\mu)}{\partial x} ∂x∂h(μ)
这样可得上图红色直线所示的线性函数。
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)(x−a)+2!f′′(a)(x−a)2+3!f′′′(a)(x−a)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)+(x−a)TDf(a)+2!1(x−a)TD2f(a)(x−a)+…
其中
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) (x−a) 值很小, ( x − a ) 2 (x-a)^2 (x−a)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(μ)+∂x∂h(μ)(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=
∂x1∂h1∂x1∂n2⋮∂x1∂hm∂x2∂h1∂x2∂h2⋮∂x2∂hm…⋯⋱⋯∂xn∂h1∂xn∂h2⋮∂xn∂hm
对于示例中已知的测量空间: 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+py2px−px2+py2py(px2+py2)3/2py(vxpy−vypx)px2+py2pypx2+py2px(px2+py2)3/2px(vypx−vxpy)00px2+py2px00px2+py2py
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模型.
滤波笔记三:粒子滤波.
偏导计算过程:
∂ ρ ∂ 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+py22px=px2+py2px∂py∂ρ=∂py∂(px2+py2)=2px2+py22py=px2+py2py∂vx∂ρ=∂vx∂(px2+py2)=0∂vy∂ρ=∂vy∂(px2+py2)=0∂px∂φ=∂px∂arctan(py/px)=(pxpy)2+11(−px2py)=−px2+py2py∂py∂φ=∂py∂arctan(py/px)=(pxpy)2+11(px1)=px2+py2px2px1=px2+py2px∂vx∂φ=∂vx∂arctan(py/px)=0∂vy∂φ=∂vy∂arctan(py/px)=0∂px∂ρ˙=∂px∂(px2+py2pxvx+pyvy) ↩︎