具有 2 个测量噪声的卡尔曼滤波器

Posted

技术标签:

【中文标题】具有 2 个测量噪声的卡尔曼滤波器【英文标题】:Kalman filter with 2 measurement noise 【发布时间】:2014-05-18 14:20:40 【问题描述】:

我正在研究我的项目,这是一辆自动驾驶汽车。我们在 2 个***上固定了 1 对里程计编码器,并在其顶部固定了 1 个激光陀螺仪。我正在设计一个卡尔曼滤波器来过滤测量中的噪声。但是,我的问题是,我不知道如何处理 2 个单独的测量噪声。

在卡尔曼滤波方程中,测量预测为:

y(k+1)=g(xk, uk,vk) 

其中 vk 是测量噪声协方差矩阵。好吧,我很困惑,因为在我的情况下,我有 2 个传感器(里程计和陀螺仪)测量 2 个不同的东西,那么我该如何构造卡尔曼滤波器的协方差矩阵?

【问题讨论】:

据我所知,您正在将测量值混合在一起。就卡尔曼滤波器而言,里程计和陀螺仪读数彼此无关。过滤器提供了一种预测单个读数的下一次测量的方法。因此,您必须在每个传感器上使用一个过滤器。关于如何计算协方差矩阵的问题,我建议您阅读更多有关卡尔曼滤波器的内容,因为在不了解其工作原理的情况下实现该滤波器可能会很棘手。 您好,您是对的。这是我的错。陀螺仪读数应立即根据里程计读取。卡尔曼滤波器只涉及一种测量。我没有读够:D 如果我想结合读取轴承和陀螺仪的里程计,我可以使用传感器融合和卡尔曼滤波器,但这绝对是另一回事 不客气 =) 你能接受它作为答案吗? 【参考方案1】:

卡尔曼滤波器可以处理来自多个来源的噪声测量。您将它们一起视为单个噪声向量。在您的情况下,由于您有两个噪声测量值,您将有一个 2×1 向量。在 Matlab 符号中...

mk = [vo; vg]; 

这里的 mk 是您的测量噪声向量。它有 2 个元素:vo(里程计噪声)和 vg(陀螺噪声)。

由于您的测量噪声是一个 2×1 向量,因此您的测量噪声协方差矩阵将是一个 2×2 矩阵。在 Matlab 符号中...

vk = [varo, rho; rho, varg];

这里的 vk 是您的测量噪声协方差矩阵。它的对角元素 varo 和 varg 是里程计和陀螺噪声的方差。非对角元素(rho)是里程计和陀螺噪声之间的相关性。

【讨论】:

【参考方案2】:

据我所知,您将测量值混合在一起。就卡尔曼滤波器而言,里程计和陀螺仪读数彼此无关。过滤器提供了一种预测单个读数的下一次测量的方法。因此,您必须在每个传感器上使用一个过滤器。关于如何计算协方差矩阵的问题,我建议一般多阅读卡尔曼滤波器,因为在不了解它的工作原理的情况下实现滤波器可能很棘手。

【讨论】:

以上是关于具有 2 个测量噪声的卡尔曼滤波器的主要内容,如果未能解决你的问题,请参考以下文章

具有四个输入参数的卡尔曼滤波器

具有增强状态向量的离散时间卡尔曼滤波器

时间序列分析----结合ARMA的卡尔曼滤波算法

python中用于速度估计的卡尔曼滤波器实现

卡尔曼滤波器+过程噪声协方差

使用 Apache Kalman 滤波器时正确设置测量噪声矩阵