您的位置  > 互联网

基于卡尔曼滤波算法的五种方法,值得收藏!

卡尔曼滤波器可以根据一些已知量来预测未知量,而对这些量的干扰必须用高斯噪声来近似。 这东西能用来做什么? 例如,我们可以用它来预测明天、后天、未来几天的温度。 我们可以用温度计记录过去几天的一系列温度数据,作为我们未来预测的参考数据之一。 然后我们用全年的气温变化作为第二个参考数据。 我们为这两个参考数据各加一。 权重结合起来可以预测未来的温度。 如果这几天记录的数据与真实温度一致(毕竟温度计也有误差),我们就会增加它的权重。 使用这种方法,只要我们的数据仅受到高斯噪声的干扰,卡尔曼先生对近期数据的预测仍然非常准确。

我记得以前做过一个项目,基于实时三维地图构建和姿态估计。 相机位姿估计使用卡尔曼滤波器算法。 我们在三维地图上绘制了估计的相机方向。 它是如何完成的? 我们用了10秒左右的标定数据,即让相机上下左右移动。 这个过程大约需要10秒。 10秒后,我们打开所有程序。 这10秒是可供参考的历史数据。 我们抓拍屏幕,观察到向上和向下的矢量运动(这个可以通过仿射变换来完成),那么我们就知道什么矢量方向表示相机在向上移动,什么矢量表示相机在向下移动等.,这样我们就可以只捕捉图片中的运动矢量,就可以利用卡尔曼滤波算法来估计此时相机的正确方位。

这样,我们就成功地在没有惯导单元的情况下知道了相机的旋转和运动状态。 是不是很酷!

2. 颗粒过滤

粒子滤波算法源自蒙特卡罗思想,即根据事件发生的频率来计算事件的概率。 通俗地说,粒子滤波还可以利用一些已知的数据来预测未来的数据,但粒子滤波并不局限于高斯噪声。 原则上,粒子滤波可以控制所有非线性和非高斯系统。 粒子过滤也广泛应用于各个军事领域,同样适用于上述任何SLAM项目。

例如,假设美国爱国者防空导弹中的程序使用粒子过滤。 有一天,三庞有空去发射一枚导弹取乐。 该导弹刚离开朝鲜领土就被美国卫星间谍发现。 卫星间谍看上去很紧张。 它的程序创建了一个包含朝鲜和美国的虚拟三维空间。 在三维空间中,将地球的大气阻力系数、重力等参数加入到这个空间中。 然后撒上一把沙子,并赋予沙子初始动量和模拟导弹质量和外观的系数。 沙子开始在太空中从朝鲜飞向美国。 就在进入太平洋时,位于夏威夷军事基地的爱国者导弹发射了。 它朝着太平洋中心飞去,因为程序中的大堆沙子构成的轨迹最大、最粗的一个,将在10分钟内经过太平洋中心的一个点。 十分钟后,两枚导弹在太平洋中心相遇,粒子滤波成功预测了导弹的弹道。

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

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

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

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

3)校准阶段:评估预测的粒子。 粒子越接近真实状态,其重量越大;

4)重采样:根据粒子的权重进行筛选。 筛选过程中,需要保留大量权重大的颗粒和少量权重小的颗粒;

5)过滤:将重采样的粒子带入状态转移方程,得到新的预测粒子,即步骤2。