2

我正在尝试结合来自加速度计和陀螺仪的数据来准确测量物体的俯仰角和偏航角。在研究了互补过滤器并尝试实现它之后,我对它的工作原理有几个问题。

我读过如果有很多角运动,过滤器“信任”陀螺仪数据,如果物体稳定,它“信任”加速度计数据。

http://www.pieter-jan.com/node/11 在这篇文章中,互补过滤器是这样描述的:

*角度 = 0.98(角度 + 陀螺数据 * dt) + 0.02*(accData)*

对我来说,似乎陀螺仪数据受到青睐。在下图中,http ://www.pieter-jan.com/images/resize/Complementary_Filter.png 位于页面底部,过滤后的数据似乎与加速度计数据“保持接近”,即使陀螺仪数据漂移。当计算表明陀螺仪数据受到青睐时,我不明白为什么会发生这种情况。我在其他照片中也观察到了这一点。在我自己的测试中,我需要“交换”0.98 和 0.02,这表明加速度计数据受到青睐,以获得类似的结果。我是否完全误解了这个过滤器的工作原理?“偏爱”加速度计数据是否正常?

再者,当需要长时间监测一个物体的角度时,陀螺仪数据岂不是因为漂移太大而变得毫无用处,滤波器是如何补偿的呢?

4

2 回答 2

0

我正在尝试做类似的事情。我正在使用 LSM9DS0 传感器在我的 Arduino 代码中实现一个互补滤波器(它具有内置的陀螺仪/加速度计https://www.adafruit.com/product/2021

我一直在玩一个过滤器值和一个我正在尝试使用的校准方法,但我似乎无法 100% 摆脱它。角度总是有很小的偏差,我永远无法获得没有错误的 100% 过滤角度。

于 2018-05-30T20:17:49.127 回答
0

我意识到我哪里出错了。我基本上只使用陀螺仪数据计算了角度,并在过滤器中使用了它。IE

GyroAngle += d°/s * time_between_cycles
FilteredAngle = 0.98*GyroAngle + 0.02*AccelerometerAngle

相反,我应该一直这样做:

FilteredAngle = 0.98*(FilteredAngle + d°/s * time_between_cycles) + 0.02*AccelerometerAngle

这样做已经产生了更好的结果

于 2017-03-04T19:44:02.540 回答