传感器与卡尔曼滤波器融合

时间:2010-10-19 07:44:21

标签: filter sensor fusion kalman-filter

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

比如假设你有一个加速度计和一个陀螺仪,想要呈现“地平线”,就像在飞机上一样,这里有一个很好的演示。

你如何实际收获两个传感器的正面特性并最大限度地减少负面影响?

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


备注:此问题在math.stackexchange.com

时也没有任何答案

3 个答案:

答案 0 :(得分:19)

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

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

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

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

希望有所帮助。

答案 1 :(得分: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常数用于调整 - 它选择噪声抑制和响应之间的权衡(你不能同时拥有两者)。它还取决于两个传感器的准确度,以及接收新读数的时间间隔。

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

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

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

答案 2 :(得分:0)

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

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