参考书:slam十四讲、SLAM中的EKF,UKF,PF原理简介
基于滤波的状态估计思路是,用前一个时刻的值来估计下一个时刻,而优化则是把所有状态看成变量,把运动方程和观测方程看成变量间的约束,构造误差函数,然后最小化这个误差的二次型。这里,着重理解如何将滤波的方法和优化的方法统一到贝叶斯的框架下的.
经典SLAM模型:
{
x
k
=
f
(
x
x
−
1
,
u
k
)
+
w
k
z
k
,
j
=
h
(
y
j
,
x
k
)
+
v
k
,
j
\left\{\begin{matrix} x_k=f(x_{x-1},u_k)+w_k \\ z_{k,j}=h(y_j,x_k)+v_{k,j} \end{matrix}\right.
{xk=f(xx−1,uk)+wkzk,j=h(yj,xk)+vk,j
其中,第一个是运动方程,第二个是观测方程. SLAM的问题其实就是根据运动输入
u
u
u 和观测
z
z
z,求什么样的状态
x
x
x 能使状态
x
x
x 的条件概率分布最大:
x
M
A
P
∗
=
a
r
g
m
a
x
P
(
x
∣
z
,
u
)
x_{MAP}^*=arg\ maxP(x|z,u)
xMAP∗=arg maxP(x∣z,u)
非线性优化
在只考虑观测方程时,也就是没有测量运动输入时(注意:这里不是说整个系统没有运动输入,而是观测方程中不包含运动输入这一项,也就是说运动输入只出现在运动方程中),根据贝叶斯法则,有:
P
(
x
∣
z
)
=
P
(
z
∣
x
)
P
(
x
)
P
(
z
)
∝
P
(
z
∣
x
)
P
(
x
)
P(x|z)=\frac{P(z|x)P(x)}{P(z)}\propto P(z|x)P(x)
P(x∣z)=P(z)P(z∣x)P(x)∝P(z∣x)P(x)
其中,
P
(
x
∣
z
)
P(x|z)
P(x∣z) 是后验概率
,右侧的
P
(
z
∣
x
)
P(z|x)
P(z∣x) 叫做似然
,
P
(
x
)
P(x)
P(x) 叫做先验
.
我们的目的是寻找
x
x
x 使得
P
(
x
∣
z
)
P(x|z)
P(x∣z) 最大,即最大后验概率
,它等于似然
与先验
的乘积,因为我们在观测方程中不知道机器人位姿在哪里(注意,这是因为观测方程没有运动输入啊,运动输入属于运动方程的范畴,注意跟KF的区别),所以就没有先验喽~,然后上面的最大后验概率
问题就转换成了最大似然
问题,即:
x
M
L
E
∗
=
a
r
g
m
a
x
P
(
z
∣
x
)
x_{MLE}^*=arg\ maxP(z|x)
xMLE∗=arg maxP(z∣x)
最大似然估计
可以理解为:“在什么样的状态下,最可能产生现在观测的数据.”
根据观测方程(注意,这个位置
x
k
x_k
xk 与KF中观测方程中
x
~
k
\widetilde x_k
x
k 是不一样的,KF里是指状态变量的先验估计
,这里没有先验的说法,而就是指优化变量
本身.)
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
得到观测数据的条件概率为:
P
(
z
j
,
k
∣
x
k
,
y
j
)
=
N
(
h
(
y
j
,
x
k
)
,
Q
k
,
j
)
P(z_{j,k}|x_k,y_j)=N(h(y_j,x_k),\ Q_{k,j})
P(zj,k∣xk,yj)=N(h(yj,xk), Qk,j)
多维高斯分布概率密度函数为:
P
(
x
)
=
1
(
2
π
)
2
d
e
t
(
Σ
)
e
x
p
(
−
1
2
(
x
−
u
)
T
Σ
−
1
(
x
−
u
)
)
P(x)=\frac1{\sqrt{(2\pi)^2det(\Sigma)}}exp\left(-\frac12 (x-u)^T\Sigma^{-1}(x-u)\right)
P(x)=(2π)2det(Σ)1exp(−21(x−u)TΣ−1(x−u))
接着根据最小化负对数的方式,对状态的最大似然估计
转换成:
x
∗
=
a
r
g
m
i
n
(
z
k
,
j
−
h
(
y
j
,
x
k
)
)
T
Q
k
,
j
−
1
(
z
k
,
j
−
h
(
y
j
,
x
k
)
)
x^*=arg\ min(z_{k,j}-h(y_j,x_k))^TQ_{k,j}^{-1}(z_{k,j}-h(y_j,x_k))
x∗=arg min(zk,j−h(yj,xk))TQk,j−1(zk,j−h(yj,xk))
该式等价于最小化噪声项(即误差)的平方(
Σ
\Sigma
Σ 范数意义下),这里的误差也叫做残差
,如下:
e
y
,
j
,
k
=
z
k
,
j
−
h
(
y
j
,
x
k
)
e_{y,j,k}=z_{k,j}-h(y_j,x_k)
ey,j,k=zk,j−h(yj,xk)
卡尔曼滤波
x
k
=
A
k
x
k
−
1
+
B
k
u
k
+
w
k
z
k
=
C
k
x
k
+
v
k
\begin {equation} \begin {split} &x_k=A_kx_{k-1} + B_ku_k+w_k \\ &z_k=C_kx_k+v_k \end {split} \nonumber \end {equation}
xk=Akxk−1+Bkuk+wkzk=Ckxk+vk
KF状态转移方程如下:
x
k
=
A
k
x
k
−
1
+
B
k
u
k
+
w
k
x_k=A_kx_{k-1} + B_ku_k+w_k \\
xk=Akxk−1+Bkuk+wk
假设状态变量符合高斯分布时,我们将只需维护状态变量的均值和协方差即可,均值为:
x
~
k
=
A
k
x
^
k
−
1
+
B
k
u
k
\widetilde x_k=A_k \hat x_{k-1} + B_ku_k
x
k=Akx^k−1+Bkuk
使用协方差传递律
,可得状态变量的协方差如下:
P
~
k
=
A
k
P
^
k
−
1
A
k
T
+
B
k
M
k
B
k
T
\widetilde{P}_k=A_k\hat{P}_{k-1}A_k^T+B_kM_kB_k^T
P
k=AkP^k−1AkT+BkMkBkT
根据刚才推导的,后验概率:
P
(
x
k
∣
z
k
)
=
P
(
z
k
∣
x
k
)
P
(
x
k
)
P(x_k|z_k)= P(z_k|x_k)P(x_k)
P(xk∣zk)=P(zk∣xk)P(xk)
为了推导KF公式,这里将结果设为
x
k
∼
N
(
x
^
k
,
P
^
k
)
x_k \sim N(\hat x_k,\ \hat P_k)
xk∼N(x^k, P^k),然后根据后验概率
公式得到:
N
(
x
^
k
,
P
^
k
)
=
N
(
C
k
x
k
,
R
)
⋅
N
(
x
~
k
,
P
~
k
)
N(\hat x_k,\ \hat P_k)=N(C_kx_k,\ R)·N(\widetilde x_k, \ \widetilde P_k)
N(x^k, P^k)=N(Ckxk, R)⋅N(x
k, P
k)
令指数部分相等,即可推出 KF的三个更新方程,这样能看到贝叶斯法则
是如何应用到KF滤波中的了.
<完>
@leatherwang