卡尔曼--目标跟踪详解

卡尔曼滤波器介绍

卡尔曼滤波器又叫最佳线性滤波器,他的好处有很多,比如实现简单而且又是纯时域的滤波器不需要进行频域变换所以在工程上有很多应用。

卡尔曼滤波器原理

假设有一辆汽车在公路上行驶我们用他的位置和速度来表示他当前的状态,在这里插入图片描述
写成矩阵的形式状态 xtx_t
xt=[ptvt] x_t = \begin{bmatrix} p_t \\ v_t \end{bmatrix}

状态转移

驾驶员可以踩油门或者踩刹车,所以车还有一个加速度 utu_t,如果我们已经知道了上一时刻的状态xt1x_{t-1},那么当前状态 xtx_t会是什么呢?
位置ptp_t和速度vtv_t与上一时刻的关系就如下公式所示:
pt=pt1+Δt×vt1+ut2×Δt2vt=vt1+Δt×ut p_t=p_{t-1}+\Delta_t \times v_{t-1}+{\frac {u_t}2} \times \Delta_t^2 \\ v_t=v_{t-1}+\Delta_t \times u_t
pt1p_{t-1}上一时刻的位置
vt1v_{t-1}上一时刻的速度
我们观察这两个公式发现输出变量都只是输入变量的线性组合,这就是为什么说卡尔曼滤波器是最佳的线性滤波器,因为它只能描述状态与状态的线性关系,既然是线性关系就可以写成矩阵的形式,如下所示
[ptvt]=[1Δt01][pt1vt1]+[Δt22Δt]ut \begin{bmatrix} p_t \\ v_t \end{bmatrix}= \begin{bmatrix} 1&\Delta_t\\ 0&1 \end{bmatrix} \begin{bmatrix} p_{t-1}\\ v_{t-1} \end{bmatrix}+ \begin{bmatrix} {\frac {\Delta_t^2}2}\\ \Delta_t \end{bmatrix}u_t
在进一步把两个状态变换矩阵提取出来,变成
Ft=[1Δt01],Bt=[Δt22Δt] F_t= \begin{bmatrix} 1&\Delta_t\\ 0&1 \end{bmatrix}, B_t= \begin{bmatrix} {\frac {\Delta_t^2}2}\\ \Delta_t \end{bmatrix} 公式就可以简化为
(1)x^=Ftx^t1+Btut {\hat x}^-=F_t{\hat x_{t-1}}+B_tu_t \tag{1}
公式(1)就是卡尔曼滤波器中的第一个公式 状态预测公式,其中FtF_t就叫做状态转移矩阵,它表示我们如何从上一时刻的状态来推测当前时刻的状态,BtB_t就控制矩阵,他表示控制量utu_t如何来作用于当前状态。

公式中的xx带有帽子表示是xx估计量而不是真实值,因为汽车的真实值我们是永远无法知道,只能根据观测来尽可能的估计xx的值。等号左边的x还加了一个减号的上标表示这个值是根据上一时刻的状态推测而来的,后面会根据观测量去修正这个x^{\hat x}^-的值,修正之后才是最佳的估计值也就是没有减号上标的xx的值。

协方差矩阵

有了状态预测公式就可以推测当前时刻的状态,但是我们只能所有的推测都是包含噪声的,噪声越大不确定性就越大,如何来表示推测带有多少不确定性呢?这就要用协方差矩阵来表示。

假设我们有一个一维的包含噪声的数据,每次测量的值都不同,但都是围绕在一个中心值的周围,那我们表示它的分布状况最简单的方法就是记下它的中心值和方差,这实际上是假设了它是一个高斯的分布。
在这里插入图片描述
在这里插入图片描述
二维包含噪声的数据看起来如下所示
在这里插入图片描述
分别对两个座标轴进行投影,在两个轴上都是高斯分布。
在这里插入图片描述
那我们在表示它的分布时是不是分别记下两个高斯分布的中心值和方差就可以了呢,如果两个维度的噪声是独立的时候可以这么表示,但是在两个维度上噪声有相关性的时候就不可以。如下图
在这里插入图片描述
为了表示这两个维度的相关性除了要记住两个维度的方差之外,还要有一个协方差来表示两个维度的相关程度,写成矩阵的形式
cov(x,x)=[σ11σ12σ12σ22] cov(x,x)= \begin{bmatrix} \sigma_{11} & \sigma_{12}\\ \sigma_{12} & \sigma_{22} \end{bmatrix} 对角线上的两个值是方差,反对角线上的两个值是协方差他们两个是相等的,
在卡尔曼滤波器中所有有关不确定的表述都要用到协方差矩阵

噪声协方差矩阵的传递

