Kalman Filter是处理连续变化的动态不肯定系统的理想方法,而且因为内存占用小(不须要记录历史状态),运行速度快,被普遍应用在机器人实时多传感器融合系统中。算法
首先看一个简单的例子: 假设有一个能够在树林中自由漫步的机器人,这个机器人配备了一个精度为10m的GPS传感器和自身状态的测量设备(轮速记等)。segmentfault
对于机器人而言,除了可以经过GPS获取位置信息外,它还准确知道本身下达的全部指令,好比向前前进10m,向右前进5m等等。可是因为受到外部环境的影响(风向、地面打滑,测量偏差等),机器人自身得到的测量数据与实际行驶的距离并不彻底吻合。函数
树林中沟壑、悬崖遍及,不许确的定位信息使得机器人时时都有坠落悬崖的危险。网站
GPS的测量信息和机器人自身的测量信息都不许确,如何利用这些不肯定的信息获取更加肯定的、更加准确的信息。Kalman Filter能够用来解决这个问题。spa
机器人在k时刻的State的矩阵形式以下:3d
$$ \begin{aligned} \mathbf{\hat{x}}_k &= \begin{bmatrix} \text{position}\\ \text{velocity} \\ \end{bmatrix}\\ \mathbf{P}_k &= \begin{bmatrix} \Sigma_{pp} & \Sigma_{pv} \\ \Sigma_{vp} & \Sigma_{vv} \\ \end{bmatrix} \end{aligned} $$blog
假设已知机器人在k-1时刻的State,要预测k时刻的State。内存
预测的过程能够表述为矩阵变换的过程,变化矩阵为$\mathbf{F_k}$。ci
根据基础的动力学知识:rem
$$ \begin{aligned} {p_k} &= {p_{k-1}} + \Delta t {v_{k-1}} \\ {v_k} &= {v_{k-1}} \end{aligned} $$
用矩阵表示:
$$ \begin{aligned} {\mathbf{\hat{x}}_k} &= \begin{bmatrix} 1 & \Delta t \\ 0 & 1 \end{bmatrix} {\mathbf{\hat{x}}_{k-1}} \\ &= \mathbf{F}_k {\mathbf{\hat{x}}_{k-1}} \end{aligned} $$
随机变量的乘以矩阵以后,对协方差矩阵的影响以下:
$$ \begin{aligned} Cov(x) &= \Sigma \\ Cov({\mathbf{A}}x) &= {\mathbf{A}} \Sigma {\mathbf{A}}^T \end{aligned} $$
所以:
$$ \begin{aligned} {\mathbf{\hat{x}}_k} &= \mathbf{F}_k {\mathbf{\hat{x}}_{k-1}} \\ {\mathbf{P}_k} &= \mathbf{F_k} {\mathbf{P}_{k-1}} \mathbf{F}_k^T \end{aligned} $$
在机器人运动过程当中,外力会对系统的State产生影响。好比系统会发出指令进行加速、减速等。这些外力是明确已知的,如何对系统产生影响也是明确的。这些信息通通被放进$\vec{u}_k$中。
假设咱们已知系统发出的加速的指令,产生的加速度为${a}$,基于基础的动力学知识:
$$ \begin{aligned} {p_k} &= {p_{k-1}} + {\Delta t} {v_{k-1}} + \frac{1}{2} {a} {\Delta t}^2 \\ {v_k} &= {v_{k-1}} + {a} {\Delta t} \end{aligned} $$
写成矩阵形式:
$$ \begin{aligned} {\mathbf{\hat{x}}_k} &= \mathbf{F}_k {\mathbf{\hat{x}}_{k-1}} + \begin{bmatrix} \frac{\Delta t^2}{2} \\ \Delta t \end{bmatrix} {a} \\ &= \mathbf{F}_k {\mathbf{\hat{x}}_{k-1}} + \mathbf{B}_k {\vec{\mathbf{u}}_k} \end{aligned} $$
$\mathbf{B}_k$ 被称为Control Matrix,${\vec{\mathbf{u}}_k}$被称为Control Vector。
在运动过程当中,除了机器人自身的属性(位置、速度)和已知的外力做用以外,还有一些未知的外部环境因素影响带来新的uncertainty。
这些Untracked Influence能够用协方差为${\mathbf{Q}_k}$的Noise来表达。
机器人State中的全部随机变量的Noise均服从均值相同、方差不一样的正态分布。
增长External uncertainty以后的Prediction方程以下:
$$ \begin{aligned} {\mathbf{\hat{x}}_k} &= \mathbf{F}_k {\mathbf{\hat{x}}_{k-1}} + \mathbf{B}_k {\vec{\mathbf{u}_k}} \\ {\mathbf{P}_k} &= \mathbf{F_k}{\mathbf{P}_{k-1}} \mathbf{F}_k^T + {\mathbf{Q}_k} \end{aligned} $$
能够看出:
New Best Estimate = Previous Best Estimate + Known External Influences
New Uncertainty = Old Uncertainty + Additional Uncertainty From The Environment
传感器能够产生一系列的测量结果,这些测量数据用来对Estimate State进行校准。
传感器读数和Trace State的Unit和Scale可能不一样,因此须要用矩阵$\mathbf{H}_k$进行变换。
传感器读数的分布以下:
$$ \begin{aligned} \vec{\mu}_{\text{expected}} &= \mathbf{H}_k {\mathbf{\hat{x}}_k} \\ \mathbf{\Sigma}_{\text{expected}} &= \mathbf{H}_k {\mathbf{P}_k} \mathbf{H}_k^T \end{aligned} $$
Kalman Filter的一个强大之处就在于,它能够处理传感器噪声(Sensor Noise)。以下图所示,传感器的读数是不许确的,在必定范围内波动,服从正态分布。
至此,咱们获得两个高斯分布,一个是咱们预测的值(Predicted Measurement),另一个是从传感器设备读取的值(Observed Measurement).
咱们记传感器的噪声的协方差为:${\mathbf{R}_k}$,均值为:${\vec{\mathbf{z}}_k}$。两个高斯分布以下图所示:
将两个分布相乘就获得两种状况同时发生的几率。以下图重叠区域所示,事实上,重叠区域仍然服从高斯分布。
一维高斯分布的几率密度函数以下:
$$ \mathcal{N}(x, \mu,\sigma) = \frac{1}{ \sigma \sqrt{ 2\pi } } e^{ -\frac{ (x – \mu)^2 }{ 2\sigma^2 } } $$
两个高斯函数的乘积仍然服从高斯分布:
$$ \mathcal{N}(x, {\mu_0}, {\sigma_0}) \cdot \mathcal{N}(x, {\mu_1}, {\sigma_1}) \stackrel{?}{=} \mathcal{N}(x, {\mu’}, {\sigma’}) $$
其中:
$$ {\mathbf{k}} = \frac{\sigma_0^2}{\sigma_0^2 + \sigma_1^2} $$
$$ \begin{aligned} {\mu’} &= \mu_0 + {\mathbf{k}} (\mu_1 – \mu_0)\\ {\sigma’}^2 &= \sigma_0^2 – {\mathbf{k}} \sigma_0^2 \\ \end{aligned} $$
一样的,对于多维高斯分布,有:
$$ {\mathbf{K}} = \Sigma_0 (\Sigma_0 + \Sigma_1)^{-1} $$
$$ \begin{aligned} {\vec{\mu}’} &= \vec{\mu_0} + {\mathbf{K}} (\vec{\mu_1} – \vec{\mu_0})\\ {\Sigma’} &= \Sigma_0 – {\mathbf{K}} \Sigma_0 \end{aligned} $$
${\mathbf{K}}$被称为Kalman Gain.
如今咱们有两个高斯分布的测量结果:Predicted Measurement和Observed Measurement。
1) Predicted Measurement
$$ ({\mu_0}, {\Sigma_0}) = ({\mathbf{H}_k \mathbf{\hat{x}}_k},{\mathbf{H}_k \mathbf{P}_k \mathbf{H}_k^T}) $$
2) Observed Measurement
$$ {\mu_1}, {\Sigma_1}) = ({\vec{\mathbf{z}}_k}, {\mathbf{R}_k}) $$
根据多维高斯分布融合理论:
$$ \begin{aligned} \mathbf{H}_k {\mathbf{\hat{x}}_k’} &= {\mathbf{H}_k \mathbf{\hat{x}}_k} + {\mathbf{K}} ( {\vec{\mathbf{z}_k}} – {\mathbf{H}_k \mathbf{\hat{x}}_k} ) \\ \mathbf{H}_k {\mathbf{P}_k’} \mathbf{H}_k^T &= {\mathbf{H}_k \mathbf{P}_k \mathbf{H}_k^T} –{\mathbf{K}} {\mathbf{H}_k \mathbf{P}_k \mathbf{H}_k^T} \end{aligned} $$
其中Kalman gain以下:
$$ {\mathbf{K}} = {\mathbf{H}_k \mathbf{P}_k \mathbf{H}_k^T} ( {\mathbf{H}_k \mathbf{P}_k \mathbf{H}_k^T} + {\mathbf{R}_k})^{-1} $$
咱们对上述方程进行化简,去除头部的$H_K$和尾部的$H_k^T$,获得以下的更新方程:
$$ \begin{aligned} {\mathbf{\hat{x}}_k’} &= {\mathbf{\hat{x}}_k} + {\mathbf{K}’} ( {\vec{\mathbf{z}_k}} – {\mathbf{H}_k \mathbf{\hat{x}}_k} ) \\ {\mathbf{P}_k’} &= {\mathbf{P}_k} – {\mathbf{K}’} {\mathbf{H}_k \mathbf{P}_k} \end{aligned} $$
$$ {\mathbf{K}’} = {\mathbf{P}_k \mathbf{H}_k^T} ( {\mathbf{H}_k \mathbf{P}_k \mathbf{H}_k^T} + {\mathbf{R}_k})^{-1} $$
Least Square解决的是静态参数估计的问题,Kalman Filter能够解决动态变化的状态的估计和更新问题。
对比KF与RLS的过程:
KF:
预测
$$ \begin{aligned} {\mathbf{\hat{x}}_k} &= \mathbf{F}_k {\mathbf{\hat{x}}_{k-1}} + \mathbf{B}_k {\vec{\mathbf{u}_k}} \\ {\mathbf{P}_k} &= \mathbf{F_k} {\mathbf{P}_{k-1}} \mathbf{F}_k^T + {\mathbf{Q}_k} \end{aligned} $$
测量更新
$$ {\mathbf{K}’} = {\mathbf{P}_k \mathbf{H}_k^T} ( {\mathbf{H}_k \mathbf{P}_k \mathbf{H}_k^T} + {\mathbf{R}_k})^{-1} $$
$$ \begin{aligned} {\mathbf{\hat{x}}_k’} &= {\mathbf{\hat{x}}_k}+{\mathbf{K}’} ( {\vec{\mathbf{z}_k}} – {\mathbf{H}_k \mathbf{\hat{x}}_k} ) \\ {\mathbf{P}_k’} &= {\mathbf{P}_k}–{\mathbf{K}’} {\mathbf{H}_k \mathbf{P}_k} \end{aligned} $$
RLS:
$$ \begin{aligned} K_k=&P_{k-1}H_k^T(R_k + H_kP_{k-1}H_k^T)^{-1} \end{aligned} $$
$$ \hat{x}_{k} = \hat{x}_{k-1} + K_k(y_k - H_k \hat{x}_{k-1}) $$
$$ \begin{aligned} P_k=(I-K_kH_k)P_{k-1} \end{aligned} $$
能够看出,KF比RLS相比,增长了基于Motion Model的Prediction过程,用于跟踪State是如何随时间变化的。
https://www.bzarg.com/p/how-a...
自动驾驶系统定位与状态估计- Recursive Least Squares Estimation
自动驾驶系统定位与状态估计- Weighted Least Square Method
自动驾驶定位系统-State Estimation & Localization
我的网站地址: http://www.banbeichadexiaojiu...