您的位置:首页 > 其它

用俗话讲讲卡尔曼滤波与粒子滤波

2016-07-24 21:34 344 查看

一,卡尔曼滤波

卡尔曼滤波可以根据一些已知的量来预测未知的量,这些量受到的干扰必须得近似高斯噪声。这个东西可以用来干什么呢?例如我们可以用来预测明天,后天,未来好几天的温度。我们可以在前几天用温度计记录下一系列的温度数据作为我们未来预测的参考数据之一,然后我们根据一年四季的温度变化作为参考数据之二,我们给这2个参考数据各加一个权重综合起来预测未来的温度。如果前几天记录下来的数据与真实温度很切合(毕竟温度计也是有误差),我们就把它的权重加大。用这个方法卡尔曼先生对近期未来的数据的预测还是很精确的,只要我们的数据只受到高斯噪声的干扰。

我想起来我以前做过的一个项目,基于KINECT的实时三维地图构建与位姿估计,其中摄像头的位姿估计就用到了卡尔曼滤波算法,我们在三维地图中画出了估计出来的摄像头朝向,是怎么做到的呢?我们用了大约10秒钟的标定数据,即让摄像头做上下左右位移,这个过程大约10秒,10秒之后再打开所有的程序,这10秒就是用来参考的历史数据,我们捕捉画面中观察到了向上,向下的矢量运动(这个用仿射变换就能搞定),然后我们就知道了怎样的矢量方向表示摄像头在向上运动,怎样的矢量表示摄像头在向下等等,这样我们就能在只捕捉画面中的的移动矢量就能用卡尔曼滤波算法估计出此时此刻摄像头的正确朝向。

这样我们就在没有惯导单元的情况下成功知道了摄像头的旋转、移动状态,是不是很酷!

二,粒子滤波

 
粒子滤波算法源于蒙特卡洛思想,即以某事件出现的频率来指代该事件的概率。通俗的讲,粒子滤波也是能用已知的一些数据预测未来的数据,但是粒子滤波可以不局限于高斯噪声,原理上粒子滤波可以驾驭所有的非线性、非高斯系统。粒子滤波还广泛运用与各种军事领域,对于上述的哪个SLAM项目于是同样驾驭。

举个栗子,假设美帝的爱国者防空导弹里面的程序用的是粒子滤波。三胖某天闲来无事射个导弹过去玩玩,导弹在刚出朝鲜领土时就被美帝的卫星间谍发现,卫星间谍神情高度紧张,它的程序虚拟出来一块包含朝鲜与美国的巨大立体三维空间,在这个空间中加入地球大气阻力系数,地心引力等等参数。然后顺手撒了一把沙子,并给这些沙子赋予初始动量,和模拟导弹质量与外观的系数。这些沙子开始在空间中从朝鲜向着美帝飞去,刚刚进入太平洋的时候,位于夏威夷军事基地上的爱国者导弹发射了,它朝着太平洋中心飞去,因为程序中的那一大堆沙子构成的轨迹最多最粗的那一根10分钟后要经过太平洋中心的一个点。10分钟后2个导弹在太平洋中心相遇了,粒子滤波成功预测了导弹的轨迹。

   写 粒子滤波代码的5个步骤:

     在粒子滤波过程中,X(t)实际上是通过对大量粒子的状态进行处理得到的。

    1)初始状态:用大量粒子模拟X(t),粒子在空间内均匀分布;

    2)预测阶段:根据状态转移方程,每一个粒子得到一个预测粒子;

    3)校正阶段:对预测粒子进行评价,越接近于真实状态的粒子,其权重越大;

    4)重采样:根据粒子权重对粒子进行筛选,筛选过程中,既要大量保留权重大的粒子,又要有一小部分权重小的粒子;

    5)滤波:将重采样后的粒子带入状态转移方程得到新的预测粒子,即步骤2。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息