在我们的小汽车的例子中每一个时刻的状态的不确定性都是由协方差矩阵PP来表示
Pt=FPt1FT P^-_t=FP_{t-1}F^T
当前状态的协方差就等于上一时刻的协方差两边乘以状态转移矩阵,为什么要乘两边这是协方差矩阵的性质 协方差矩阵的性质:cov(Ax,Bx)=Acov(x,x)BTcov(Ax,Bx)=Acov(x,x)B^T
预测模型并不是百分之百准确的,所以我们要在后面加上一个协方差矩阵QQ来表示预测模型本身带来的噪声
(2)Pt=FPt1FT+Q P^-_t=FP_{t-1}F^T+Q \tag{2}
公式(2)就是卡尔曼滤波器中的第二个公式 ,它表示不确定性在各个时刻之间的传递关系。

观察矩阵

假设我们这公路的一端放了一个激光测距仪,在每个时刻都可以观测到汽车的位置。
在这里插入图片描述
观测到的值我们记为ZtZ_t,那么从汽车本身的状态xtx_tZtZ_t之间有一个变换关系我们记为HH,当然这个变换关系也只能是线性关系,所以要把HH写成矩阵的形式也就是观测矩阵
H=[10]H= \begin{bmatrix} 1&0 \end{bmatrix}
xxZZ的维度不一定是相同的,在我们的例子里xtx_t是一个二维的列向量,ZZ只是一个标量的值,所以HH应该是一个一行两列的矩阵,元素为1和0,这样当HHxtx_t相乘的时候就得到了一个标量的值ZZZZ也就是汽车的位置,他和xtx_t的第一个元素是相等的,观测值也不是百分之百可靠的,所以也要加上一个观测的噪声VV
Zt=Hxt+VZ_t=Hx_t+V
而这个噪声的协方差矩阵用RR来表示,由于在我们的例子里观测值是一个一维的值,所以这个RR的形式也不是一个矩阵而是一个单独的值仅仅表示ZtZ_t的方差。假设我们除了激光测距仪之外还有其他的测量方法可以观测到汽车的某项特征,那么ZZ就会变成一个多维的列向量,他会包含每一种测量方式的测量值,而每一种测量值都只是真实状态的不完全的表现,我们可以从几种不完全的表述里面推断真实的状态,卡尔曼的数据融合的功能正是在这个测量矩阵中体现出来的。

状态更新

前面已经得到了带有减号的xtx_t现在我们只要在他后面加上一项来修正它的值就可以得到我们的最佳估计值了
(3)x^t=x^t+Kt(ZtHx^t)\hat x_t={\hat x_t}^-+K_t(Z_t-H{\hat x_t}^-)\tag{3}
括号里面的表示实际的观测值和预期的观测值的残差,这个残差乘上系数KtK_t就可以修正xtx_t的值了,KtK_t叫卡尔曼系数他也是一个矩阵
(4)Kt=PtHT(HPtHT+R)1K_t=P^-_tH^T(HP^-_tH^T+R)^{-1} \tag{4}公式的推导比较复杂,这里只是用来定性的分析一下,卡尔曼系数的作用主要有两个方面,一是权衡预测状态协方差PP和观测量的协方差矩阵RR的大小来决定我们是相信预测模型多一点还是相信观测模型多一点,如果相信预测模型多一点那个这个残差的权重就会小一点,如果相信观测模型多一点这个残差的权重就会大一点。
二是把残差的表现形式从观测域转换到状态域。我们前面讲到观测值ZZ只是一个一维的向量状态xx是一个二维的向量,他们所用的单位甚至是描述的特征都可能是不同的那我们怎么用观测值的残差去更新状态值,实际那个卡尔曼系数KtK_t就是在替我们做这样的转换。在我们的例子里我们只观测到汽车的位置,但是KtK_t里面已经包含了协方差矩阵PP的信息,所以它利用速度和位置这两个维度的相关性从位置的残差里面推算出速度的残差,从而让我们可以对状态xx的两个维度同时进行修正。

噪声协方差矩阵的更新

最后一步就是更新最佳估计值的噪声分布,这个值是留给下一轮迭代时用的。在这一步里状态的不确定性是减小的,而在下一轮中由于传递噪声的引入不确定性又会增大。
(5)Pt=(IKtH)PtP_t=(I-K_tH)P^-_t \tag{5}
卡尔曼滤波器就是在这样一种不确定性变化中寻求一种平衡的。

总结

x^=Fx^t1+But1Pt=FPt1FT+Q 预测公式:\\ {\hat x}^-=F{\hat x_{t-1}}+Bu_{t-1}\\ P^-_t=FP_{t-1}F^T+Q \\
Kt=PtHT(HPtHT+R)1x^t=x^t+Kt(ZtHx^t)Pt=(IKtH)Pt 更新公式:\\ K_t=P^-_tH^T(HP^-_tH^T+R)^{-1} \\ \hat x_t={\hat x_t}^-+K_t(Z_t-H{\hat x_t}^-)\\ P_t=(I-K_tH)P^-_t
FtF_t叫状态转移矩阵
BtB_t叫控制矩阵,他表示控制量utu_t如何来作用于当前状态。
PP叫协方差矩阵表示每一个时刻的状态的不确定性,预测状态协方差
QQ表示预测模型本身带来的噪声
HH观测矩阵
RR观测量的协方差矩阵
ZZ观测值
II为单位矩阵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章