SLAM卡尔曼滤波&&非线性优化
高斯分布(正态分布)是一个常见的连续概率分布。正态分布的数学期望值或期望值 μ μ μ等于位置参数,决定了分布的位置;其方差 σ 2 \sigma ^{2} σ2 的开平方或标准差 σ \sigma σ 等于尺度参数,决定了分布的幅度。
1.高斯分布
一个随机变量
x
x
x服从高斯分布
N
N
N,那么它的概率密度函数为:
p
(
x
)
=
1
σ
2
π
e
x
p
(
−
(
x
−
μ
)
2
2
σ
2
)
p(x)=\frac{1} {{\sigma\sqrt{2\pi}}}exp(-\frac{(x-\mu)^2}{2\sigma^2})
p(x)=σ2π1exp(−2σ2(x−μ)2)
它的高维形式为:
P
(
x
)
=
1
(
2
π
)
N
d
e
t
(
Σ
)
e
x
p
(
−
1
2
(
x
−
μ
)
T
Σ
−
1
(
x
−
μ
)
)
P(x) = \frac{1}{\sqrt{(2\pi)^N det(\Sigma)}}exp(-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu))
P(x)=(2π)Ndet(Σ)1exp(−21(x−μ)TΣ−1(x−μ))
2.高斯分布的运算
2.1 线性运算
设两个独立的高斯分布:
x
∼
N
(
μ
x
,
Σ
x
x
)
,
y
∼
N
(
μ
y
,
Σ
y
y
)
x\sim N(\mu_x,\Sigma_{xx}),y\sim N(\mu_y,\Sigma_{yy})
x∼N(μx,Σxx),y∼N(μy,Σyy)
那么他们的和仍然是高斯分布:
x
+
y
∼
N
(
μ
x
+
μ
y
,
Σ
x
x
+
Σ
y
y
)
x+y\sim N(\mu_x+\mu_y,\Sigma_{xx}+\Sigma_{yy})
x+y∼N(μx+μy,Σxx+Σyy)
如果以常数
a
a
a乘以
x
x
x,那么
a
x
ax
ax满足:
a
x
∼
N
(
μ
a
x
,
a
2
Σ
x
x
)
ax\sim N(\mu_ax,a^2 \Sigma_{xx})
ax∼N(μax,a2Σxx)
如果取
y
=
A
x
y=Ax
y=Ax,那么
y
y
y满足:
y
∼
N
(
μ
A
x
,
A
2
Σ
x
x
)
y\sim N(\mu_Ax,A^2 \Sigma_{xx})
y∼N(μAx,A2Σxx)
2.2乘积
设两个高斯分布的乘积满足
p
(
x
y
)
=
N
(
μ
,
Σ
)
p(xy)=N(\mu,\Sigma)
p(xy)=N(μ,Σ),那么:
Σ
−
1
=
Σ
x
x
−
1
+
Σ
y
y
−
1
Σ
μ
=
Σ
x
x
−
1
μ
x
+
Σ
y
y
−
1
μ
y
\Sigma^{-1}=\Sigma^{-1}_{xx}+\Sigma^{-1}_{yy}\\\Sigma_{\mu}=\Sigma^{-1}_{xx}\mu_x+\Sigma^{-1}_{yy}\mu_y
Σ−1=Σxx−1+Σyy−1Σμ=Σxx−1μx+Σyy−1μy
2.2复合运算
同时考虑到
x
x
x和
y
y
y,当他们不独立时,其复合分布为:
p
(
x
,
y
)
=
N
(
[
μ
x
μ
y
]
,
[
Σ
x
x
Σ
x
y
Σ
y
x
Σ
y
y
]
)
p(x,y)=N\left (\begin{bmatrix}\mu_x\\\mu_y\end{bmatrix}, \begin{bmatrix}\Sigma_{xx}&\Sigma_{xy}\\\Sigma_{yx}&\Sigma_{yy}\end{bmatrix}\right)
p(x,y)=N([μxμy],[ΣxxΣyxΣxyΣyy])
其中
Σ
y
x
\Sigma_{yx}
Σyx和
Σ
y
x
\Sigma_{yx}
Σyx为两个变量的协方差,满足:
C
o
v
(
X
,
Y
)
=
E
[
(
X
−
E
(
X
)
)
(
Y
−
E
(
Y
)
)
]
=
E
[
X
Y
]
−
E
[
X
]
E
[
Y
]
Cov(X,Y) =E[(X-E(X))(Y-E(Y))]=E[XY]-E[X]E[Y]
Cov(X,Y)=E[(X−E(X))(Y−E(Y))]=E[XY]−E[X]E[Y]
协方差为正,则说明这两个变量呈正相关,为零则不相关,为负则为负相关。
由条件分布(贝叶斯法则)展开式
p
(
x
,
y
)
=
p
(
x
∣
y
)
p
(
y
)
p(x,y)=p(x|y)p(y)
p(x,y)=p(x∣y)p(y)可以推出,条件概率
p
(
x
∣
y
)
p(x|y)
p(x∣y)满足:
p
(
x
∣
y
)
=
N
(
μ
x
+
Σ
x
x
Σ
y
y
−
1
(
y
−
μ
y
)
,
Σ
x
x
−
Σ
x
y
Σ
y
y
−
1
Σ
y
x
)
p(x|y)=N(\mu_x+\Sigma_{xx}\Sigma_{yy}^{-1}(y-\mu_y),\Sigma_{xx}-\Sigma_{xy}\Sigma_{yy}^{-1}\Sigma_{yx})
p(x∣y)=N(μx+ΣxxΣyy−1(y−μy),Σxx−ΣxyΣyy−1Σyx)
舒尔补
现在来推导如何得出该结论:
舒尔补理论:把矩阵分解成上三角矩阵、对角阵、下三角矩阵乘积的形式,方便运算,即:
[
A
B
C
D
]
=
[
I
B
D
−
1
0
I
]
[
Δ
D
0
0
D
]
[
I
0
D
−
1
C
I
]
\begin{bmatrix}A&B\\C&D\end{bmatrix}\\= \begin{bmatrix}I&BD^{-1}\\0&I\end{bmatrix}\begin{bmatrix}\Delta D&0\\0&D\end{bmatrix}\begin{bmatrix}I&0\\D^{-1}C&I\end{bmatrix}
[ACBD]=[I0BD−1I][ΔD00D][ID−1C0I]
其中
Δ
D
=
A
−
B
D
−
1
C
\Delta D=A-BD^{-1}C
ΔD=A−BD−1C称为矩阵
D
D
D的舒尔补。
同样地:
[
A
B
C
D
]
−
1
=
[
I
0
−
D
−
1
C
I
]
[
Δ
D
−
1
0
0
D
−
1
]
[
I
−
B
D
−
1
0
I
]
\begin{bmatrix}A&B\\C&D\end{bmatrix}^{-1}\\= \begin{bmatrix}I&0\\-D^{-1}C&I\end{bmatrix}\begin{bmatrix}\Delta D^{-1}&0\\0&D^{-1}\end{bmatrix}\begin{bmatrix}I&-BD^{-1}\\0&I\end{bmatrix}
[ACBD]−1=[I−D−1C0I][ΔD−100D−1][I0−BD−1I]
具体推导过程(了解)
由于
p
(
x
∣
y
)
=
p
(
x
,
y
)
/
p
(
y
)
p(x|y)=p(x,y)/p(y)
p(x∣y)=p(x,y)/p(y),根据其指数部分展开形式可以得到:
(
[
x
y
]
−
[
μ
x
μ
y
]
)
T
[
Σ
x
x
Σ
x
y
Σ
y
x
Σ
y
y
]
T
(
[
x
y
]
−
[
μ
x
μ
y
]
)
=
(
[
x
y
]
−
[
μ
x
μ
y
]
)
T
[
1
0
−
Σ
y
y
−
1
Σ
y
x
1
]
[
(
Σ
x
x
−
Σ
x
y
Σ
y
y
−
1
Σ
y
x
)
−
1
0
0
Σ
y
y
−
1
]
[
1
−
Σ
x
y
Σ
y
y
−
1
0
1
]
(
[
x
y
]
−
[
μ
x
μ
y
]
)
=
(
x
−
μ
x
−
Σ
x
x
Σ
y
y
−
1
(
y
−
μ
y
)
)
T
(
Σ
x
x
−
Σ
x
y
Σ
y
y
−
1
Σ
y
x
)
T
(
x
−
μ
x
−
Σ
x
x
Σ
y
y
−
1
(
y
−
μ
y
)
)
T
+
(
y
−
μ
y
)
T
Σ
y
y
−
1
(
y
−
μ
y
)
\left(\begin{bmatrix}x\\y\end{bmatrix}-\begin{bmatrix}\mu_x\\\mu_y\end{bmatrix} \right)^T\begin{bmatrix}\Sigma_{xx}&\Sigma_{xy}\\\Sigma_{yx}&\Sigma_{yy}\end{bmatrix}^T\left(\begin{bmatrix}x\\y\end{bmatrix}-\begin{bmatrix}\mu_x\\\mu_y\end{bmatrix} \right)\\=\left(\begin{bmatrix}x\\y\end{bmatrix}-\begin{bmatrix}\mu_x\\\mu_y\end{bmatrix} \right)^T \begin{bmatrix}1&0\\-\Sigma_{yy}^{-1}\Sigma_{yx}&1\end{bmatrix} \begin{bmatrix}(\Sigma_{xx}-\Sigma_{xy}\Sigma_{yy}^{-1}\Sigma_{yx})^{-1}&0\\0&\Sigma_{yy}^{-1}\end{bmatrix} \begin{bmatrix}1&-\Sigma_{xy}\Sigma_{yy}^{-1}\\0&1\end{bmatrix}\left(\begin{bmatrix}x\\y\end{bmatrix}-\begin{bmatrix}\mu_x\\\mu_y\end{bmatrix} \right)\\=\left(x-\mu_x-\Sigma_{xx}\Sigma_{yy}^{-1}(y-\mu_y)\right)^{T}(\Sigma_{xx}-\Sigma_{xy}\Sigma_{yy}^{-1}\Sigma_{yx})^{T}\left(x-\mu_x-\Sigma_{xx}\Sigma_{yy}^{-1}(y-\mu_y)\right)^{T}+(y-\mu_y)^T\Sigma_{yy}^{-1}(y-\mu_y)
([xy]−[μxμy])T[ΣxxΣyxΣxyΣyy]T([xy]−[μxμy])=([xy]−[μxμy])T[1−Σyy−1Σyx01][(Σxx−ΣxyΣyy−1Σyx)−100Σyy−1][10−ΣxyΣyy−11]([xy]−[μxμy])=(x−μx−ΣxxΣyy−1(y−μy))T(Σxx−ΣxyΣyy−1Σyx)T(x−μx−ΣxxΣyy−1(y−μy))T+(y−μy)TΣyy−1(y−μy)
由于
p
(
y
)
p(y)
p(y)的指数部分为:
(
y
−
μ
y
)
T
Σ
y
y
−
1
(
y
−
μ
y
)
(y-\mu_y)^T\Sigma_{yy}^{-1}(y-\mu_y)
(y−μy)TΣyy−1(y−μy)
因此,
p
(
x
∣
y
)
=
p
(
x
,
y
)
/
p
(
y
)
=
N
(
μ
x
+
Σ
x
x
Σ
y
y
−
1
(
y
−
μ
y
)
,
Σ
x
x
−
Σ
x
y
Σ
y
y
−
1
Σ
y
x
)
p(x|y)=p(x,y)/p(y)=N(\mu_x+\Sigma_{xx}\Sigma_{yy}^{-1}(y-\mu_y),\Sigma_{xx}-\Sigma_{xy}\Sigma_{yy}^{-1}\Sigma_{yx})
p(x∣y)=p(x,y)/p(y)=N(μx+ΣxxΣyy−1(y−μy),Σxx−ΣxyΣyy−1Σyx)
3.复合运算例子
考虑到随机变量
x
∼
N
(
μ
x
,
Σ
x
x
)
x\sim N(\mu_x,\Sigma_{xx})
x∼N(μx,Σxx),另一变量
y
y
y满足:
y
=
A
x
+
b
+
w
y=Ax+b+w
y=Ax+b+w
其中
A
,
b
A,b
A,b为线性变量的系数矩阵和偏移量,
w
w
w为噪声项,为零均值的高斯分布:
w
∼
N
(
0
,
R
)
w \sim N(0,R)
w∼N(0,R).因此:
E
(
y
)
=
E
(
A
x
+
b
+
w
)
=
A
E
(
x
)
+
b
+
E
(
w
)
=
A
μ
x
+
b
C
o
v
(
y
)
=
E
[
(
x
−
E
[
x
]
)
(
x
−
E
(
x
)
)
]
+
C
o
v
(
w
)
=
A
E
[
(
x
−
μ
x
)
(
x
−
μ
x
)
T
]
A
T
+
R
=
A
Σ
x
x
A
T
+
R
E(y)=E(Ax+b+w)=AE(x)+b+E(w)=A\mu_x+b\\ Cov(y)=E[(x-E[x])(x-E(x))]+Cov(w)=AE[(x-\mu_x)(x-\mu_x)^T]A^T+R=A\Sigma_{xx} A^T+R
E(y)=E(Ax+b+w)=AE(x)+b+E(w)=Aμx+bCov(y)=E[(x−E[x])(x−E(x))]+Cov(w)=AE[(x−μx)(x−μx)T]AT+R=AΣxxAT+R
p
(
y
)
=
N
(
A
μ
x
+
b
,
A
Σ
x
x
A
T
+
R
)
p(y)=N(A\mu_x+b,A\Sigma_{xx}A^T+R)
p(y)=N(Aμx+b,AΣxxAT+R)
4.SLAM问题的数学表述
通常,机器人或者无人车在运动过程中会携带一个测量自身运动的传感器(IMU,轮速里程计等),通过积分运算可以抽象出一个关于本体感知的数学模型:
x
k
=
f
(
x
k
−
1
,
u
k
,
w
k
)
x_k=f(x_{k-1},u_k,w_k)
xk=f(xk−1,uk,wk)
这里的
u
k
u_k
uk是运动传感器的读数(有时候也称为输入),
w
k
w_k
wk为噪声,该方程称为运动方程,目前没有给出具体的运动意义,是因为运动传感器可以是选择的,根据不同的运动传感器可以列出不同的方程,或者是他们的组合,即多传感器融合。
同样的,在SLAM中还有一个环境感知传感器(激光雷达、相机、红外设备)的观测部分,环境感知所对应的方程为观测方程,当机器人或者无人车在
x
k
x_k
xk的位置上观测到某个路标点
y
j
y_j
yj,此时产生了一个观测数据z_{k,j},同样的抽象出其数学模型为:
z
k
,
j
=
h
(
y
j
,
x
k
,
v
k
,
j
)
z_{k,j}=h(y_j,x_k,v_{k,j})
zk,j=h(yj,xk,vk,j)
其中,
v
k
,
j
v_{k,j}
vk,j为观测噪声,同样观测方程根据环境传感器的不同而有不同的形式。
因此SLAM问题可以总结出两个基本的方程:
{
x
k
=
f
(
x
k
−
1
,
u
k
,
w
k
)
z
k
,
j
=
h
(
y
j
,
x
k
,
v
k
,
j
)
\left\{ \begin{array}{lr} x_k=f(x_{k-1},u_k,w_k) \\ z_{k,j}=h(y_j,x_k,v_{k,j})& \end{array} \right.
{xk=f(xk−1,uk,wk)zk,j=h(yj,xk,vk,j)
从上述方程中可以看出:
1.观测方程中,只有在位置
x
k
x_k
xk看到了
y
j
y_j
yj时才会产生观测数据,否则就没有。然而在实际过程中,一个位置通常可以看到一小部分路标,同时无论是相机还是激光雷达观察特征时,特征点数量较多,所以实际过程中观测方程会远远大于运动方程数量。
2.运动方程中,实际过程中,如果做纯视觉SLAM或者纯激光SLAM,往往会缺少运动方程;在这种时候的处理方式通常假设为车辆匀速运动或者不动或者匀加速运动等。
3.位姿
x
x
x(定位)和路标
y
y
y(建图)看成服从某种概率分布的随机变量,而不是单独的一个数。由于两者都是待估计的量,改变一下记号,令
x
k
x_k
xk为
k
k
k时刻的所有未知量,同时包含了当前时刻的车辆位姿(假设已经完成传感器与车体的标定)与m个路标点,则:
x
k
≜
{
x
k
,
y
1
,
.
.
.
.
.
.
,
y
m
}
x_k\triangleq \{x_k,y_1,......,y_m\}
xk≜{xk,y1,......,ym}
同样的把
k
k
k时刻所有的观测量都记为
z
k
z_k
zk,于是:
{
x
k
=
f
(
x
k
−
1
,
u
k
)
+
w
k
z
k
=
h
(
x
k
)
+
v
k
,
j
\left\{ \begin{array}{lr} x_k=f(x_{k-1},u_k) +w_k\\ z_{k}=h(x_k)+v_{k,j}& \end{array} \right.
{xk=f(xk−1,uk)+wkzk=h(xk)+vk,j
直接给出待估计的后验概率密度为:
P
(
x
k
∣
x
0
,
u
1
:
k
,
z
1
:
k
)
P(x_k|x_0,u_{1:k},z_{1:k})
P(xk∣x0,u1:k,z1:k)
其中:
x
0
x_0
x0表示状态的初识值;
u
1
:
k
u_{1:k}
u1:k表示
1
1
1到
k
k
k运动传感器的输入;
z
1
:
k
z_{1:k}
z1:k表示的
0
0
0到
k
k
k时刻所有的观测,该问题表示的是:**根据所有历史数据(输入、观测、初始状态)得出最终的融合结果,即滤波问题。**用图表示为:
根据Bayes 法则,将
z
k
z_k
zk和
x
k
x_k
xk交换位置:
P
(
x
k
∣
x
0
,
u
1
:
k
,
z
1
:
k
)
∝
P
(
z
k
∣
x
k
)
P
(
x
k
∣
x
0
,
u
1
:
k
,
z
1
:
k
−
1
)
P(x_k|x_0,u_{1:k},z_{1:k})\propto P(z_k|x_k)P(x_k|x_0,u_{1:k},z_{1:k-1})
P(xk∣x0,u1:k,z1:k)∝P(zk∣xk)P(xk∣x0,u1:k,z1:k−1)
这里注意:第一项称为似然,第二项称为先验。在不同的分法中,先验部分其实有通过运动预测得到的,称为预测部分,也有基于过去的所有状态得到部分称为先验,如下,按照
x
k
−
1
x_k-1
xk−1时刻为条件概率展开:
P
(
x
k
∣
x
0
,
u
1
:
k
,
z
1
:
k
−
1
)
=
∫
P
(
x
k
∣
x
k
−
1
,
x
0
,
u
1
:
k
,
z
1
:
k
−
1
)
P
(
x
k
−
1
∣
x
0
,
u
1
:
k
,
z
1
:
k
−
1
)
d
x
k
−
1
P(x_k|x_0,u_{1:k},z_{1:k-1})=\int P(x_k|x_{k-1},x_0,u_{1:k},z_{1:k-1})P(x_{k-1}|x_0,u_{1:k},z_{1:k-1})dx_{k-1}
P(xk∣x0,u1:k,z1:k−1)=∫P(xk∣xk−1,x0,u1:k,z1:k−1)P(xk−1∣x0,u1:k,z1:k−1)dxk−1
对于该公式,这里称为(A)公式,得出以下结论与假设:
1.如果我们考虑更久之前的状态,也可以继续对此式进行展开。
2.如果只关心只关心
k
k
k时刻和
k
−
1
k-1
k−1时刻,可以假设为一阶马尔可夫性:
k
k
k时刻的状态只与
k
−
1
k-1
k−1时刻状态无关,而与再之前的状态无关,得到滤波的方法,如扩展卡尔曼滤波器(EKF):以某时刻的状态估计,推导到下一时刻。
3.如果考虑
k
k
k时刻状态与之前所有状态的联系,得到非线性优化为主体的优化框架。
5.卡尔曼滤波(KF)
对(A)公式进行马尔可夫假设,当前时刻只与上一时刻有关,预测部分为:
P
(
x
k
∣
x
k
−
1
,
x
0
,
u
1
:
k
,
z
1
:
k
−
1
)
=
P
(
x
k
∣
x
k
−
1
,
u
k
)
P(x_k|x_{k-1},x_0,u_{1:k},z_{1:k-1})=P(x_k|x_{k-1},u_k)
P(xk∣xk−1,x0,u1:k,z1:k−1)=P(xk∣xk−1,uk)
先验部分可以简化为:
P
(
x
k
−
1
∣
x
0
,
u
1
:
k
,
z
1
:
k
−
1
)
=
P
(
x
k
−
1
∣
x
0
,
u
1
:
k
−
1
,
z
1
:
k
−
1
)
P(x_{k-1}|x_0,u_{1:k},z_{1:k-1})=P(x_{k-1}|x_0,u_{1:k-1},z_{1:k-1})
P(xk−1∣x0,u1:k,z1:k−1)=P(xk−1∣x0,u1:k−1,z1:k−1)
从图上可以看出输入量
u
k
u_{k}
uk与
k
−
1
k-1
k−1时刻无关。上面的两个方程:以
k
−
1
k-1
k−1时刻的状态估计,推导到
k
k
k时刻。
假设:
1.这里的状态量服从高斯分布,那只需考虑维护状态量的均值和协方差即可。
2.所有的状态和噪声均满足高斯分布。
线性高斯系统可以使用运动方程和观测方程来表示:
{
x
k
=
A
k
x
k
−
1
+
u
k
+
w
k
z
k
=
C
k
x
k
+
v
k
\left\{ \begin{array}{lr} x_k=A_kx_{k-1}+u_k+w_k\\ z_{k}=C_kx_k+v_k& \end{array} \right.
{xk=Akxk−1+uk+wkzk=Ckxk+vk
噪声服从零均值高斯分布,则:
w
k
∼
N
(
0
,
R
)
,
v
k
∼
N
(
0
,
Q
)
w_k\sim N(0,\bm R),v_k\sim N(0,\bm Q)
wk∼N(0,R),vk∼N(0,Q)
记
x
^
\hat x
x^为后验,
x
‾
\overline x
x为先验分布,假设已知
k
−
1
k-1
k−1时刻的后验状态估计:
x
^
k
−
1
\hat x_{k-1}
x^k−1和此时的协方差
P
^
k
−
1
\hat{\bm P}_{k-1}
P^k−1。此时的目的比较明确:根据
k
−
1
k-1
k−1时刻的后验状态估计,以及输入和观测数据确定
k
k
k时刻的后验分布。
1.预测部分
根据运动方程和高斯分布确定为:
P
(
x
k
∣
x
k
−
1
,
x
0
,
u
1
:
k
,
z
1
:
k
−
1
)
=
N
(
A
k
x
^
k
−
1
+
u
k
,
A
k
P
^
k
−
1
A
k
T
+
R
)
P(x_k|x_{k-1},x_0,u_{1:k},z_{1:k-1})=N(\bm A_k\hat x_{k-1}+u_k,\bm A_k\bm {\hat P}_{k-1}\bm A_k^T+\bm R)
P(xk∣xk−1,x0,u1:k,z1:k−1)=N(Akx^k−1+uk,AkP^k−1AkT+R)
记:
x
‾
=
A
k
x
^
k
−
1
+
u
k
,
P
‾
=
A
k
P
^
k
−
1
A
k
T
+
R
\overline x=\bm A_k\hat x_{k-1}+u_k,\overline {\bm P}=\bm A_k\bm {\hat P}_{k-1}\bm A_k^T+\bm R
x=Akx^k−1+uk,P=AkP^k−1AkT+R
2.观测方程
观测方程可以计算在某个状态下,应该观测数据,根据观测方程和高斯分布确定为:
P
(
z
k
∣
x
k
)
=
N
(
C
k
x
k
,
Q
)
P(z_k|x_k)=N(C_kx_k,Q)
P(zk∣xk)=N(Ckxk,Q)
设结果为
x
k
∼
N
(
x
^
k
,
P
^
k
)
x_k\sim N(\hat x_k,\hat {\bm P}_k)
xk∼N(x^k,P^k),根据公式:
P
(
x
k
∣
x
0
,
u
1
:
k
,
z
1
:
k
)
∝
P
(
z
k
∣
x
k
)
P
(
x
k
∣
x
0
,
u
1
:
k
,
z
1
:
k
−
1
)
P(x_k|x_0,u_{1:k},z_{1:k})\propto P(z_k|x_k)P(x_k|x_0,u_{1:k},z_{1:k-1})
P(xk∣x0,u1:k,z1:k)∝P(zk∣xk)P(xk∣x0,u1:k,z1:k−1)
可以得到前面推导很熟悉的一个公式:
N
(
x
^
k
,
P
^
k
)
=
N
(
x
‾
k
,
P
‾
k
)
⋅
N
(
C
k
x
k
,
Q
)
=
N
(
[
μ
x
μ
y
]
,
[
Σ
x
x
Σ
x
y
Σ
y
x
Σ
y
y
]
)
N(\hat x_k,\hat {\bm P}_k)=N(\overline x_k,\overline {\bm P}_k)\cdot N(\bm C_kx_k,\bm Q)=N\left (\begin{bmatrix}\mu_x\\\mu_y\end{bmatrix}, \begin{bmatrix}\Sigma_{xx}&\Sigma_{xy}\\\Sigma_{yx}&\Sigma_{yy}\end{bmatrix}\right)
N(x^k,P^k)=N(xk,Pk)⋅N(Ckxk,Q)=N([μxμy],[ΣxxΣyxΣxyΣyy])
直接用结论:
N
(
x
^
k
,
P
^
k
)
=
N
(
μ
x
+
Σ
x
y
Σ
y
y
−
1
(
y
−
μ
y
)
,
Σ
x
x
−
Σ
x
y
Σ
y
y
−
1
Σ
y
x
)
N(\hat x_k,\hat {\bm P}_k)=N(\mu_x+\Sigma_{xy}\Sigma_{yy}^{-1}(y-\mu_y),\Sigma_{xx}-\Sigma_{xy}\Sigma_{yy}^{-1}\Sigma_{yx})
N(x^k,P^k)=N(μx+ΣxyΣyy−1(y−μy),Σxx−ΣxyΣyy−1Σyx)
这里可以直接看到:
P
‾
k
=
Σ
x
x
Σ
y
y
=
Σ
(
C
k
x
k
)
+
Σ
(
n
)
=
E
[
(
C
k
x
k
−
u
x
)
(
C
k
x
k
−
u
x
)
T
]
+
Q
=
C
k
P
‾
k
C
k
T
+
Q
\bm {\overline P}_k=\Sigma_{xx}\\\Sigma_{yy}=\Sigma(C_kx_k)+\Sigma(n)=E[(C_kx_k-u_x)(C_kx_k-u_x)^T]+\bm Q= C_k\bm {\overline P}_kC_k^T+\bm Q
Pk=ΣxxΣyy=Σ(Ckxk)+Σ(n)=E[(Ckxk−ux)(Ckxk−ux)T]+Q=CkPkCkT+Q
可以推导出
Σ
x
y
=
E
[
(
x
−
u
x
)
(
z
k
−
u
z
)
T
]
=
E
[
(
x
−
u
x
)
(
C
k
x
k
−
C
k
u
x
+
n
)
T
)
]
=
E
[
(
x
−
u
x
)
(
C
k
x
k
−
C
k
u
x
)
T
+
(
x
−
u
x
)
n
T
]
=
Σ
x
x
C
k
T
=
P
‾
k
C
k
T
Σ
y
x
=
Σ
x
y
T
=
C
k
P
‾
k
\Sigma_{xy}=E[(x-u_x)(z_k-u_z)^T]\\ =E[(x-u_x)(C_kx_k-C_ku_x+n)^T)]\\ =E[(x-u_x)(C_kx_k-C_ku_x)^T+(x-u_x)n^T]\\ =\Sigma_{xx}C_k^T\\ =\bm {\overline P}_kC_k^T\\ \Sigma_{yx}=\Sigma_{xy}^T=C_k\bm {\overline P}_k
Σxy=E[(x−ux)(zk−uz)T]=E[(x−ux)(Ckxk−Ckux+n)T)]=E[(x−ux)(Ckxk−Ckux)T+(x−ux)nT]=ΣxxCkT=PkCkTΣyx=ΣxyT=CkPk
定义:
K
=
Σ
x
y
Σ
y
y
−
1
=
P
‾
k
C
k
T
(
C
k
P
‾
k
C
k
T
+
Q
)
−
1
\bm K=\Sigma_{xy}\Sigma_{yy}^{-1}=\bm {\overline P}_kC_k^T(C_k\bm {\overline P}_kC_k^T+\bm Q)^{-1}
K=ΣxyΣyy−1=PkCkT(CkPkCkT+Q)−1
则有
P
^
k
=
P
‾
k
−
K
C
k
P
‾
k
=
(
I
−
K
C
k
)
P
‾
k
x
^
k
=
x
‾
k
+
K
(
z
k
−
C
k
x
‾
)
\hat{\bm P}_k=\bm {\overline P}_k-\bm KC_k\bm {\overline P}_k=(\bm I-\bm KC_k)\bm {\overline P}_k\\ \hat x_k=\overline x_k+\bm K(z_k-C_k\overline x)
P^k=Pk−KCkPk=(I−KCk)Pkx^k=xk+K(zk−Ckx)
整理一下,五个方程为:
1.预测: x ‾ = A k x ^ k − 1 + u k , P k ‾ = A k P ^ k − 1 A k T + R \overline x=\bm A_k\hat x^{k-1}+u_k,\bm {\overline { P_k}}=\bm A_k\bm {\hat P}_{k-1}\bm A_k^T+\bm R x=Akx^k−1+uk,Pk=AkP^k−1AkT+R
2.更新:先计算 K \bm K K,又称为卡尔曼增益:
K = P ‾ k C k T ( C k P ‾ k C k T + Q ) − 1 \bm K=\bm {\overline P}_kC_k^T(C_k\bm {\overline P}_kC_k^T+\bm Q)^{-1} K=PkCkT(CkPkCkT+Q)−1
然后计算后验概率分布: P ^ k = ( I − K C k ) P ‾ k x ^ k = x ‾ k + K ( z k − C k x ‾ ) \hat{\bm P}_k=(\bm I-\bm KC_k)\bm {\overline P}_k\\ \hat x_k=\overline x_k+\bm K(z_k-C_k\overline x) P^k=(I−KCk)Pkx^k=xk+K(zk−Ckx)
至此,我们推导了经典的卡尔曼滤波器的整个过程。事实上卡尔曼滤波器有若干种推导方式,而我们使用的是从概率角度出发的最大后验概率估计的形式。我们看到,在线性高斯系统中,卡尔曼滤波器构成了该系统中的最大后验概率估计。而且,由于高斯分布经
过线性变换后仍服从高斯分布,所以整个过程中我们没有进行任何的近似。可以说,卡尔曼滤波器构成了线性系统的最优无偏估计。
6.扩展卡尔曼滤波(EKF)
卡尔曼滤波器通常适用于线性系统,但是在SLAM中,运动方程和观测方程通常为非线性函数。无论视觉SLAM模型还是激光SLAM,使用李代数表示位姿,更不可能是一个线性系统。一个高斯分布,经过非线性变换后,往往不再是高斯分布,所以在非线性系统中,需要进行近似处理,将一个非高斯分布近似成一个高斯分布。
通常把卡尔曼滤波器的结果拓展到非线性系统中来,称为扩展卡尔曼滤波器(Extended Kalman Filter,EKF),通常的做法是,在某个点附近考虑运动方程以及观测方程的一阶泰勒展开,只保留一阶项,即线性部分,然后按照线性系统进行推导。非线性化的运动方程和观测方程为:
运动方程:
x
k
=
f
(
x
k
−
1
,
u
k
,
w
k
)
x_k=f(x_{k-1},u_k,w_k)
xk=f(xk−1,uk,wk)
观测方程为:
z
k
=
h
(
x
k
,
n
k
)
z_k=h(x_k,n_k)
zk=h(xk,nk)
令
k
−
1
k-1
k−1时刻点均值与协方差矩阵为为
x
^
k
−
1
\hat \bm{x}_{k-1}
x^k−1,
P
^
k
−
1
\hat \bm{P}_{k-1}
P^k−1。在
k
k
k时刻,把运动方程和观测方程,在
x
^
k
−
1
\hat \bm{x}_{k-1}
x^k−1,
P
^
k
−
1
\hat \bm{P}_{k-1}
P^k−1处进行线性化(相当于一阶泰勒展开):
x
k
≈
f
(
x
^
k
−
1
,
u
k
,
w
k
)
+
∂
f
∂
x
k
−
1
∣
x
^
k
−
1
(
x
k
−
1
−
x
^
k
−
1
)
+
∂
f
∂
w
k
∣
x
^
k
−
1
w
k
\left. x_k\approx f(\hat x_{k-1},u_k,w_k)+\frac{\partial f}{\partial x_{k-1}}\right|_ {\hat x_{k-1}}(x_{k-1}-\hat x_{k-1})+\left.\frac{\partial f}{\partial w_{k}}\right|_ {\hat x_{k-1}}w_k
xk≈f(x^k−1,uk,wk)+∂xk−1∂f∣∣∣∣x^k−1(xk−1−x^k−1)+∂wk∂f∣∣∣∣x^k−1wk
记这里的偏导数为:
F
=
∂
f
∂
x
k
−
1
∣
x
^
k
−
1
\left. \bm F=\frac{\partial f}{\partial x_{k-1}}\right|_ {\hat x_{k-1}}
F=∂xk−1∂f∣∣∣∣x^k−1
B
k
−
1
=
∂
f
∂
w
k
∣
x
^
k
−
1
\bm B_{k-1}=\left.\frac{\partial f}{\partial w_{k}}\right|_ {\hat x_{k-1}}
Bk−1=∂wk∂f∣∣∣∣x^k−1
对于观测方程,同样地有:
z
k
≈
h
(
x
‾
k
)
+
∂
h
∂
x
k
∣
x
‾
k
(
x
k
−
x
‾
k
)
+
∂
h
∂
n
k
∣
x
‾
k
n
k
\left. z_k\approx h(\overline x_k)+\frac{\partial h}{\partial x_{k}}\right|_ {\overline x_{k}}(x_{k}-\overline x_k)+\left.\frac{\partial h}{\partial n_{k}}\right|_ {\overline x_{k}}n_k
zk≈h(xk)+∂xk∂h∣∣∣∣xk(xk−xk)+∂nk∂h∣∣∣∣xknk
记:
H
=
∂
h
∂
x
k
∣
x
^
k
\left. \bm H=\frac{\partial h}{\partial x_{k}}\right|_ {\hat x_{k}}
H=∂xk∂h∣∣∣∣x^k
C
k
=
∂
h
∂
n
k
∣
x
‾
k
C_k=\left.\frac{\partial h}{\partial n_{k}}\right|_ {\overline x_{k}}
Ck=∂nk∂h∣∣∣∣xk
展开线性化结果方程为:
E
[
x
k
]
=
f
(
x
^
k
−
1
,
u
k
,
0
)
+
F
k
−
1
(
x
k
−
1
−
x
^
k
−
1
)
+
E
[
B
k
−
1
w
k
]
E[x_k]=f(\hat x_{k-1},u_k,0)+\bm F_{k-1}(x_{k-1}-\hat x_{k-1})+E[\bm B_{k-1}w_k]
E[xk]=f(x^k−1,uk,0)+Fk−1(xk−1−x^k−1)+E[Bk−1wk]
这里
w
k
w_k
wk和
n
k
n_k
nk服从零均值分布即:
w
k
∼
N
(
0
,
R
)
,
n
k
∼
N
(
0
,
Q
)
w_k\sim N(0,\bm R),n_k\sim N(0,\bm Q)
wk∼N(0,R),nk∼N(0,Q)
因此
E
[
B
k
−
1
w
k
]
=
0
E[\bm B_{k-1}w_k]=0
E[Bk−1wk]=0,
这里
E
(
x
k
−
1
]
=
x
^
k
−
1
E(x_{k-1}]=\hat x_{k-1}
E(xk−1]=x^k−1
E
(
x
^
k
−
1
)
=
x
^
k
−
1
E(\hat x_{k-1})=\hat x_{k-1}
E(x^k−1)=x^k−1
结果为:
E
[
x
k
]
=
f
(
x
^
k
−
1
,
u
k
,
0
)
E[x_k]=f(\hat x_{k-1},u_k,0)
E[xk]=f(x^k−1,uk,0)
协方差矩阵为:
C
o
v
[
x
k
]
=
E
[
(
x
k
−
1
−
E
[
x
k
−
1
]
)
(
x
k
−
1
−
E
[
x
k
−
1
]
)
T
]
+
C
o
v
[
B
k
−
1
w
k
]
=
F
P
^
k
−
1
F
T
+
B
k
−
1
R
k
B
k
−
1
T
\begin{aligned} Cov[x_k]&=E[(x_{k-1}-E[x_{k-1}])(x_{k-1}-E[x_{k-1}])^T]+Cov[\bm B_{k-1}w_k]\\ &=\bm F \bm{\hat{P}}_{k-1}\bm F^T +\bm B_{k-1}\bm R_k\bm B_{k-1}^T \end{aligned}
Cov[xk]=E[(xk−1−E[xk−1])(xk−1−E[xk−1])T]+Cov[Bk−1wk]=FP^k−1FT+Bk−1RkBk−1T
*这里的推导根据高斯分布协方差的传递性:
E
(
y
)
=
E
(
A
x
+
b
+
w
)
=
A
E
(
x
)
+
b
+
E
(
w
)
=
A
μ
x
+
b
C
o
v
(
y
)
=
E
[
(
x
−
E
[
x
]
)
(
x
−
E
(
x
)
)
]
+
C
o
v
(
w
)
=
A
E
[
(
x
−
μ
x
)
(
x
−
μ
x
)
T
]
A
T
+
R
=
A
Σ
x
x
A
T
+
R
E(y)=E(Ax+b+w)=AE(x)+b+E(w)=A\mu_x+b\\ Cov(y)=E[(x-E[x])(x-E(x))]+Cov(w)=AE[(x-\mu_x)(x-\mu_x)^T]A^T+R=A\Sigma_{xx} A^T+R
E(y)=E(Ax+b+w)=AE(x)+b+E(w)=Aμx+bCov(y)=E[(x−E[x])(x−E(x))]+Cov(w)=AE[(x−μx)(x−μx)T]AT+R=AΣxxAT+R
C
o
v
[
B
k
−
1
w
k
]
=
B
k
−
1
C
o
v
[
w
k
]
B
k
−
1
T
Cov[\bm B_{k-1}w_k]=\bm B_{k-1}\bm Cov[w_k]\bm B_{k-1}^T
Cov[Bk−1wk]=Bk−1Cov[wk]Bk−1T
综合可以得到
p
(
x
k
∣
x
0
,
u
1
:
k
,
z
0
:
k
−
1
)
=
N
(
f
(
x
^
k
−
1
,
u
k
,
0
)
,
F
P
^
k
−
1
F
T
+
B
k
−
1
R
k
B
k
−
1
T
)
p(x_k|x_0,u_{1:k},z_{0:k-1})=N(f(\hat x_{k-1},u_k,0),\bm F \bm{\hat{P}}_{k-1}\bm F^T +\bm B_{k-1}\bm R_k\bm B_{k-1}^T)
p(xk∣x0,u1:k,z0:k−1)=N(f(x^k−1,uk,0),FP^k−1FT+Bk−1RkBk−1T)
与卡尔曼滤波相似,这里有:
x
‾
k
=
f
(
x
^
k
−
1
,
u
k
,
0
)
,
P
‾
k
=
F
P
^
k
−
1
F
T
+
B
k
−
1
R
k
B
k
−
1
T
\overline x_k=f(\hat x_{k-1},u_k,0),\bm {\overline P}_{k}=\bm F \bm{\hat{P}}_{k-1}\bm F^T +\bm B_{k-1}\bm R_k\bm B_{k-1}^T
xk=f(x^k−1,uk,0),Pk=FP^k−1FT+Bk−1RkBk−1T
同样地,在观测方程中:
E
[
z
k
]
=
E
[
h
(
x
‾
k
)
+
H
(
x
k
−
x
‾
k
)
+
C
k
n
k
]
=
h
(
x
‾
k
)
+
H
(
x
k
−
x
‾
k
)
C
o
v
[
z
k
]
=
E
[
(
x
‾
k
−
E
[
x
‾
k
]
)
(
x
‾
k
−
E
[
x
‾
k
]
)
T
]
+
C
o
v
[
C
k
n
k
]
=
C
k
E
[
n
k
]
C
k
T
=
C
k
Q
C
k
T
E[z_k]=E[h(\overline x_k)+\bm H(x_k-\overline x_{k})+\bm C_kn_k]=h(\overline x_k)+\bm H(x_k-\overline x_{k})\\ Cov[z_k]=E[(\overline x_k-E[\overline x_k])(\overline x_k-E[\overline x_k])^T]+Cov[\bm C_kn_k]\\ =\bm C_kE[n_k]\bm C_k^T=\bm C_k\bm Q\bm C_k^T
E[zk]=E[h(xk)+H(xk−xk)+Cknk]=h(xk)+H(xk−xk)Cov[zk]=E[(xk−E[xk])(xk−E[xk])T]+Cov[Cknk]=CkE[nk]CkT=CkQCkT
观测为
p
(
z
k
∣
x
k
)
=
N
(
h
(
x
‾
k
)
+
H
(
x
k
−
x
‾
k
)
,
C
k
Q
C
k
T
)
p(z_k|x_k)=N(h(\overline x_k)+\bm H(x_k-\overline x_{k}),\bm C_k\bm Q\bm C_k^T)
p(zk∣xk)=N(h(xk)+H(xk−xk),CkQCkT)
推导EKF同样为:
N
(
x
^
k
,
P
^
k
)
=
N
(
x
‾
k
,
P
‾
k
)
⋅
N
(
h
(
x
‾
k
)
+
H
(
x
k
−
x
k
−
1
)
,
C
k
Q
C
k
T
)
=
N
(
[
μ
x
μ
y
]
,
[
Σ
x
x
Σ
x
y
Σ
y
x
Σ
y
y
]
)
N(\hat x_k,\hat {\bm P}_k)=N(\overline x_k,\overline {\bm P}_k)\cdot N(h(\overline x_k)+\bm H(x_k-x_{k-1}),\bm C_k\bm Q\bm C_k^T)=N\left (\begin{bmatrix}\mu_x\\\mu_y\end{bmatrix}, \begin{bmatrix}\Sigma_{xx}&\Sigma_{xy}\\\Sigma_{yx}&\Sigma_{yy}\end{bmatrix}\right)
N(x^k,P^k)=N(xk,Pk)⋅N(h(xk)+H(xk−xk−1),CkQCkT)=N([μxμy],[ΣxxΣyxΣxyΣyy])
同样直接用结论:
直接用结论:
N
(
x
^
k
,
P
^
k
)
=
N
(
μ
x
+
Σ
x
y
Σ
y
y
−
1
(
y
−
μ
y
)
,
Σ
x
x
−
Σ
x
y
Σ
y
y
−
1
Σ
y
x
)
N(\hat x_k,\hat {\bm P}_k)=N(\mu_x+\Sigma_{xy}\Sigma_{yy}^{-1}(y-\mu_y),\Sigma_{xx}-\Sigma_{xy}\Sigma_{yy}^{-1}\Sigma_{yx})
N(x^k,P^k)=N(μx+ΣxyΣyy−1(y−μy),Σxx−ΣxyΣyy−1Σyx)
这里可以直接看到:
P
‾
k
=
Σ
x
x
Σ
y
y
=
Σ
(
h
(
x
‾
k
)
)
+
Σ
(
H
k
(
x
k
−
x
‾
k
)
)
+
Σ
(
C
k
n
k
)
=
0
+
H
E
[
(
x
k
−
1
−
E
[
x
k
−
1
]
)
(
x
k
−
1
−
E
[
x
k
−
1
]
)
T
]
H
T
+
C
k
Q
C
k
T
=
H
P
‾
k
H
T
+
C
k
Q
C
k
T
\bm {\overline P}_k=\Sigma_{xx}\\\Sigma_{yy}=\Sigma(h(\overline x_k))+\Sigma(H_k(x_k-\overline x_k))+\Sigma(\bm C_kn_k)=0+\bm HE[(x_{k-1}-E[x_{k-1}])(x_{k-1}-E[x_{k-1}])^T]\bm H^T+\bm C_k\bm Q\bm C_k^T= \bm H\bm {\overline P}_k\bm H^T+\bm C_k\bm Q\bm C_k^T
Pk=ΣxxΣyy=Σ(h(xk))+Σ(Hk(xk−xk))+Σ(Cknk)=0+HE[(xk−1−E[xk−1])(xk−1−E[xk−1])T]HT+CkQCkT=HPkHT+CkQCkT
可以推导出
Σ
x
y
=
E
[
(
x
−
u
x
)
(
z
k
−
u
z
)
T
]
=
E
[
(
x
−
u
x
)
(
h
(
x
‾
k
)
+
H
(
x
k
−
x
‾
k
)
+
C
n
k
−
h
(
x
‾
k
)
]
=
E
[
(
x
−
u
x
)
(
H
k
x
k
−
H
k
u
x
)
T
+
(
x
−
u
x
)
n
T
]
=
Σ
x
x
H
k
T
=
P
‾
k
H
k
T
Σ
y
x
=
Σ
x
y
T
=
H
k
P
‾
k
\Sigma_{xy}=E[(x-u_x)(z_k-u_z)^T]\\ =E[(x-u_x)(h(\overline x_k)+\bm H(x_{k}-\overline x_k)+\bm Cn_k-h(\overline x_k)]\\ =E[(x-u_x)(\bm H_kx_k-\bm H_ku_x)^T+(x-u_x)n^T]\\ =\Sigma_{xx}\bm H_k^T\\ =\bm {\overline P}_k\bm H_k^T\\ \Sigma_{yx}=\Sigma_{xy}^T=\bm H_k\bm {\overline P}_k
Σxy=E[(x−ux)(zk−uz)T]=E[(x−ux)(h(xk)+H(xk−xk)+Cnk−h(xk)]=E[(x−ux)(Hkxk−Hkux)T+(x−ux)nT]=ΣxxHkT=PkHkTΣyx=ΣxyT=HkPk
定义卡尔曼增益:
K
k
=
Σ
x
y
Σ
y
y
−
1
=
P
‾
k
H
k
T
(
H
k
P
‾
k
H
k
T
+
C
k
Q
C
k
T
)
−
1
\bm K_k=\Sigma_{xy}\Sigma_{yy}^{-1}=\bm {\overline P}_kH_k^T(H_k\bm {\overline P}_kH_k^T+\bm C_k\bm Q\bm C_k^T)^{-1}
Kk=ΣxyΣyy−1=PkHkT(HkPkHkT+CkQCkT)−1
在卡尔曼增益的基础上:
x
^
k
=
x
‾
k
+
K
k
(
z
k
−
h
(
x
‾
k
)
)
\hat x_k=\overline x_k+\bm K_k(z_k-h(\overline x_k))
x^k=xk+Kk(zk−h(xk))
P
^
k
=
P
‾
k
−
K
k
H
k
P
‾
k
=
(
I
−
K
k
H
k
)
P
‾
k
\bm {\hat P}_k=\overline {\bm P}_k-\bm K_k\bm H_k\bm {\overline P}_k=(\bm I-\bm K_k\bm H_k)\bm {\overline P}_k
P^k=Pk−KkHkPk=(I−KkHk)Pk
综上,得到EKF的经典五个公式为:
1.预测:
x ‾ k = f ( x ^ k − 1 , u k , 0 ) , P ‾ k = F P ^ k − 1 F T + B k − 1 R k B k − 1 T \overline x_k=f(\hat x_{k-1},u_k,0),\bm {\overline P}_{k}=\bm F \bm{\hat{P}}_{k-1}\bm F^T +\bm B_{k-1}\bm R_k\bm B_{k-1}^T xk=f(x^k−1,uk,0),Pk=FP^k−1FT+Bk−1RkBk−1T
2.更新:先计算 K \bm K K,又称为卡尔曼增益:
K k = Σ x y Σ y y − 1 = P ‾ k H k T ( H k P ‾ k H k T + C k Q C k T ) − 1 \bm K_k=\Sigma_{xy}\Sigma_{yy}^{-1}=\bm {\overline P}_kH_k^T(H_k\bm {\overline P}_kH_k^T+\bm C_k\bm Q\bm C_k^T)^{-1} Kk=ΣxyΣyy−1=PkHkT(HkPkHkT+CkQCkT)−1
然后计算后验概率分布:
P ^ k = P ‾ k − K k H k P ‾ k = ( I − K k H k ) P ‾ k x ^ k = x ‾ k + K k ( z k − h ( x ‾ k ) ) \bm {\hat P}_k=\overline {\bm P}_k-\bm K_k\bm H_k\bm {\overline P}_k=(\bm I-\bm K_k\bm H_k)\bm {\overline P}_k\\ \hat x_k=\overline x_k+\bm K_k(z_k-h(\overline x_k)) P^k=Pk−KkHkPk=(I−KkHk)Pkx^k=xk+Kk(zk−h(xk))
至此,扩展卡尔曼滤波(EKF)已经全部推导结束,EKF以形式简洁、应用广泛著称,在早期SLAM中占据了很长一段时间的主导地位,但是EKF有一些局限性:
1.滤波器在一定程度上假设了马尔科夫性:
k
k
k时刻的状态只与
k
−
1
k -1
k−1时刻相关,而与
k
−
1
k -1
k−1之前的状态和观测都无关(或者和前几个有限时间的状态相关)。这一假设导致激光/视觉里程计只考虑相邻两帧关系,遇到回环的情况,难以处理,这就需要非线性优化的方法将所有的历史数据放在一起进行优化,但是缺点是使得计算量上升,消耗更多的计算资源。
2.EKF滤波器仅在
x
^
k
−
1
\hat x_{k-1}
x^k−1处做了一次线性化,然后就直接根据这次线性化结果,计算后验概率。该方法认为该点处的线性化近似,在后验概率仍然是有效的。而实际上,当我们离开工作点较远的时候,一阶泰勒展开并不一定能够近似整个函数,这取决于运动模型和观测模型的非线性情况。如果它们有强烈的非线性,那线性近似就只在很小范围内成立,不能认为在很远的地方仍能用线性来近似。这就是EKF的非线性误差,是它的主要问题所在。
3.从程序实现上来说,EKF 需要存储状态量的均值和方差,并对它们进行维护和更新。如果把路标也放进状态的话,由于视觉SLAM 中路标数量很大,这个存储量是相当可观的,且与状态量呈平方增长(因为要存储协方差矩阵)。因此,EKF SLAM 普遍被认为不可适用于大型场景。
7.迭代扩展卡尔曼滤波(IEKF)
由于非线性模型中做了线性化近似,当非线性程度越强时,误差就会较大。但是,由于线性化的工作点离真值越近,线性化的误差就越小,因此解决该问题的一个方法是,通过迭代逐渐找到准确的线性化点,从而提高精度。
在EKF的推导中,仅改变观测的线性化观测点:
z
k
≈
h
(
x
o
p
,
k
,
0
)
+
H
k
(
x
k
−
x
o
p
,
k
)
+
C
k
n
k
z_k\approx h(x_{op,k},0)+\bm H_k(x_{k}-x_{op,k})+\bm C_kn_k
zk≈h(xop,k,0)+Hk(xk−xop,k)+Cknk
定义卡尔曼增益:
K
k
=
Σ
x
y
Σ
y
y
−
1
=
P
‾
k
H
k
T
(
H
k
P
‾
k
H
k
T
+
C
k
Q
C
k
T
)
−
1
\bm K_k=\Sigma_{xy}\Sigma_{yy}^{-1}=\bm {\overline P}_kH_k^T(H_k\bm {\overline P}_kH_k^T+\bm C_k\bm Q\bm C_k^T)^{-1}
Kk=ΣxyΣyy−1=PkHkT(HkPkHkT+CkQCkT)−1
在卡尔曼增益的基础上:
x
^
k
=
x
‾
k
+
K
k
(
(
z
k
−
H
k
x
‾
k
)
−
(
z
o
p
,
k
−
H
(
x
‾
k
)
)
\hat x_k=\overline x_k+\bm K_k((z_k-H_k\overline x_k)-(z_{op,k}-H(\overline x_k))
x^k=xk+Kk((zk−Hkxk)−(zop,k−H(xk))
滤波过程中,反复执行这2个公式,以上次的后验均值作为本次的线性化工作点,即可达到减小非线性误差的目的。需要注意的是,在这种滤波模式下,后验方差应放在最后一步进行。
8.其他滤波器的优缺点
8.1 MSCKF
MSCKF的目标是解决EKF的维数爆炸问题,也就是EKF讨论的第三点。传统EKF-SLAM将特征点加入到状态向量中与IMU状态一起估计,当环境很大时,特征点会非常多,状态向量维数会变得非常大。SCKF不是将特征点加入到状态向量,而是将不同时刻的位姿加入到状态向量,特征点会被多个传感器看到,从而在多个传感器状态(Multi-State)之间形成几何约束(Constraint),进而利用几何约束构建观测模型对EKF进行update。由于传感器位姿的个数会远小于特征点的个数,MSCKF状态向量的维度相较EKF-SLAM大大降低,历史的相机状态会不断移除,只维持固定个数的的相机位姿(Sliding Window),从而对MSCKF后端的计算量进行限定。
学习参考链接及论文:
1.A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation
2.Improving the Accuracy of EKF-Based Visual-Inertial Odometry
3. MSCKF那些事(一)MSCKF算法简介
4. MSCKF那些事(二)S-MSCKF试用与源码解析
9.卡尔曼滤波-系统方程离散化
离散化推导过程:
给定连续时间线性随机系统(即线性随机微分方程):
X
˙
(
t
)
=
F
(
t
)
X
(
t
)
+
G
(
t
)
w
(
t
)
\dot {\bm X}(t)=\bm F(t)\bm X(t)+\bm G(t)w(t)
X˙(t)=F(t)X(t)+G(t)w(t)
根据线性系统理论,上公式的等效离散化形式为:
X
k
=
Φ
k
/
k
−
1
X
k
−
1
+
η
k
−
1
\bm X_k=\Phi_{k/k-1}\bm X_{k-1}+\eta_{k-1}
Xk=Φk/k−1Xk−1+ηk−1
上面公式中,
X
k
=
X
(
t
k
)
Φ
k
/
k
−
1
=
Φ
(
t
k
,
t
k
−
1
)
≈
e
∫
t
k
−
1
t
k
F
(
τ
)
d
τ
η
k
−
1
=
∫
t
k
−
1
t
k
Φ
(
t
k
,
τ
)
G
(
τ
)
w
(
τ
)
d
τ
\bm X_k=\bm X(t_k)\\ \Phi_{k/k-1}=\Phi(t_k,t_{k-1})\approx e^{\int_{t_{k-1}}^{t_k}\bm F(\tau)d\tau}\\ \eta_{k-1}={\int_{t_{k-1}}^{t_k}\Phi(t_k,\tau)}\bm G(\tau)w(\tau)d\tau
Xk=X(tk)Φk/k−1=Φ(tk,tk−1)≈e∫tk−1tkF(τ)dτηk−1=∫tk−1tkΦ(tk,τ)G(τ)w(τ)dτ
记离散化时间间隔
T
s
=
t
k
−
t
k
−
1
T_s=t_k-t_{k-1}
Ts=tk−tk−1,当
F
(
t
)
\bm F(t)
F(t)在较短的积分区间
[
t
k
−
1
,
t
k
]
[t_{k-1},t_k]
[tk−1,tk]内变化不太剧烈时,且设
F
(
t
k
−
1
)
T
s
≪
I
\bm F(t_{k-1})T_s\ll \bm I
F(tk−1)Ts≪I,则进一步转移矩阵可以近似为如下:
Φ
k
/
k
−
1
=
Φ
(
t
k
,
t
k
−
1
)
≈
e
F
(
t
k
−
1
)
T
s
=
I
+
F
(
t
k
−
1
)
T
s
+
F
2
(
t
k
−
1
)
T
s
2
2
!
+
F
3
(
t
k
−
1
)
T
s
3
3
!
.
.
.
.
.
.
.
≈
I
+
F
(
t
k
−
1
)
T
s
\Phi_{k/k-1}=\Phi(t_k,t_{k-1})\approx e^{\bm F(t_{k-1})T_s}=\bm I+\bm F(t_{k-1})T_s+\bm F^2(t_{k-1})\frac {T^2_s}{2!}+\bm F^3(t_{k-1})\frac {T^3_s}{3!}.......\approx \bm I+\bm F(t_{k-1})T_s
Φk/k−1=Φ(tk,tk−1)≈eF(tk−1)Ts=I+F(tk−1)Ts+F2(tk−1)2!Ts2+F3(tk−1)3!Ts3.......≈I+F(tk−1)Ts
η
k
−
1
\eta_{k-1}
ηk−1是关于高斯白噪声的线性变换,其结果仍是正态分布的随机向量,所以可以用均值,方差,也就是一,二阶统计特征来描述和等效
η
k
−
1
\eta_{k-1}
ηk−1。
最终得到离散化的公式如下:
X
k
=
Φ
k
/
k
−
1
X
k
−
1
+
Γ
k
−
1
w
k
−
1
\bm X_k=\Phi_{k/k-1}\bm X_{k-1}+\Gamma_{k-1}w_{k-1}
Xk=Φk/k−1Xk−1+Γk−1wk−1
其中:
Γ
k
−
1
≈
[
I
+
F
(
t
k
−
1
)
T
s
]
G
(
k
−
1
)
≈
G
(
k
−
1
)
\Gamma_{k-1}\approx [\bm I+\bm F(t_{k-1})T_s]\bm G(k-1)\approx \bm G(k-1)
Γk−1≈[I+F(tk−1)Ts]G(k−1)≈G(k−1)
参考:
视觉SLAM十四讲,高翔