基本思想

  以K-1时刻的最优估计Xk-1为准,预测K时刻的状态变量Xk/k-1,同时又对该状态进行观测,得到观测变量Zk,再在预测与观之间进行分析,或者说是以观测量对预测量进行修正,从而得到K时刻的最优状态估计Xk。

具体实例

  设一个机器人有两个状态量,分别为位置P,速度V。在这里记为:

卡尔曼滤波假设两个变量(位置和速度,在这个例子中)都是随机的,并且服从高斯分布。每个变量都有一个均值μ,表示随机分布的中心(最可能的状态),以及方差 ,表示不确定性。其中,位置和速度之间可以是相关的也可以是不相关的。如果二者相关,那么这意味着可以由其中一个变量推出另一个变量的值。例如,我们基于旧的位置来估计新位置。如果速度过高,我们可能已经移动很远了。如果缓慢移动,则距离不会很远;如果二者不相关,则无法相互推出。它们这种相关性,可以用协方差矩阵来表示,简言之,矩阵中的每个元素Σij表示第i个和第j个状态变量之间的相关度。

预测方程

  下面我们用矩阵来表述此问题。基于高斯分布来建立状态变量,那么在时刻K需要两个信息:最佳估计以及协方差矩阵Pk

需要注意的是,我们这里只用到了两个状态位置和速度,实际上可以包含多个变量。接下来,我们根据当前状态(k-1时刻)来预测下一状态(k时刻)。记住,我们并不知道对下一状态的所有预测中哪个是真实的,但我们的预测函数并不在乎。它只管对所有的可能性进行预测,并给出新的高斯分布。

我们用基本的数学公式表示下一状态的预测:

                Pk=Pk-1+Δt*Vk-1

                Vk=              Vk-1

用矩阵表示即为:

现在,预测矩阵已经表示出下一时刻的状态,接下来表示协方差矩阵。在给出协方差矩阵前,我们需要了解一个简单的变换:

                         Cov(x)=Σ

                  Cov(Ax)=AΣAT

因此得到 Pk=FkPk-1FkT.

综上,我们得到预测方程为:

外部控制

  我们并没有捕捉到一切信息,可能存在外部因素会对系统进行控制,带来一些与系统自身状态没有相关性的改变。以汽车运动模型为例,汽车司机可能会控制油门,使得汽车加速行驶。同样地,机器人这个例子中,内部指令也可能使得轮子加速转动或者减速。我们可以将这些额外的控制信息,用一个向量 表示,将它们加到我们的预测方程中做修正。

  假设由于油门的设置或控制命令,我们知道了期望的加速度a,根据基本的运动学方程可以得到:

                Pk=Pk-1+Δt*Vk-1+1/2*aΔt2

                Vk=              Vk-1+aΔt

用矩阵表示即为:

其中,Bk称为控制矩阵,称为控制向量(对于没有外部控制的简单系统来说,这部分可以忽略)。考虑了预测部分+外部控制后,我们还有一些因素需要考虑,例如噪声。

外部干扰

  如果这些状态靓完全是基于系统自身参数属性或者一些已知的外部控制来变化,则不会有什么问题。但是,如果存在未知的干扰呢?例如,假设我们跟踪一个四旋翼飞行器,它可能会受到风的干扰,如果我们跟踪一个轮式机器人,轮子可能会打滑,或者路面上的小坡会让它减速。这样的话我们就不能继续对这些状态进行跟踪,如果没有把这些外部干扰考虑在内,我们的预测就会出现偏差。因此,在每次预测之后,我们可以添加一些新的不确定性来建立这种与“外界”(即我们没有跟踪的干扰)之间的不确定性模型。

  由于原始估计中的每个状态变量更新到新的状态后,仍服从高斯分布。我们就可以说的每个状态变量移动到了一个新的服从高斯分布的区域,协方差为Qk。换句话说,我们就是将这些未跟踪到的干扰当做协方差为Qk的噪声处理。这就产生了具有不同协方差,但均值相同的新的高斯分布。我们可以通过简单地添加Qk得到扩展的协方差,下面给出预测步骤的完整表达式:

  由上式可知,新的最优估计是根据上一最优估计预测得到的,并加上已知的外部控制变量的修正。而新的不确定性由上一不确定性预测,并加上外部环境干扰得到的。

  以上就是我们给出Kalman Filter的预测部分的讲解,那么接下来我们说下Kalman Filter的另一个中部分---更新,即结合传感器数据对预测部分进行进一步的确定性增强。

