参考:https://www.guyuehome.com/33293
部分附图来源: https://zhuanlan.zhihu.com/p/39912633 如有侵权,联系删除部分公式使用了国外API进行解析,可能加载不出来,需要科学上网
!!!个人对卡尔曼整个过程的思路理解
总结在前(包含其他网上的理解)
-
卡尔曼滤波实质就是将预测状态量的高斯分布和观测量的高斯分布做融合,生成一个新的高斯分布,其中新的高斯分布的均值和方差是两个独立的高斯分布的相关参量的加权,这个加权就是卡尔曼增益,但是预测状态量和观测量可能维度不同,需要将他们同时转换到一个向量空间中,所以观测量前面有线性变换矩阵
-
记得有教科书写过,估计过去的状态叫平滑,估计当前的状态叫滤波,估计未来的状态叫预测
-
只从最后公式的角度看,确实是加权平均,我一开始也是这样理解的,所以特别想分享一下我现在的理解。在看过英语版原文之后,我发现这篇文章的翻译水准实在不敢恭维,译者似乎并没有本质上理解kalman滤波是在干什么。本质上,kalman滤波做了2件事:
\1. 基于前一时间点的系统状态的概率分布给出当前时间点的系统状态的概率分布预测P1
\2. 基于当前时间点的观测量的概率分布Q给出另一组对当前时间点系统状态的概率分布预测P2 (这里需要注意,如果传感器能直接把系统状态都观测了,那么我们直接用观测量的概率分布Q作为P2就好了,但是有可能传感器观测的物理量量并不是直接的系统状态,而是其他物理量,这时我们需要通过做一个线性变换来获得P2)现在,我们有两个关于当前时间点系统状态的概率分布的预测P1和P2,我们于是可以计算它们的联合概率分布,也就是为什么文章中要把两个概率分布乘到一起去。这个联合概率分布就是我们最终想要的更正过后的当前时间点的系统状态概率分布,有了它我们就可以进入下一个时间点继续迭代我们交替的预测-更正步骤了
预测过程
物体的状态 X (x1,x2,x3,....xn)
状态量 xi 之间 可能存在某种关系(可能难以用数学公式描述,但我们知道 是存在的)
如 速度v 和 位置p
速度v 大的 话,我的位置p 变换也就大
速度v 小的 话,位置 p 变化也就小
但我们可以 描述状态量 i 之间的相关性 用 协方差 矩阵 $\sum_{n \times n}$ ,称为 P_k
状态 X 的转换 可以用 转换矩阵 F_k ,来表示我们的预测步骤
例如
这样的 F_k 是基于 一些自然定律,来完成状态更新,
但 同时 可能 外界的一些 因素 也会 影响 状态的更新 【比如,运动中 突然的加速 指令 减速指令】
将这些 因素(也就是我们对状态定义中不关心的因素,但是影响状态)称为 u_k 外部输入 或 控制输入
其中 这些外部输入 也会以 某种规则 来影响状态,我们将这种定义的规则,以矩阵的形式表示B_k,称为 输入矩阵或控制矩阵
例如
但这样,还是会有一些因素 我们无法考虑进去,比如说,今天的温度,这些我们 称之为 噪声 或 过程噪声,然后我们把 这个 同样形式化 为 矩阵 W_k
这样,我们的 整个状态方程就出来了,
!!! 一般情况下,我们不考虑这种过程噪声,甚至当我们的环境非常简单,后面的输入变量 和 输入矩阵 也可以忽略
由于 这些 种种 因素【不确定性】,我们的 状态 就很难 准确表示出来,这时,我们想到的是 用概率分布 进行建模
状态 是处于 一个概率分布上的,一个状态 有多个状态量,每一个状态量 我们都用 概率分布 进行建模
我们最常用的概率分布 就是 高斯分布(也叫 标准正态分布)
在上面,我们提到了 状态量 之间是存在 相关性的,我们用 协方差矩阵表示
但这 个 协方差矩阵 只能描述 状态量之间的 相关性,如何去 刻画 这些其他外部因素的 造成的 不确定性,具体的做法,我们是在 预测上 添加 "不确定性" Q_k 【将 这些 不确定性影响 视为了 协方差 Q_k 的 噪声】
我们的 协方差矩阵 更新,也就得到了
另一个角度理解:
由于不确定性,状态的 分布范围变大了【也就是状态的位置不同】,这个分布范围 的 状态 均值 一定,我们想要将这些 分布范围 联系起来,【不同位置的状态仍然是高斯分布,我们将不同位置联系起来,也就是将 高斯分布联系起来】这样会产生一个新的高斯分布,协方差不同,均值相同
所以,我们在这里添加的Q_k 就是 针对那些 不确定性 进行建模
这样的两个公式 我们 称之为 预测状态 方程 和 预测协方差 方程
这个过程也称为 预测过程
通过这个预测过程我们得到了,预测的状态估计X_k,预测协方差矩阵 P_k
观测过程(这里理解的不是很好)
预测后 我们需要对 状态进行更新
但 同时 我们可以得到 一些观测 信息,
我们 状态转移的分布 和 观测值的 单位 可能不同【或者说是所处空间不同,我们使用矩阵 H_k 对 状态转移分布进行转换】
$$
\mu = H_k \hat{x}_k \\ \sum = H_k P_k H_k^T
$$
我们期望 观测值 也可以被建模成 这样
同时 观测值 本身 也存在 噪声、不确定性等因素
观测方程
$$
z_k = H_k X_k + u_k
$$
其中,z_k 是观测值,H_k 是观测矩阵,u_k 是观测噪声。
观测分布的均值表示在考虑观测信息后,系统状态的预测值在观测空间中的投影。
这样,我们 将观测值 的 协方差 表示为 R_k,均值表示为 z_k
均值通过 观测方程计算
$$
\hat{z}_k = H \hat{x}_k'
$$
其中
- $\hat{x}_k'$ 是预测步骤得到的 预测状态值
- H 是观测矩阵
协方差计算如下:
$$
S_k = H \hat{P}_k H^T+R
$$
其中
- $\hat{P}_k$ 是预测步骤得到的 协方差矩阵
- R 为观测噪声的协方差矩阵
以上的计算都发生在完成预测过程完成后,但分布信息并不参与 下面的更新过程
在下面的更新中,我们使用的是 当前观测信息 z_k,R, 而不是 观测分布 均值(\hat{z}_k S_k)
这样 我们其实得到了两个高斯分布
- 预测 状态转移 的高斯分布
- 当前观测信息 的高斯分布 ()
我们将这两个 高斯分布进行融合 【也就是高斯分布进行相乘,得到一个新的高斯分布】,得到最终的 最优分布
高斯分布 处理
两个高斯分布相乘
$$
N(x,\mu,\sigma) = \frac 1 {\sigma \sqrt{2 \pi}} e^{ - \frac {(x-\mu)^2}{2 \sigma^2}}
$$
$$
N(x,\mu_0,\sigma_0) N(x,\mu_1,\sigma_1) = N(x,\mu',\sigma')
$$
将其中一部分重写为 k
然后公式就可以重写为
然后矩阵形式
$\sum'$ 表示新高斯分布的协方差 矩阵 ,$\mu$ 是每一个维度(状态量)的矩阵
K 就是
卡尔曼增益 kalman gain
更新过程
然后我们通过 这两个 分布 进行 状态更新
-
预测 状态转移 的高斯分布
-
观测信息 的高斯分布
这样我们就可以得到 更新的状态
然后对应的各状态 量 利用这个最终的分布 进行更新
两个分布带入 上式
卡尔曼增益
同时 上式 我们可以看到 包含一个 H_k,可以做进一步精简
这样 我们就得到了 更新后的状态,更新后的协方差,
如此循环【预测过程、观测过程,高斯分布处理,更新过程】,我们就可以继续更新