卡尔曼--目标跟踪详解

卡尔曼滤波器介绍

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

卡尔曼滤波器原理

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

状态转移

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

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

协方差矩阵

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

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

噪声协方差矩阵的传递

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

观察矩阵

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

状态更新

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

噪声协方差矩阵的更新

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

总结

预 测 公 式 : x ^ − = F x ^ t − 1 + B u t − 1 P t − = F P t − 1 F T + Q 预测公式:\\ {\hat x}^-=F{\hat x_{t-1}}+Bu_{t-1}\\ P^-_t=FP_{t-1}F^T+Q \\ x^=Fx^t1+But1Pt=FPt1FT+Q
更 新 公 式 : K t = P t − H T ( H P t − H T + R ) − 1 x ^ t = x ^ t − + K t ( Z t − H x ^ t − ) P t = ( I − K t H ) P t − 更新公式:\\ 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 Kt=PtHT(HPtHT+R)1x^t=x^t+Kt(ZtHx^t)Pt=(IKtH)Pt
F t F_t Ft叫状态转移矩阵
B t B_t Bt叫控制矩阵,他表示控制量 u t u_t ut如何来作用于当前状态。
P P P叫协方差矩阵表示每一个时刻的状态的不确定性,预测状态协方差
Q Q Q表示预测模型本身带来的噪声
H H H观测矩阵
R R R观测量的协方差矩阵
Z Z Z观测值
I I I为单位矩阵

  • 15
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值