不同的教材对卡尔曼滤波的描述方式不尽相同,但实际原理是一样的,这里以《概率机器人》为准。
本篇博客中的符号约定参阅前面的博客《机器人学中的概率论基础》。
下面的“状态转移概率”一词,指state transition probability,其实就是“状态方程”。“测量概率”指measurement probability,就是“观测方程”。不同教材的说法不同。
多维正态分布定义回顾
高斯滤波器,Gaussian filters,是指一个状态估计器族,包括卡尔曼滤波及其变体、信息滤波等算法。
首先回顾一下多维正态分布(Multivariate Normal Distribution)的定义,对于一个具有 $k$ 个维度的多维正态分布,其概率密度函数(PDF)可以写为:
$$\begin{equation}
f(\mathbf{x} | \boldsymbol{\mu}, \boldsymbol{\Sigma}) = \frac{1}{(2\pi)^{k/2}|\boldsymbol{\Sigma}|^{1/2}} \exp\left(-\frac{1}{2}(\mathbf{x} - \boldsymbol{\mu})^T \boldsymbol{\Sigma}^{-1} (\mathbf{x} - \boldsymbol{\mu})\right) \end{equation}$$
其中:
- $\mathbf{x}$ 是一个包含 $k$ 个随机变量的列向量。
- $\boldsymbol{\mu}$ 是一个包含 $k$ 个均值的列向量。
- $\boldsymbol{\Sigma}$ 是一个 $k \times k$ 的协方差矩阵,其中对角线元素是各个变量的方差,而非对角线元素是对应变量之间的协方差。
上述概率密度函数描述了多维正态分布中随机变量的联合分布。与一维正态分布类似,多维正态分布也是关于均值 $\boldsymbol{\mu}$ 对称的,其形状由协方差矩阵 $\boldsymbol{\Sigma}$ 决定。
高斯滤波中参数均值和方差被称为矩参数(moments parameterization) ,均值和方差是概率分布的一阶矩和二阶矩;正态分布的其他矩都是零。
卡尔曼滤波
线性高斯系统
卡尔曼滤波(Kalman Filter, KF),KF用矩参数表示置信度。
如果线性系统满足马尔科夫假设前提下,还满足以下三个条件,则后验分布就是满足正态分布的(高斯的)
- 状态转移概率(state transition probability,状态方程) $p(\boldsymbol{x}_t | \boldsymbol{u}_t, \boldsymbol{x}_{t-1})$ 必须是带有随机高斯噪声参数的线性函数:
$$ \begin{align}
\boldsymbol{x}_t = \boldsymbol{A}_t \boldsymbol{x}_{t-1} + \boldsymbol{B}_t \boldsymbol{u}_t + \boldsymbol{\varepsilon}_t
\end{align} $$
其中, $\boldsymbol{x}_t$ 和 $\boldsymbol{x}_{t-1}$ 是状态向量,$\boldsymbol{u}_t$ 是时刻 $t$ 的控制向量(机器人动作),它们都是列向量。
$\boldsymbol{A}_t$ 是 $n×n$ 的方阵,$n$是状态向量 $\boldsymbol{x}_t$ 的维数。
$\boldsymbol{B}_t$是 $n×m$ 的矩阵,$m$ 是控制向量 $\boldsymbol{u}_t$ 的维数。
随机变量 ${\boldsymbol{\varepsilon}}_t$ 是一个高斯随机向量,表示由于状态变化而引起的不确定性,维数与状态向量维数相同,均值为 $0$ ,方差 $R_t$
代入上面的正态分布定义式(1),有:
$$ \begin{align}
\begin{split}
p(\boldsymbol{x}_t | \boldsymbol{u}_t, \boldsymbol{x}_{t-1}) &= det(2 \pi \boldsymbol{R_t})^{-\frac{1}{2}} \times \\
& \exp\left(-\frac{1}{2}(\boldsymbol{x}_t -\boldsymbol{A}_t \boldsymbol{x}_{t-1}- \boldsymbol{B}_t \boldsymbol{u}_t)^T \boldsymbol{R_t}^{-1} (\boldsymbol{x}_t -\boldsymbol{A}_t \boldsymbol{x}_{t-1}- \boldsymbol{B}_t \boldsymbol{u}_t)\right)
\end{split}
\end{align} $$
- 测量概率(measurement probability,测量方程) $p(\boldsymbol{z}_t | \boldsymbol{x}_t)$ 也与带有高斯噪声的自变量呈线性关系:
$$ \begin{align}
\boldsymbol{z}_t = \boldsymbol{C}_t \boldsymbol{x}_t + \boldsymbol{\delta}_t
\end{align} $$
其中 $\boldsymbol{C}_t$ 是 $k \times n$ 的矩阵,$k$ 是测量矩阵 $\boldsymbol{z}_t $ 的维数,向量 $\boldsymbol{\delta}_t$ 的分布是均值为 $0$ 、方差为 $\boldsymbol{Q}_t$ 的高斯分布,因此,同样地,测量概率(观测方程)有:
$$ \begin{align}
p(\boldsymbol{z}_{t}|\boldsymbol{x}_{t})= det(2 \pi \boldsymbol{Q_t})^{-\frac{1}{2}} \exp\left(-\frac{1}{2}(\boldsymbol{z}_t -\boldsymbol{C}_t \boldsymbol{x}_{t})^T \boldsymbol{Q_t}^{-1} (\boldsymbol{z}_t - \boldsymbol{C}_t \boldsymbol{x}_{t})\right)
\end{align} $$
- 初始置信度 $bel(\boldsymbol{x}_0)$ 必须是正态分布的,这里用$\boldsymbol{\mu}_0$ 表示置信度的均值, $\boldsymbol{\Sigma}_0$ 表示方差:
$$ \begin{align}
bel(\boldsymbol{x}_0)=p(\boldsymbol{x}_0) = det(2\pi \boldsymbol{\Sigma}_0)^{-\frac{1}{2}} \exp\left(-\frac{1}{2}(\boldsymbol{x}_0 -\boldsymbol{\mu}_0)^T \boldsymbol{\Sigma}_0^{-1} (\boldsymbol{x}_0 -\boldsymbol{\mu}_0)\right)
\end{align} $$
这三个假设足以确保后验 $bel(x_t)$ 在任何时刻t下总符合高斯分布。这个重要结果的证明可以在下面卡尔曼滤波器的数学推导中找到。(The proof of this non-trivial result can be found below, in the mathematical derivation of the Kalman filter)
卡尔曼滤波算法
Kalman filter algorithm,与前面的贝叶斯滤波十分相似。
输入是 $t-1$ 时刻的置信度,置信度的均值和方差分布用 $\boldsymbol{\mu}_{t-1}$ 和 $\boldsymbol{\Sigma}_{t-1}$ 表示,为了更新这两个参数,需要有控制向量(机器人动作) $\boldsymbol{u}_{t}$ 和测量向量 $\boldsymbol{z}_{t}$ ,输出为t时刻的置信度,同样用均值和方差表示。
Kalman filter algorithm
第2-3行,计算预测的置信度 $\overline{\boldsymbol{\mu}}$ 和 $\overline{\boldsymbol{\Sigma}}$ ,代入(2)式计算。
第4-6行, 变量矩阵 $\boldsymbol{K}_t$ 是卡尔曼增益(Kalman gain) 矩阵。它确定了测量纳入新状态估计的程度。
KF 计算是相当高效的。
卡尔曼滤波的数学推导
第一部分:预测
首先回顾前面贝叶斯滤波博客中最终推导出的递归更新方程:
$$ \begin{align}
\overline{bel}(\boldsymbol{x}_t) = \int \underbrace{p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1},\boldsymbol{u}_{t})}_{\backsim N(\boldsymbol{x}_t;\boldsymbol{A}_t \boldsymbol{x}_{t-1} + \boldsymbol{B}_t \boldsymbol{u}_t,\boldsymbol{R_t})} \cdot \underbrace{bel(\boldsymbol{x}_{t-1})}_{\backsim N(\boldsymbol{x}_{t-1};\boldsymbol{\mu}_{t-1},\boldsymbol{\Sigma}_{t-1})} \cdot d\boldsymbol{x}_{t-1}
\end{align} $$
代入式(3),得到的式(7)仍然是一个高斯函数,具有均值 $\overline{\boldsymbol{\mu}}_t$ 和方差 $\overline{\boldsymbol{\Sigma}}_t$ ,现在将上式改写成高斯形式:
$$ \begin{align}
\begin{split}
\overline{bel}(\boldsymbol{x}_t) &= \eta \int \exp\left(-\frac{1}{2}(\boldsymbol{x}_t -\boldsymbol{A}_t \boldsymbol{x}_{t-1}- \boldsymbol{B}_t \boldsymbol{u}_t)^T \boldsymbol{R_t}^{-1} (\boldsymbol{x}_t -\boldsymbol{A}_t \boldsymbol{x}_{t-1}- \boldsymbol{B}_t \boldsymbol{u}_t)\right) \\
& \exp\left(-\frac{1}{2}(\boldsymbol{x}_{t-1} -\boldsymbol{\mu}_{t-1})^T \boldsymbol{\Sigma}_{t-1}^{-1} (\boldsymbol{x}_{t-1} -\boldsymbol{\mu}_{t-1})\right) \cdot d\boldsymbol{x}_{t-1} \\
&= \eta \int \exp\left(-L_t \right) d\boldsymbol{x}_{t-1}
\end{split}
\end{align} $$
其中:
$$ \begin{align}
\begin{split}
L_t = & \frac{1}{2}(\boldsymbol{x}_t -\boldsymbol{A}_t \boldsymbol{x}_{t-1}- \boldsymbol{B}_t \boldsymbol{u}_t)^T \boldsymbol{R_t}^{-1} (\boldsymbol{x}_t -\boldsymbol{A}_t \boldsymbol{x}_{t-1}- \boldsymbol{B}_t \boldsymbol{u}_t) + \\
& \frac{1}{2}(\boldsymbol{x}_{t-1} -\boldsymbol{\mu}_{t-1})^T \boldsymbol{\Sigma}_{t-1}^{-1} (\boldsymbol{x}_{t-1} -\boldsymbol{\mu}_{t-1})
\end{split}
\end{align} $$
$L_t$ 是 $\boldsymbol{x}_{t-1}$ 的二次型,也是 $\boldsymbol{x}_{t}$ 的二次型。
现在,我们要求解式(8)中的积分。
对(9)式重新排序,目的是先提取出常数:
$$ \begin{align}
L_t =L_t(\boldsymbol{x}_{t-1},\boldsymbol{x}_{t}) + L_t(\boldsymbol{x}_{t})
\end{align}
$$
$$ \begin{align}
\begin{split}
\overline{bel}(\boldsymbol{x}_t) &= \eta \int \exp\left(-L_t \right) d\boldsymbol{x}_{t-1} \\
&= \eta \int \exp\left(-L_t(\boldsymbol{x}_{t-1},\boldsymbol{x}_{t}) - L_t(\boldsymbol{x}_{t}) \right) d\boldsymbol{x}_{t-1} \\
&=\eta \exp\left(-L_t(\boldsymbol{x}_{t}) \right) \int \exp\{-L_t(\boldsymbol{x}_{t-1},\boldsymbol{x}_{t}) \}d\boldsymbol{x}_{t-1}
\end{split}
\end{align} $$
现在,我们要找到一个不依赖于 $\boldsymbol{x}_{t}$ 的 $L_t(\boldsymbol{x}_{t-1},\boldsymbol{x}_{t})$ ,使积分式变为一个常数,再把这个常数包含到前面的常数 $\eta$ 里面:
$$ \begin{align}
\overline{bel}(\boldsymbol{x}_t) = \eta \exp \{-L_t(\boldsymbol{x}_t)\}
\end{align} $$
得到了一个更易于计算的高斯函数。
现在来尝试这个分解。
先计算 $L_t$ 的一二阶导数:
$$ \begin{gather}
\frac{\partial L_t}{\partial \boldsymbol{x}_{t-1}} = -\boldsymbol{A}_t^T \boldsymbol{R_t}^{-1}(\boldsymbol{x}_t -\boldsymbol{A}_t \boldsymbol{x}_{t-1}- \boldsymbol{B}_t \boldsymbol{u}_t) + \boldsymbol{\Sigma}_{t-1}^{-1} (\boldsymbol{x}_{t-1} -\boldsymbol{\mu}_{t-1}) \\
\frac{\partial^2 L_t}{\partial \boldsymbol{x}_{t-1}^2} = -\boldsymbol{A}_t^T \boldsymbol{R_t}^{-1}\boldsymbol{A}_t + \boldsymbol{\Sigma}_{t-1}^{-1} =:\varPsi_t^{-1}
\end{gather} $$
(为写作方便计,下面不再把 $\boldsymbol{x}$ 等向量写作粗体,笔者相信这并不会引起歧义)
$\varPsi_t$ 定义了 $L_t(x_{t-1},x_t)$ 的曲率,令 $L_t$ 的一阶导数为0,有:
$$
\begin{gather}
A_t^T R_t^{-1}(x_t -A_t x_{t-1} - B_t u_t) = \Sigma_{t-1}^{-1}(x_{t-1} - \mu_{t-1}) \\
\Updownarrow \text{求解} x_{t-1} \notag \\
A_t^T R_t^{-1}(x_t - B_t u_t) - A_t^T R_t^{-1} A_t x_{t-1} = \Sigma_{t-1}^{-1}x_{t-1} - \Sigma_{t-1}^{-1} \mu_{t-1} \notag \\
\Updownarrow \notag \\
A_t^T R_t^{-1} A_t x_{t-1} + \Sigma_{t-1}^{-1}x_{t-1} = A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1} \notag \\
\Updownarrow \notag \\
\colorbox{lightblue}{$(A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})$}x_{t-1} =A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1} \notag \\
\Updownarrow \notag \\
\colorbox{lightblue}{$\varPsi_t^{-1}$} x_{t-1} =A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1} \notag \\
\Updownarrow \notag \\
x_{t-1} =\varPsi_t [A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1}]
\end{gather}
$$
现在定义函数 $L_t(x_{t-1},x_t)$ 如下:
$$ \begin{align}
\begin{split}
L_t(x_{t-1},x_t) = & \frac{1}{2}(x_{t-1} - \varPsi_t [A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1}])^T \varPsi_t^{-1} \\
&(x_{t-1} - \varPsi_t [A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1}])
\end{split}
\end{align} $$
函数 $L_t(x_{t-1},x_t)$ 是满足正态分布的负指数的常见二次型形式。下面看一个变量为 $x_{t-1}$ 的概率密度函数:
$$ \begin{gather}
det(2 \pi \varPsi)^{-\frac{1}{2}} \exp \{ -L_t(x_{t-1},x_t)\}
\end{gather} $$
仔细看,这与本文开头的公式(1)具有相同的形式,它满足正态分布,它是一个概率密度函数。所以有:
$$ \begin{gather}
\int det(2 \pi \varPsi)^{-\frac{1}{2}} \exp \{ -L_t(x_{t-1},x_t)\} \cdot dx_{t-1} =1 \\
\Darr \notag \\
\int \exp \{ -L_t(x_{t-1},x_t)\} \cdot dx_{t-1} = det(2 \pi \varPsi)^{\frac{1}{2}}
\end{gather} $$
注意到,这个积分值与目标变量 $x_t$ 无关,在计算 $x_t$ 的分布时,它是一个常数,按照上面论述的,我们将它归一到因子 $\eta$ 中去,代入上面的式(11)有:
$$ \begin{align}
\begin{split}
\overline{bel}(x_t) &=\eta \exp\{-L_t(x_{t}) \} \int \exp\{-L_t(x_{t-1},x_{t}) \}dx_{t-1} \\
&= \eta \exp \{-L_t(x_t)\}
\end{split}
\end{align} $$
这就是我们前面要找的式(12),其中上下两行的 $\eta$ 并不相同。
现在我们由式(9)、(10)、(17)来计算函数 $L_t(x_t)$ :
$$ \begin{align}
\begin{split}
L_t(x_t) &= L_t - L_t(x_{t-1},x_t) \\
&=\frac{1}{2}({x}_t -{A}_t {x}_{t-1}- {B}_t {u}_t)^T {R_t}^{-1} ({x}_t -{A}_t {x}_{t-1}- {B}_t {u}_t) \\
&+ \frac{1}{2}({x}_{t-1} -{\mu}_{t-1})^T {\Sigma}_{t-1}^{-1} ({x}_{t-1} -{\mu}_{t-1}) \\
&- \frac{1}{2}(x_{t-1} - \varPsi_t [A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1}])^T \colorbox{yellow}{$\varPsi_t^{-1}$} \\
&(x_{t-1} - \colorbox{yellow}{$\varPsi_t$} \colorbox{Honeydew}{$[A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1}]$})
\end{split}
\end{align}
$$
下面,代入 $\varPsi = (A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})^{-1}$ 有:
$$ \begin{align}
\begin{split}
L_t(x_t) &= \underline{\underline{\frac{1}{2} x_{t-1}^T A_t^T R_t^{-1} A_t x_{t-1}}} - \underline{x_{t-1}^T A_t^T R_t^{-1}(x_t - B_t u_t)} + \\
& \frac{1}{2} (x_t - B_t u_t)^T R_t^{-1} (x_t - B_t u_t) + \underline{\underline{\frac{1}{2} x_{t-1}^T {\Sigma}_{t-1}^{-1}{x}_{t-1} }} - \underline{x_{t-1}^T {\Sigma}_{t-1}^{-1} \mu_{t-1} } + \\
& \frac{1}{2} \mu_{t-1}^T {\Sigma}_{t-1}^{-1} \mu_{t-1} - \underline{\underline{\frac{1}{2} x_{t-1}^T(A_t^T R_t^{-1} A_t + {\Sigma}_{t-1}^{-1}) x_{t-1} }} + \\
& \underline{x_{t-1}^T \colorbox{Honeydew}{$[A_t^T R_t^{-1}(x_t - B_t u_t) +{\Sigma}_{t-1}^{-1} \mu_{t-1}]$} } - \frac{1}{2}[A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1}]^T \\
& (A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})^{-1} \colorbox{Honeydew}{$[A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1}]$}
\end{split}
\end{align} $$
所有 $x_{t-1}$ 项都消去了,这正是我们要找的 $L_t(x_t)$ :
$$ \begin{align}
\begin{split}
L_t(x_t) &= \frac{1}{2} (x_t - B_t u_t)^T R_t^{-1} (x_t - B_t u_t) + \frac{1}{2} \mu_{t-1}^T {\Sigma}_{t-1}^{-1} \mu_{t-1} \\ &- \frac{1}{2}[A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1}] (A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})^{-1} \\
& [A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1}]
\end{split}
\end{align} $$
上式含有 $x_T$ 的二次项,这印证了 $\overline{bel}(x_t)$ 确实服从正态分布,该分布的均值和方差就是 $L_t(x_t)$ 的极小值和曲率,下面计算它的一阶导数和二阶导数:
$$ \begin{align}
\begin{split}
\frac{\partial L_t(x_t)}{\partial {x}_{t}} &= R_t^{-1}(x_t-u_t )- R_t^{-1}A_t(A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})^{-1} \\
&[A_t^T R_t^{-1}(x_t - B_t u_t) + \Sigma_{t-1}^{-1} \mu_{t-1}] \\
& =[R_t^{-1} - R_t^{-1}A_t(A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})^{-1}A_t^T R_t^{-1}](x_t-B_t u_t ) - \\
& R_t^{-1}A_t(A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})\Sigma_{t-1}^{-1} \mu_{t-1}
\end{split}
\end{align} $$
下面,根据Sherman-Morrison公式(谢尔曼/莫里森公式,求逆引理(inversion lemma)),有:
$$ \begin{gather}
R_t^{-1} - R_t^{-1}A_t(A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})^{-1}A_t^T R_t^{-1} = (R_t + A_t\Sigma_{t-1} A_t^T)^{-1}
\end{gather} $$
看一下谢尔曼(Sherman)-莫里森(Morrison)公式的简单证明:
对于任意可逆二次矩阵R和Q以及任意具有适当维数的矩阵P,当下面的逆矩阵都存在时有:
$$\begin{gather}
(R + PQP^T) = R^{-1} - R^{-1}P(Q^{-1} + P^T R^{-1} P)^{-1}P^TR^{-1}
\end{gather} $$
证明如下:
定义 $\varPsi=(Q^{-1} + P^T R^{-1} P)^{-1}$,有:
$$ \begin{gather*}
\begin{split}
&(R^{-1} - R^{-1}P\varPsi P^TR^{-1}) (R + PQP^T) \\
&=\underbrace{R^{-1}R} + R^{-1} PQP^T - R^{-1}P\varPsi P^T \underbrace{R^{-1}R} -R^{-1}P\varPsi P^TR^{-1} P Q P^T \\
&=I + \textcolor{red}{R^{-1} P}QP^T - \textcolor{red}{R^{-1} P}\varPsi P^T -\textcolor{red}{R^{-1} P}\varPsi P^TR^{-1} P Q P^T \\
&= I + \textcolor{red}{R^{-1} P}[QP^T - \varPsi P^T - \varPsi P^TR^{-1} P Q P^T] \\
&= I + R^{-1} P [QP^T - \varPsi \underbrace{\colorbox{yellow}{$Q^{-1}$}\textcolor{green}Q} \enspace \textcolor{green}{P^T} - \varPsi \colorbox{yellow}{$P^TR^{-1} P $}\textcolor{green}{Q P^T}] \\
&=I+ R^{-1} P [QP^T - \underbrace{\varPsi \colorbox{yellow}{$\varPsi^{-1}$}}Q P^T] \\
&=I + 0 \\ &=I
\end{split}
\end{gather*} $$
证毕。
因此,回到式(25),有:
$$ \begin{gather}
\frac{\partial L_t(x_t)}{\partial {x}_{t}} = (R_t + A_t\Sigma_{t-1} A_t^T)^{-1}(x_t-B_t u_t ) -R_t^{-1}A_t(A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})\Sigma_{t-1}^{-1} \mu_{t-1}
\end{gather} $$
令一阶导数为0,可以得到 $L_t(x_t)$ 的极小值:
$$ \begin{gather}
(R_t + A_t\Sigma_{t-1} A_t^T)^{-1}(x_t-B_t u_t ) = R_t^{-1}A_t(A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})\Sigma_{t-1}^{-1} \mu_{t-1}
\\ \Darr \notag \\
\begin{split}
x_t&= B_t u_t + \underbrace{(R_t + A_t\Sigma_{t-1} A_t^T) R_t^{-1}A_t}_{A_t+A_t\Sigma_{t-1} A_t^TR_t^{-1}A_t} \underbrace{(A_t^T R_t^{-1} A_t + \Sigma_{t-1}^{-1})\Sigma_{t-1}^{-1}}_{(\Sigma_{t-1} A_t^T R_t^{-1} A_t + I)^{-1}} \mu_{t-1} \\
&=B_t u_t + A_t \underbrace{(I + \Sigma_{t-1} A_t^TR_t^{-1}A_t)(\Sigma_{t-1} A_t^T R_t^{-1} A_t + I)^{-1}}\mu_{t-1} \\
&=B_t u_t + A_t\mu_{t-1}
\end{split}
\end{gather} $$
至此,我们求得了式(7)中的 $\overline{bel}(x_t)$ 的均值为 $B_t u_t + A_t\mu_{t-1}$,也就是上文卡尔曼滤波算法图中第二行的内容。
下面计算 $L_t(x_t)$ 的二阶导数:
$$ \begin{gather}
\frac{\partial^2 L_t(x_t)}{\partial {x}_{t}^2} = (R_t + A_t\Sigma_{t-1} A_t^T)^{-1}
\end{gather} $$
这是二次函数 $L_t(x_t)$ 的曲率,其逆矩阵就是 $\overline{bel}(x_t)$ 的协方差。
第二部分:测量更新
下面继续推导。
回忆一下之前贝叶斯滤波中的 $bel(x_t)$ ,前面的博客,贝叶斯滤波推导的公式(36):
$$ \begin{gather}
bel(x_t) = \eta \underbrace{p(z_t|x_{t})}_{\sim \Nu(z_t;C_t x_t,Q_t)} \cdot \underbrace{\overline{bel}(x_t)}_{\sim N(x_t; \overline{\mu_t}, \overline{\Sigma_t})}
\end{gather} $$
由上面的式(5),有:
$$ \begin{gather}
bel(x_t) = \eta \exp \{-J_t \}
\end{gather} $$
其中:
$$ \begin{gather}
J_t = \frac{1}{2}(z_t -C_t x_t )^T Q_t^{-1} (z_t -C_t x_t ) + \frac{1}{2}(x_t -\overline{\mu_t} )^T \overline{\Sigma_t}^{-1} (x_t -\overline{\mu_t})
\end{gather} $$
这个函数是 $x_t$ 的二次型,因此 $bel(x_t)$ 是一个高斯分布,要求解它的参数,那么仍然是计算一、二阶导数:
$$ \begin{gather}
\frac{\partial J}{\partial x_t} = -C_t^T Q_t^{-1} (z_t - C_t x_t) + \overline{\Sigma_t}^{-1} (x_t -\overline{\mu_t})
\\
\frac{\partial^2 J}{\partial x_{t}^2} = C_t^T Q_t^{-1} C_t + \overline{\Sigma_t}^{-1}
\end{gather} $$
恰有 $bel(x_t)$ 协方差的逆:
$$ \begin{gather}
\Sigma_t = \colorbox{Aqua}{$(C_t^T Q_t^{-1} C_t + \overline{\Sigma_t}^{-1})$}^{\textcolor{red} {-1}}
\end{gather} $$
$bel(x_t)$ 的均值是这个二次型函数的极小值,令 $J_t$ 的一阶导,式(35),等于0,有:
$$ \begin{gather}
C_t^T Q_t^{-1} (z_t - C_t x_t) = \overline{\Sigma_t}^{-1} (x_t -\overline{\mu_t}) \notag \\
\Darr \mu_t \text{替换}x_t \notag \\
C_t^T Q_t^{-1} (z_t - C_t \mu_t) = \overline{\Sigma_t}^{-1} (\mu_t -\overline{\mu_t}) \\
\Updownarrow \notag \\
C_t^T Q_t^{-1}(z_t - C_t \mu_t \textcolor{red}{ +C_t \overline{\mu_t} - C_t \overline{\mu_t}} ) = \overline{\Sigma_t}^{-1} (\mu_t -\overline{\mu_t}) \notag \\
\Updownarrow \notag \\
C_t^T Q_t^{-1}(z_t - \textcolor{Brown}{C_t \overline{\mu_t}}) - C_t^T Q_t^{-1} \textcolor{Brown}{C_t \colorbox{GreenYellow}{$(\mu_t - \overline{\mu_t} )$}} = \overline{\Sigma_t}^{-1} \colorbox{GreenYellow}{$(\mu_t - \overline{\mu_t} )$} \notag \\ \Updownarrow \notag \\
C_t^T Q_t^{-1}(z_t - C_t \overline{\mu_t})= \colorbox{Aqua}{$(C_t^T Q_t^{-1} C_t + \overline{\Sigma_t}^{-1})$}\colorbox{GreenYellow}{$(\mu_t - \overline{\mu_t})$} \\
\Darr \notag \\
C_t^T Q_t^{-1}(z_t - C_t \overline{\mu_t}) =\colorbox{Aqua}{$\Sigma_t^{\textcolor{red} {-1}}$} (\mu_t - \overline{\mu_t}) \notag \\
\Updownarrow \notag \\
\Sigma_t C_t^T Q_t^{-1}(z_t - C_t \overline{\mu_t})= \mu_t - \overline{\mu_t}
\end{gather}
$$
现在,定义 卡尔曼增益(Kalman gain) 为:
$$ \begin{gather}
K_t = \Sigma_t C_t^T Q_t^{-1}
\end{gather} $$
那么有:
$$ \begin{gather}
\mu_t = \overline{\mu_t} + K_t (z_t - C_t \overline{\mu_t})
\end{gather} $$
注意到,现在定义的 $K_t$ 是关于 $\Sigma_t$ 的函数,这似乎与卡尔曼滤波算法中利用 $K_t$ 来计算 $\Sigma_t$ 有冲突,下面我们证明卡尔曼增益与 $\Sigma_t$ 无关:
$$ \begin{align}
\begin{split}
K_t &= \Sigma_t C_t^T Q_t^{-1} \\
&= \Sigma_t \textcolor{red}{C_t^T Q_t^{-1}} \underbrace{(C_t \overline{\Sigma_t} C_t^T + Q_t)(C_t \overline{\Sigma_t} C_t^T + Q_t)^{-1}} \\
&= \Sigma_t (\textcolor{red}{C_t^T Q_t^{-1}} C_t \overline{\Sigma_t} C_t^T + \textcolor{red}{C_t^T Q_t^{-1}} Q_t)(C_t \overline{\Sigma_t} C_t^T + Q_t)^{-1} \\
& = \Sigma_t (C_t^T Q_t^{-1} C_t \textcolor{Purple}{\overline{\Sigma_t} C_t^T }+ \underbrace{\overline{\Sigma_t}^{-1} \textcolor{Purple}{\overline{\Sigma_t}}} \textcolor{Purple}{C_t^T} )(C_t \overline{\Sigma_t} C_t^T + Q_t)^{-1} \\
&= \Sigma_t \colorbox{Aqua}{$\underbrace{(C_t^T Q_t^{-1} C_t + \overline{\Sigma_t}^{-1})}_{\Sigma_t^{-1}}$} \textcolor{Purple}{\overline{\Sigma_t} C_t^T } (C_t \overline{\Sigma_t} C_t^T + Q_t)^{-1} \\
& = \Sigma_t \Sigma_t^{-1} \textcolor{Purple}{\overline{\Sigma_t} C_t^T } (C_t \overline{\Sigma_t} C_t^T + Q_t)^{-1} \\
&=\textcolor{Purple}{\overline{\Sigma_t} C_t^T } (C_t \overline{\Sigma_t} C_t^T + Q_t)^{-1}
\end{split}
\end{align} $$
OK。
基于上面的式(37)定义的卡尔曼增益,能避免计算状态方差阵的逆。
下面,再一次引用上面的式(27)Sherman-Morrison求逆公式,展开式(37),恰好代入卡尔曼增益:
$$ \begin{gather}
\begin{split}
\Sigma_t = \colorbox{Aqua}{$(C_t^T Q_t^{-1} C_t + \overline{\Sigma_t}^{-1})$}^{\textcolor{red} {-1}} &= (\overline{\Sigma_t}^{-1} + C_t^T Q_t^{-1} C_t )^{-1} \\
&=\color{blue} \overline{\Sigma_t} - \overline{\Sigma_t} C_t^T (Q_t + C_t \overline{\Sigma_t} C_t^T)^{-1}C_t\overline{\Sigma_t} \\
&=\big( I- \overline{\Sigma_t} C_t^T (Q_t + C_t \overline{\Sigma_t} C_t^T)^{-1} \big) \overline{\Sigma_t} \\
& = (I- K_t)\overline{\Sigma_t}
\end{split}
\end{gather} $$
与前文给出的算法一致,证毕。
扩展卡尔曼滤波
高斯随机变量的任何线性变换都将产生另一个高斯随机变量,例如有某个随机变量 $X$ 的分布满足 $X \sim N(x; \mu , \sigma ^2)$ ,那么它经过线性变换 $y=ax+b$后,产生的随机变量 $Y$ ,服从均值为 $a \mu +b$ ,方差为 $a^2 \sigma ^2$ 的高斯分布。上文的推导利用了这个特性,因此卡尔曼滤波要求系统是线性系统。
当然,我们知道这个纷繁复杂的世界中,线性是理想的,多数情况下系统并不是线性的,例如恒定线速度和角速度的移动机器人的运动轨迹是圆,它无法用线性状态方程来描述。
下面,我们假设状态转移概率(state transition probability,状态方程)和测量概率(measurement probability,观测方程)分别由非线性函数g和h控制,根据上文中的式(2)、(4),有:
$$ \begin{gather}
x_t = g(u_t,x_{t-1}) + \varepsilon_t \\
z_t = h(x_t) + \delta_t
\end{gather} $$
函数 $g$ 替换了(2)式中的矩阵 $A_t$ 和 $B_t$ , $h$ 替换了式(4)中的 $C_t$ ,对于任意函数g和h, 置信度不再满足一个高斯分布。
准确地实现置信度更新对于非线性函数g 和h 通常是不可能的,贝叶斯滤波不存在闭式解。
下面,我们引入扩展卡尔曼滤波(Extended Kalman Filter,EKF)来解决这个问题,基于 EKF 近似的主要思想就是线性化(linearization),对非线性函数进行线性化有很多种方法,这里的扩展卡尔曼滤波使用的是一阶泰勒展开(first order Taylor expansion.)先复习一下泰勒展开:
$$ \begin{gather}
g'(u_t,x_{t-1}): = \frac{\partial g(u_t,x_{t-1})}{\partial x_{t-1}} \\
g(u_t,x_{t-1}) \approx g(u_t,\mu_{t-1}) +\textcolor{blue}{g'(u_t,\mu_{t-1})} (x_{t-1} - \mu_{t-1}) \notag \\
=g(u_t,\mu_{t-1}) + \textcolor{blue}{G_t}(x_{t-1} - \mu_{t-1})
\end{gather} $$
同样地,我们写出状态转移概率(状态方程),即上面的(3)式:
$$ \begin{align}
\begin{split}
p(x_t | u_t, x_{t-1}) & \color{orange}= det(2 \pi R_t)^{-\frac{1}{2}} \times \\
& \color{orange} \exp\left(-\frac{1}{2}(x_t -{A}_t x_{t-1}- B_t u_t)^T {R_t}^{-1} (x_t -{A}_t x_{t-1}- {B}_t {u}_t)\right) \\
& \approx det(2 \pi R_t)^{-\frac{1}{2}} \exp\{-\frac{1}{2}[x_t -g(u_t,\mu_{t-1})-G_t(x_{t-1} - \mu_{t-1})]^T \\
& {R_t}^{-1} [x_t -g(u_t,\mu_{t-1})-G_t(x_{t-1} - \mu_{t-1})]\}
\end{split}
\end{align} $$
其中 $G_t$ 是 $n \times n$ 矩阵,n是维数,常被称为雅可比矩阵(Jacobian),雅可比矩阵的值取决于 $u_t$ 和 $\mu_{t-1}$ ,因此不同时刻是不同的。
机器人认为t时刻最可能的状态是 $\overline \mu_t$ ,在此处将观测方程进行泰勒展开:
$$ \begin{align} \begin{split}
h(x_t) & \approx h(\overline \mu_t) + \textcolor{blue}{h'(\overline \mu_t)}(x_t - \overline \mu_t) =h(\overline \mu_t) + \textcolor{blue}{\frac{\partial h(x_t)}{\partial x_t} }(x_t - \overline \mu_t)\\
&= h(\overline \mu_t) + \textcolor{blue}{H_t}(x_t - \overline \mu_t)
\end{split} \end{align} $$
同样的,代入上面的式(5)有:
$$ \begin{align} \begin{split}
p(z_{t}|x_{t}) &\color{orange}= det(2 \pi Q_t)^{-\frac{1}{2}} \exp\left(-\frac{1}{2}(z_t -C_t x_{t})^T {Q_t}^{-1} (z_t - C_t x_{t})\right) \\
& = det(2 \pi Q_t)^{-\frac{1}{2}} \\
&\exp\left(-\frac{1}{2}(z_t - h(\overline \mu_t) - H_t(x_t - \overline \mu_t))^T {Q_t}^{-1} (z_t - h(\overline \mu_t) - H_t(x_t - \overline \mu_t))\right)
\end{split} \end{align} $$
扩展卡尔曼滤波算法流程图,可以看到它与上面的卡尔曼滤波是很相似的。
扩展卡尔曼滤波算法
扩展卡尔曼滤波的数学推导
与上面的类似。
$$ \begin{align}
\overline{bel}(x_t) = \int \underbrace{p(x_t|x_{t-1},u_{t})}_{\backsim N(x_t;g(u_t,\mu_{t-1}) + G_t(x_{t-1} - \mu_{t-1}),R_t)} \cdot \underbrace{bel(x_{t-1})}_{\backsim N(x_{t-1};\mu_{t-1},\Sigma_{t-1})} \cdot dx_{t-1}
\end{align} $$
由前面的式(9)有:
$$ \begin{align} \begin{split}
L_t = & \frac{1}{2}[x_t -g(u_t,\mu_{t-1})-G_t(x_{t-1} - \mu_{t-1})]^T R_t^{-1} [x_t -g(u_t,\mu_{t-1})-G_t(x_{t-1} - \mu_{t-1})] \\
& + \frac{1}{2}(x_{t-1} -\mu_{t-1})^T \Sigma_{t-1}^{-1} (x_{t-1} -\mu_{t-1})
\end{split} \end{align} $$
参照上面的式(17),分解 $L_t$ :
$$ \begin{align}
L_t(x_{t-1},x_t) & = \frac{1}{2}(x_{t-1} - \varPhi_t [G_t^T R_t^{-1}(x_t - g(u_t,\mu_{t-1}) + G_t \mu_{t-1}) + \Sigma_{t-1}^{-1} \mu_{t-1}])^T \varPhi_t^{-1} \notag \\
& (x_{t-1} - \varPhi_t [G_t^T R_t^{-1}(x_t - g(u_t,\mu_{t-1}) + G_t \mu_{t-1}) + \Sigma_{t-1}^{-1} \mu_{t-1}])
\end{align} $$
其中:
$$ \begin{gather}
\varPhi_t = (G_t^T R_t^{-1} G_t + \Sigma_{t-1}^{-1})^{-1}
\end{gather} $$
求得:
$$ \begin{align}
L_t(x_t) &= \frac{1}{2}(x_t - g(u_t,\mu_{t-1}) + G_t \mu_{t-1} )^T R_t^{-1} (x_t - g(u_t,\mu_{t-1}) + G_t \mu_{t-1} ) + \notag \\
& \frac{1}{2} (x_{t-1} -\mu_{t-1})^T \Sigma_{t-1}^{-1} (x_{t-1} -\mu_{t-1}) - \notag \\
& \frac{1}{2} [G_t^T R_t^{-1}(x_t - g(u_t,\mu_{t-1}) + G_t \mu_{t-1}) + \Sigma_{t-1}^{-1} \mu_{t-1}]^T \varPhi_t \notag \\
& [G_t^T R_t^{-1}(x_t - g(u_t,\mu_{t-1}) + G_t \mu_{t-1}) + \Sigma_{t-1}^{-1} \mu_{t-1}]
\end{align} $$
求导后可以注意到 $L_t(x_t)$ 的一阶导数为0,与前面的推导类似,可以得到 $\mu _t =g(u_t,\mu_{t-1})$和二阶导数 $(R_t+G_t \Sigma_{t-1} G_t^T)^{-1}$ 。下面推导观测方程,同样的,有:
$$ \begin{align}
bel(x_t) = \eta \underbrace{p(z_t|x_{t})}_{\sim \Nu(z_t; h(\overline \mu_t) + H_t(x_t - \overline \mu_t),Q_t)} \cdot \underbrace{\overline{bel}(x_t)}_{\sim N(x_t; \overline{\mu_t}, \overline{\Sigma_t})}
\end{align} $$
继续有:
$$ \begin{align} \begin{split}
J_t &= \frac{1}{2}(z_t - h(\overline \mu_t) - H_t(x_t - \overline \mu_t))^T Q_t^{-1} (z_t - h(\overline \mu_t) - H_t(x_t - \overline \mu_t)) \\
& +\frac{1}{2}(x_t -\overline{\mu_t} )^T \overline{\Sigma_t}^{-1} (x_t -\overline{\mu_t})
\end{split} \end{align} $$
得到结果均值和方差为:
$$ \begin{align}
\mu _t &= \overline \mu_t + K_t(z_t - h(\overline \mu_t) ) \\
\Sigma_t &= (I-K_t H_t)\overline{\Sigma_t} \\
\text{其中,卡尔曼增益为:} \notag \\
K_t &= \overline{\Sigma_t} H_t^T(H_t \overline{\Sigma_t}H_t^T + Q_t )^{-1}
\end{align} $$
推导过程参照前文即可。