目标追踪----卡尔曼滤波算法

卡尔曼滤波是什么

只要存在不确定信息的动态系统,卡尔曼滤波就可以对系统下一步要做什么做出有根据的推测。即便有噪声信息干扰,卡尔曼滤波通常也能很好的找出现象间不易察觉的相关性。优点:内存占用较小(只需要保留前一个状态)、速度快,是实时问题和嵌入式系统的理想选择。

卡尔曼滤波可以做什么:

树林里面四处溜达的机器人,实现导航,机器人需要知道自己所处的位置。

机器人有一个包含位置信息和速度信息的状态\vec{x}。其中,\vec{x}=\left ( \vec{p}, \vec{v} \right )

在这个问题里,状态是位置和速度。放在其他问题里,它也可以是水箱里的液体体积,汽车的引擎温度等。

机器人有装有GPS传感器,GPS为我们提供一些关于状态的信息,那是间接的、不准确的。

卡尔曼滤波眼里的机器人问题:

有一个状态,它和速度、位置有关:

\vec{x} = \begin{bmatrix} p \\ v \end{bmatrix}

我们不知道它们的实际值多少, 但掌握着一些速度和位置的可能组合,其中某些组合可能性更高。

卡尔曼滤波的目标: 从不确定信息中挤出尽可能多的信息。

为了捕获这种相关性,我们用的是协方差矩阵。

\Sigma i j 表示协方差矩阵, 矩阵的每个值是第i个变量和第j个变量之间的相关程度(由于矩阵是对称的, i和j的位置可以随便变换)。

用矩阵描述问题:

还需要k时的两个信息: 最佳估计\hat{x_k{}} (均值, 也就是u), 协方差矩阵P_{k}

(虽然还是用了位置和速度两个变量, 但只要和问题相关,卡尔曼滤波可以包含任意数量的变量)

\hat{x_k{}}\begin{bmatrix} p \\ v \end{bmatrix}P_{k} = \begin{bmatrix} \Sigma pp & \Sigma pv\\ \Sigma vp & \Sigma vv \end{bmatrix} 我们要通过查看当前状态(k-1时)来预测下一个状态(k时)。可以用矩阵F_{K}来表示这个预测步骤。

它从原始预测中取每一点,并将其移动到新的预测位置。如果原始预测是正确的,系统就会移动到新位置。

我们可以用矩阵来预测机器人下一刻的位置和速度?下面是个简单公式:

           p_{k}^{P_{k-1} + \Delta}tv_{k-1}

           v_{k} =  v_{k-1}

换成矩阵形式:

           \hat{^{x_{k}}} = \begin{bmatrix} 1 & \Delta t\\ 0 & 1 \end{bmatrix} \hat{x}_{k-1} =F_k{}\hat{x}_{k-1}

 这是一个预测矩阵, 它能给出机器人的下一个状态,目前还不知道协方差矩阵的更新方法。

 对每个点进行矩阵A转换,它的协方差矩阵\Sigma,会发生什么变化呢?

 Cov(x) = \Sigma

Cov(Ax)=A\Sigma ^{}A_{}^{T}

--

\hat{​{x_{k}}} = {F_{k}}\hat{x_{k-1}

P_{k} = F_{k}P_{k-1}F_{k}^{T}

外界作用力:

系统状态的改变不只依靠上一个系统状态, 外界作用力可能会影响系统状态的变化。

跟踪一列火车的运动状态,火车驾驶员可能踩了油门使火车提速。

可以通过一个向量\bar{^{u_{k}}}来描述这些信息,把它添加到预测方程作为一个修正。

通过发出的指令得到预期的加速度a, 上边的运动方程可以变化为:

P_{k} = P_{k-1} + \Delta tV_{k-1}+\frac{1}{2}a\Delta t^{2}

V_{k}= {V_{k-1}}+a\Delta t

矩阵形式:

\hat{x_{k}} = F_{k}\hat{x_{k-1}} + \begin{bmatrix} \frac{​{\Delta t_{}}^{2}}{2} \\ \Delta t \end{bmatrix}a

    = F{_{k}}\hat{x_{k-1}}+B_{k}\vec{U_{k}}

B_{k}称作控制矩阵, \bar{U_{k}}称为控制向量。

参考链接: 米开朗基罗赵 - 知乎

你可能感兴趣的:(目标跟踪,算法,目标跟踪,人工智能)