无人驾驶技术之Kalman Filter原理介绍
基本思想
以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原理介绍的更多相关文章
- 通俗理解kalman filter原理
[哲学思想]即使我们对真相(真值)一无所知,我们任然可以通过研究事物规律,历史信息,当前观测而能尽可能靠近真相(真值). [线性预测模型]温度的变化是线性规律的,已知房间温度真值每小时上升1度左右(用 ...
- kalman filter卡尔曼滤波器- 数学推导和原理理解-----网上讲的比较好的kalman filter和整理、将预测值和观测值融和
= 参考/转自: 1 ---https://blog.csdn.net/u010720661/article/details/63253509 2----http://www.bzarg.com/p/ ...
- Kalman Filter、Extended Kalman Filter以及Unscented Kalman Filter介绍
模型定义 如上图所示,卡尔曼滤波(Kalman Filter)的基本模型和隐马尔可夫模型类似,不同的是隐马尔科夫模型考虑离散的状态空间,而卡尔曼滤波的状态空间以及观测空间都是连续的,并且都属于高斯分布 ...
- 卡尔曼滤波器 Kalman Filter (转载)
在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”.跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡 尔曼全名Rudolf Emil ...
- GMM+Kalman Filter+Blob 目标跟踪
转 http://www.cnblogs.com/YangQiaoblog/p/5462453.html ==========图片版================================== ...
- 卡尔曼滤波(Kalman Filter) 的进一步讨论
我们在上一篇文章中通过一个简单的样例算是入门卡尔曼滤波了.本文将以此为基础讨论一些技术细节. 卡尔曼滤波(Kalman Filter) http://blog.csdn.net/baimafujinj ...
- Kalman滤波器原理和实现
Kalman滤波器原理和实现 kalman filter Kalman滤波器的直观理解[1] 假设我们要测量一个房间下一刻钟的温度.据经验判断,房间内的温度不可能短时大幅度变化,也就是说可以依经验认为 ...
- (二). 细说Kalman滤波:The Kalman Filter
本文为原创文章,转载请注明出处,http://www.cnblogs.com/ycwang16/p/5999034.html 前面介绍了Bayes滤波方法,我们接下来详细说说Kalman滤波器.虽然K ...
- 机器人学 —— 机器人感知(Kalman Filter)
对于机器人感知任务而言,经常需要预判物体的运动,保证机器人在物体与自身接触之前进行规避.比如无人机与障碍物的碰撞,足球机器人判断足球的位置.预判的前提是对当前状态进行准确的估计,比如足球的速度,障碍物 ...
随机推荐
- JAVA语言编程思维入门
Java语言是一门强数据类型语言,也就是所有的数据有自己的数据类型,不能搞混淆.比如整数int 字符串String 不能用int a="字符串123";这样写是错的,因为数据类型不 ...
- 改变eclipse左侧目录数字体大小
不可在eclipse中修改,只能通过修改配置文件来实现. 找到eclipse的安装位置(或解压路径): eclipse\plugins\org.eclipse.ui.themes_1.2.100.v2 ...
- yyy loves Maths VII(状压DP)
题目背景 yyy对某些数字有着情有独钟的喜爱,他叫他们为幸运数字;然而他作死太多,所以把自己讨厌的数字成为"厄运数字" 题目描述 一群同学在和yyy玩一个游戏 每次,他们会给yyy ...
- Linux vi编辑器使用技巧
vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器.Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能. ...
- scss基本用法
特别说明:scss函数名中的中划线和下划线是等同的,font-size和font_size指向同一个函数. 1.变量 2.选择器嵌套 3.属性嵌套 规则如下: (1).把属性名从中划线-的地方断开. ...
- cannot find module 'xxx' 解决办法
先将node_module文件夹删掉 工程目录下输入命令:npm clean cache 查看package.json里有没有依赖项,有的话npm install 没有就npm install exp ...
- Delphi Compiler Bug?
I found a Bug of Delphi XE3 Compiler,It may exists in XE4,XE5. Here is the code to show the bug proc ...
- Linux单用户CS模型TCP通讯完全注释手册
Linux单用户CS模型TCP通讯完全注释手册 server 描述 实现一个简单的Linux单用户CS通讯,客户端发送一串字符串,服务器将其转换为大写后返回. server 代码 ``` #inclu ...
- 用go实现简单的冒泡排序
package main import "fmt" func main(){ var arr = [] int { 9 , 6 , 2 , 5 , 8 , 10 , 12 , 1 ...
- 解决「matplotlib 图例中文乱码」问题
在学习用 matplotlib 画图时遇到了中文显示乱码的问题,在网上找了很多需要修改配置的方法,个人还是喜欢在代码里修改. 解决方法如下: 在第2.3行代码中加上所示代码即可. import mat ...