使用卡尔曼滤波的传感器融合

16

我很感兴趣,传感器融合系统中的双重输入在卡尔曼滤波器中如何建模?

举个例子,如果您有一个加速度计和陀螺仪,并希望呈现“水平线”,就像飞机上的演示一样,可以在这里看到一个很好的演示。

实际上,您如何收集两个传感器的正面属性并最小化其负面作用?

这是否在观测模型矩阵(通常由大写H表示)中进行建模?


备注:这个问题还在math.stackexchange.com上被问到,但没有回答。

3个回答

19
通常,传感器融合问题源自贝叶斯定理。实际上,您会发现您的估计值(在本例中为地平线水平)将是传感器的加权总和,其由传感器模型表征。对于双重传感器,您有两个常见选择:建立一个双重传感器系统,并针对每个传感器导出卡尔曼增益(使用系统模型作为预测因子),或者使用不同的观测模型运行两个修正阶段。您应该查看贝叶斯预测器(比卡尔曼滤波器更通用),它是精确从两个不同信息源给出的估计方差最小化导出的。如果您有一个加权总和,并且在两个传感器的情况下最小化总和的方差,则可以得到卡尔曼增益。
传感器的特性可以在过滤器的两个部分“看到”。首先,您拥有用于观测的误差矩阵。这是代表传感器观察中的噪声的矩阵(假定为零均值高斯噪声,这不是太大的假设,因为在校准期间,您可以实现零均值噪声)。
另一个重要的矩阵是观测协方差矩阵。此矩阵为您提供有关传感器提供信息的好坏程度的洞察力(信息意味着某些“新”的,不依赖于其他传感器读数)。
关于“收集良好特性”,您应该对传感器进行良好的校准和噪声表征(拼写正确吗?)。让卡尔曼滤波器收敛的最佳方法是为传感器拥有良好的噪声模型,而这是100%的实验性工作。尝试确定系统的方差(不要总是相信数据表格)。
希望这能有所帮助。

谢谢,我没想到会有人回复这个帖子。这解决了一些问题。 - Theodor
除了过程噪声和测量噪声矩阵之外,您知道如何建模状态转移“H”和测量矩阵吗? - villoren
我正在研究你提到的双传感器的两种选择:(1)建立一个双传感器系统并为每个传感器推导卡尔曼增益,以及(2)使用不同的观测模型运行两个校正阶段。因此,这两种选择之间的区别在于,在(1)中,您同时处理来自两个传感器的读数,而在(2)中,您按顺序处理两个传感器,并将双传感器系统视为一步骤中的两个单传感器系统。或者我是否过于简化了这个问题? - AndroC

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已经通过初始估计进行了初始化(例如通过在某段时间内对angle_radians_from_accelerometer求平均值)。
因此,估计协方差(P)和最优卡尔曼增益(K)也是恒定的,这意味着我们根本不需要将估计协方差保存在变量中。
正如您所看到的,这种方法是简化的。如果上述假设不成立,则应学习一些卡尔曼滤波器理论,并相应地修改代码。

angle_radians += 0.02 * (angle_radians_from_accelerometer - angle_radians)会导致当手机静止时(陀螺仪=0,0,0,加速度计=重力向量)方向的不断变化。 - Vlad
你为什么这样认为?如果手机处于静止状态,那么从加速度计得出的弧度角应该是恒定的(加上波动噪声),这意味着弧度角应该趋向于同一个常数,并在那里停止。 - Ahti
陀螺仪在短期内虽然准确,但在长期内会漂移得非常厉害。尝试在集成时将手机来回旋转。即使你撤销了所有旋转,你也永远不会得到零角度。换句话说,陀螺仪具有低方差但高偏差。因此,应该将其用于增加响应性,但在其他情况下忽略它。 - Vlad
很好。感谢Google,现在我们不再需要担心这个问题了,因为他们现在有一个虚拟方向传感器,可以很好地融合所有姿态传感器。 - Vlad

0

水平线是 G' * (u, v, f)=0,其中 G 是重力向量,u 和 v 是图像中心坐标,f 是焦距。现在传感器的优缺点:陀螺仪超快超准确,但会漂移;加速度计精度较低,但(如果校准)没有偏差且不漂移(除了重力加速度以外)。它们测量不同的东西 - 加速度计测量加速度,因此相对于重力向量的方向,而陀螺仪测量旋转速度,因此改变方向。要将其转换为方向,必须积分其值(幸运的是,它可以以高帧率采样,如100-200)。因此,卡尔曼滤波器被认为是线性的,不适用于陀螺仪。目前,我们只能将传感器融合简化为读数和预测的加权和。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接