用测量数据修正估计

  我们可能会有多个传感器来测量系统当前的状态,哪个传感器具体测量的是哪个状态变量并不重要,也许一个是测量位置,一个是测量速度,每个传感器间接地告诉了我们一些状态信息。但是需要注意的是,有些情况下,传感器读取的数据的单位尺度与我们跟踪状态的单位尺度不同,我们需要用矩阵Hk将我们预测的数据转换为与传感器读取的数据相同的单位尺度,以便进行数据融合。

我们通过预测数据计算出传感器读数分布如下式所示:

                      

  卡尔曼滤波的一大优点就是能处理传感器噪声,换句话说,我们的传感器或多或少都有点不可靠,并且原始估计中的每个状态可以和一定范围内的传感器读数对应起来。 从测量到的传感器数据中,我们大致能猜到系统当前处于什么状态。但是由于存在不确定性,某些状态可能比我们得到的读数更接近真实状态。 我们将这种不确定性(例如:传感器噪声)用协方差Rk表示,该分布的均值就是我们读取到的传感器数据,称之为

  现在我们得到两个高斯分布,一个是在预测值附近,一个是在传感器读数附近。 我们必须通过这两个高斯分布找到最优解。那么,最有可能的状态是什么呢?对于任何可能的值,有两种情况:(1)传感器的测量值;(2)由前一状态得到的预测值。那么如果得到这两种情况都可能发生的概率,将这两个高斯分布相乘就可以了。 就可到满足二者共同的部分,那么这个重叠部分也就是两个估计最优可能的值,即所有信息中的最优估计。

  把两个具有不同均值和方差的高斯分布相乘,你会得到一个新的具有独立均值和方差的高斯分布!推导如下:

假设预测部分满足N(x;μ0,σ02),测量部分满足N(x;μ1,σ12),那么N(x;μ0,σ02)*N(x;μ1,σ12)=?N(x;μ',σ'2)

通过将高斯分布概率密度公式带入,并进行归一化使得总概率为一,可以得到:

                             

将上式相同部分用K表示:

                       

将上式进一步写成矩阵形式,用Σ表示高斯分布的协方差,表示每个维度的均值,则:

                      

其中矩阵K称为卡尔曼增益。

下面整理所有公式,推导更新步骤。


我们有两个高斯分布,预测部分和测量部分,将它们放到上式中算出它们之间的重叠部分:

                  

将式(1)(2)带入K的等式中得到卡尔曼增益为:

                        

将(1)(2)的两式同时左乘矩阵的逆Hk-1(注意K中有Hk)约掉Hk,再将式(2)右边同时右乘矩阵HKT的逆得到下式:

  上式给出了完整的更新步骤。就是最优估计,我们可以将它和Pk'放到下一次预测和更新方程中不断迭代。以上所有公式你只需用到式(0)(4)(5)(6)。

总结:

  想象一下,你在一辆装有外部传感器的汽车里。 汽车传感器可以检测移动的物体:例如,传感器可能检测到行人,甚至是自行车。 对于多样性,让我们以自行车示例逐步执行卡尔曼滤波算法。
卡尔曼滤波器算法将执行以下步骤:

  • 第一次测量 - 滤波器将接收自行车相对于汽车位置的初始测量值。 这些测量将来自雷达或激光雷达传感器;
  • 初始化状态和协方差矩阵 - 滤波器将根据第一次测量初始化自行车的位置;
  • 然后汽车将在一段时间Δt后接收另一个传感器测量值;
  • 预测 - 算法将预测自行车在一段时间Δt后的位置。 在Δt之后预测自行车位置的一种基本方法是假设自行车的速度是恒定的; 因此,自行车移动距离为速度* Δt。 在扩展卡尔曼滤波器中,我们假设速度是恒定的; 在无迹的卡尔曼滤波器中,我们将介绍一个更复杂的运动模型;
  • 更新 - 滤波器将“预测”位置与传感器测量值所示的位置进行比较。 将预测的位置和测量的位置组合以给出更新的位置。 卡尔曼滤波器将根据每个值的不确定性对预测位置或测量位置施加更多权重。
  • 然后汽车将在一段时间Δt后接收另一个传感器测量值。 然后该算法执行另一个预测和更新步骤。

  我们可以用这些公式对任何线性系统建立精确的模型,对于非线性系统来说,我们使用扩展卡尔曼滤波,区别在于EKF多了一个把预测和测量部分进行线性化的过程。

  本期的无人驾驶技术之Kalman Filter就介绍到这里,下一期介绍扩展卡尔曼滤波技术,敬请期待。

  

  

                

              

                    

  

