16

我很感兴趣,如何对卡尔曼滤波器中的传感器融合设置中的双输入进行建模?

例如,假设您有一个加速度计和一个陀螺仪,并且想要呈现“水平高度”,就像在飞机上一样,这里有一个很好的演示。

您如何实际收获两个传感器的正属性并最小化负属性?

这是否在观察模型矩阵中建模(通常用大写 H 表示)?


备注:在math.stackexchange.com上也有人问过这个问题,但没有任何答案

4

3 回答 3

19

通常,传感器融合问题源自贝叶斯定理。实际上,您的估计(在这种情况下是水平线)将是传感器的加权和,由传感器模型表征。对于双传感器,您有两个常见的选择:为两个传感器系统建模并导出每个传感器的卡尔曼增益(使用系统模型作为预测器),或者使用不同的观察模型运行两个校正阶段。你应该看看贝叶斯预测器(比卡尔曼滤波器更通用一点),它是通过最小化估计的方差得到的,给定两个不同的信息源。如果你有一个加权和,并最小化两个传感器的和方差,那么你就会得到卡尔曼增益。

传感器的属性可以在过滤器的两个部分中“看到”。首先,您有观察的误差矩阵。这是代表传感器观察中的噪声的矩阵(假设为零均值高斯噪声,这不是一个太大的假设,因为在校准期间,您可以获得零均值噪声)。

另一个重要的矩阵是观察协方差矩阵。该矩阵可让您深入了解传感器在为您提供信息方面的能力(信息意味着“新”的东西,不依赖于其他传感器的读数)。

关于“收获好的特性”,您应该做的是对传感器进行良好的校准和噪声表征(拼写好吗?)。让卡尔曼滤波器收敛的最佳方法是为您的传感器建立一个良好的噪声模型,这是 100% 的实验性。尝试确定您的系统的差异(不要总是相信数据表)。

希望有点帮助。

于 2010-11-07T15:17:53.470 回答
2

陀螺仪测量角度变化率(例如弧度/秒),而从加速度计读数您可以计算角度本身。这是组合这些测量值的简单方法:

在收到的每个陀螺仪读数:

angle_radians+=gyro_reading_radians_per_sec * seconds_since_last_gyro_reading

在收到的每个加速度计读数:

angle_radians+=0.02 * (angle_radians_from_accelerometer - angle_radians)

0.02 常数用于调整 - 它选择噪声抑制和响应性之间的权衡(您不能同时拥有两者)。它还取决于两个传感器的准确性,以及接收新读数的时间间隔。

这两行代码实现了一个简单的一维(标量)卡尔曼滤波器。它假设

  • 与加速度计相比,陀螺仪的噪声非常低(大多数消费级传感器都是如此)。因此我们根本不对陀螺噪声建模,而是在状态转换模型中使用陀螺(通常用 F 表示)。
  • 通常以固定的时间间隔接收加速度计读数,并且加速度计噪声水平(通常为 R)是恒定的
  • angle_radians 已使用初始估计值初始化(f.ex 通过在一段时间内平均 angle_radians_from_accelerometer)
  • 因此估计协方差 (P) 和最佳卡尔曼增益 (K) 也是恒定的,这意味着我们根本不需要将估计协方差保留在变量中。

如您所见,这种方法被简化了。如果不满足以上假设,你应该学习一些卡尔曼滤波器理论,并相应地修改代码。

于 2013-12-04T04:19:13.077 回答
0

水平线为 G' * (u, v, f)=0 ,其中 G 是重力矢量,u 和 v 图像中心坐标和 f 焦距。现在传感器的优缺点:陀螺仪超级快速和准确但会漂移,加速度计不太准确但(如果已校准)具有零偏差并且不会漂移(除了重力没有加速度)。它们测量不同的东西——加速度计测量加速度,从而测量相对于重力矢量的方向,而陀螺仪测量旋转速度,从而测量方向的变化。要将其转换为方向,必须整合其值(幸运的是,它可以以 100-200 等高 fps 进行采样)。因此应该是线性的卡尔曼滤波器不适用于陀螺仪。现在我们可以将传感器融合简化为读数和预测的加权和。

您可以使用与数据方差成反比的权重组合两个读数 - 加速度计和集成陀螺仪和模型预测。您还必须偶尔使用指南针,因为加速度计并不能告诉您太多有关方位角的信息,但我想这与计算水平线无关。系统应该反应灵敏且准确,为此,每当方向快速变化时,陀螺仪的权重应该很大;当系统稳定下来并且旋转停止时,加速度计的重量将上升,从而允许更多地集成零偏差读数并消除陀螺仪的漂移。

于 2014-03-13T22:30:06.973 回答