首先,我要感谢你们开源了如此完整和优化的传感器融合库。
设置:
我正在微控制器(没有 RTOS)上运行您的传感器融合库,利用来自不同供应商的加速度计和陀螺仪。我特别使用了 fRun_3DOF_G_BASIC 和 fRun_6DOF_GY_KALMAN 函数。我创建了一个程序,该程序可在 PC 上运行,并显示一个 3D 立方体,该立方体根据 MCU 计算出的四元数方向改变方向,并通过 Wifi 发送到 PC。
问题
在使用 fRun_3DOF_G_BASIC 函数时,立方体表现正常,但在使用 fRun_6DOF_GY_KALMAN 的后向四元数"fqPl" 时,立方体在下颚(Z 轴)上的表现却很奇怪。最初,如果我们把传感器静止地放在桌子上,它不会发生漂移(立方体不会在 Z 轴上旋转),但当我们移动或摇晃它时,即使我们把传感器再次放在桌子上,它也会开始在 Z 轴上快速旋转。然后,如果我们倾斜传感器,旋转速度就会降低。
调试代码时,我发现协方差矩阵 P+"fPPlus9x9[9][9]" 的元素 [2][2] 增加得非常快,而当我倾斜传感器时,它就会减小。
问题
我不是这方面的专家,但我猜这种在 Z 轴上的持续旋转是由于陀螺仪的偏差和漂移(在卡尔曼之前没有校准)造成的,因为当传感器与工作台平行时,加速度计无法提供补偿 Z 轴(偏航)的信息。这是 6 轴陀螺仪/Acc Fusion 配置的限制吗?
此外,我还想知道代码中包含的卡尔曼常数(卡尔曼滤波器噪声方差、Qw 协方差矩阵初始化、线性加速时间常数)是否对这一问题有影响,因为尽管我使用了其他传感器,却没有更改这些常数,因为我在数据表上找不到类似的值。
非常感谢!
真诚的
卡洛斯
您提到您没有使用飞思卡尔硬件。 您能否与运行在 Windows 系统上的传感器融合工具箱通信? 它专门用于帮助识别这类问题。 您可以实时查看传感器和过滤器的输出,这有助于追踪问题。 没有它,你可能会盲目飞行。
你不应该像现在这样重新初始化卡尔曼滤波器。 我建议投资购买 FRDM-KL26Z 加上新的 FRDM-STBC-AGM01 9 轴传感器板,这样你就可以运行其中一个固定项目,看看它应该如何运作。
此致,
Mike
非常感谢你的及时回复,这对我非常有用。我的应用程序存在的问题是卡尔曼滤波器持续预测偏航的旋转幅度很大,导致三维立方体以每秒多次旋转的速度持续旋转,因此我通过每 50 次迭代重新初始化卡尔曼滤波器使其停止来解决这个问题、但在达到第 50 次迭代之前,IMU 静止时仍会有少量旋转,更重要的是,旋转 IMU 很难使立方体沿 Z 轴的一个方向旋转(较小的旋转),而沿 Z 轴的另一个方向(即漂移方向)旋转(正常旋转)则更容易。我想知道这种巨大的漂移是否是双重整合的产物?我想总会有一些漂移,但不会太大,因为我已经看到利用 madgwick 滤波器可以很好地解决这个问题,否则 6DOF Acc/Gyro 卡尔曼滤波器的偏航信息即使在简单的应用中也将毫无用处。但我找不到我做错了什么。我已经下载了新版本的融合库,我看到它有更多的文档,这对我非常有用,谢谢!=)
卡洛斯
你说得对。 如果您使用的是 6 轴加速度+磁场滤波器,而 X、Y 或 Z 传感器轴中的任何一个轴都与重力对齐,那么滤波器中就没有新的信息来帮助修正陀螺仪的偏移估计值。 当你倾斜设备时,你在该轴的计算中引入了新的信息,然后它开始校正。这正是我们在九轴融合中加入磁力计的原因。
您可以通过调整各种常量来提高性能,但我们发现这些代码可以很好地按原样移植到其他传感器上。
如果您还没有使用,可以试试我上周末在本空间发布的 5.00 版新程序库。 它是专门为改善偏航漂移而重新设计的。
此致,
Mike