无人驾驶技术之Kalman Filter原理介绍的更多相关文章

  1. 通俗理解kalman filter原理

    [哲学思想]即使我们对真相(真值)一无所知,我们任然可以通过研究事物规律,历史信息,当前观测而能尽可能靠近真相(真值). [线性预测模型]温度的变化是线性规律的,已知房间温度真值每小时上升1度左右(用 ...

  2. kalman filter卡尔曼滤波器- 数学推导和原理理解-----网上讲的比较好的kalman filter和整理、将预测值和观测值融和

    = 参考/转自: 1 ---https://blog.csdn.net/u010720661/article/details/63253509 2----http://www.bzarg.com/p/ ...

  3. Kalman Filter、Extended Kalman Filter以及Unscented Kalman Filter介绍

    模型定义 如上图所示,卡尔曼滤波(Kalman Filter)的基本模型和隐马尔可夫模型类似,不同的是隐马尔科夫模型考虑离散的状态空间,而卡尔曼滤波的状态空间以及观测空间都是连续的,并且都属于高斯分布 ...

  4. 卡尔曼滤波器 Kalman Filter (转载)

    在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”.跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡 尔曼全名Rudolf Emil ...

  5. GMM+Kalman Filter+Blob 目标跟踪

    转 http://www.cnblogs.com/YangQiaoblog/p/5462453.html ==========图片版================================== ...

  6. 卡尔曼滤波(Kalman Filter) 的进一步讨论

    我们在上一篇文章中通过一个简单的样例算是入门卡尔曼滤波了.本文将以此为基础讨论一些技术细节. 卡尔曼滤波(Kalman Filter) http://blog.csdn.net/baimafujinj ...

  7. Kalman滤波器原理和实现

    Kalman滤波器原理和实现 kalman filter Kalman滤波器的直观理解[1] 假设我们要测量一个房间下一刻钟的温度.据经验判断,房间内的温度不可能短时大幅度变化,也就是说可以依经验认为 ...

  8. (二). 细说Kalman滤波:The Kalman Filter

    本文为原创文章,转载请注明出处,http://www.cnblogs.com/ycwang16/p/5999034.html 前面介绍了Bayes滤波方法,我们接下来详细说说Kalman滤波器.虽然K ...

  9. 机器人学 —— 机器人感知(Kalman Filter)

    对于机器人感知任务而言,经常需要预判物体的运动,保证机器人在物体与自身接触之前进行规避.比如无人机与障碍物的碰撞,足球机器人判断足球的位置.预判的前提是对当前状态进行准确的估计,比如足球的速度,障碍物 ...

随机推荐

  1. 记一次jvm异常排查及优化

    为方便自己查看,根据工作遇到的问题,转载并整理以下jvm优化内容 有次接到客服反馈,生产系统异常,无法访问.接到通知紧急上后台跟踪,查看了数据库死锁情况--正常,接着查看tomcat 内存溢出--正常 ...

  2. 触发器 of oracle

    . 本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行. 因此触发器不需要人为的去调用 ...

  3. webStorm安装以及集成git使用!

    一:安装webstorm 百度网盘地址:https://pan.baidu.com/s/1K96mg7WYHc6X3odtk7_f2g 密码:2cgd   二:破解webstorm 1:选择liste ...

  4. web相关文件加载顺序

    WEB相关文件的加载顺序   一. 1.启动一个WEB项目,WEB容器会先去读取它的配置文件web.xml,读取<context-param>和<listener>两个节点. ...

  5. vue-scroller使用

    <template> <div class="page page-scroller"> <scroller class="scroller& ...

  6. MySQL的主从复制+双主模式

    MySQL的主从复制 部署环境: MySQL master 192.168.40.21 MySQL slave  192.168.40.22 思路: 当主MySQL上进行数据上的操作或者变化时,主My ...

  7. 自学tensorflow——1.框架初步了解以及构建简单的计算图计算

    1.初步了解 tensorflow是谷歌的一款开源深度学习框架.运行前,需要先定义好计算图,最后通过会话启动计算图,这么做的目的是为了防止数据在python和c++(tensorflow底层)传输的时 ...

  8. 理解同步,异步,阻塞,非阻塞,多路复用,事件驱动IO

    以下是IO的一个基本过程 先理解一下用户空间和内核空间,系统为了保护内核数据,会将寻址空间分为用户空间和内核空间,32位机器为例,高1G字节作为内核空间,低3G字节作为用户空间.当用户程序读取数据的时 ...

  9. 20155203 2016-2017-2《Java程序设计》课程总结

    目录 一.每周作业链接汇总 自认为写得最好一篇博客是?为什么? 作业中阅读量最高的一篇博客是?谈谈经验 作业中与师生交互最多的一篇博客是?谈谈收获 二.实验报告链接汇总 三.代码托管链接 四.课堂项目 ...

  10. 20155213 2016-2017-2 《Java程序设计》第一周学习总结

    20155213 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 了解JVM.JRE与JDK,并下载.安装.测试JDK JVM JVM是Java Virtua ...