手机陀螺仪漂移问题

13
许多帖子都在谈论陀螺仪漂移问题。有些人说陀螺仪读数存在漂移,但是其他人则说积分存在漂移。
  1. 原始陀螺仪读数存在漂移[link]
  2. 积分存在漂移[link](答案1)。
因此,我进行了一个实验。下面的两幅图是我得到的结果。下面的图表明陀螺仪读数根本没有漂移,但存在偏移。由于偏移,积分效果很差。所以似乎积分才是漂移的原因,对吗? enter image description here 下一个图显示当偏移减小时,积分根本没有漂移。 enter image description here

另外,我进行了另一个实验。首先,我将手机静置在桌子上约10秒钟。然后将其向左旋转再恢复到原位。接着向右旋转再恢复到原位。下图很好地说明了角度。我所使用的只是减小偏移量然后进行积分。

enter image description here

所以,我在这里遇到的大问题可能是偏移量是陀螺仪漂移(积分漂移)的本质?在这种情况下,可以应用互补滤波器或卡尔曼滤波器来消除陀螺仪漂移吗?

感谢任何帮助。

5个回答

17
如果陀螺仪读数出现“漂移”,它被称为偏差而不是漂移。漂移是由于积分引起的,即使偏差确切地为零,漂移也会发生。漂移是因为您通过积分累积了读数的白噪声。对于漂移抵消,我强烈推荐方向余弦矩阵IMU理论手稿,我已经基于此为Shimmer 2设备实现了传感器融合。(编辑:该文档来自MatrixPilot项目,该项目已经转移到Github,并可以在那里的下载部分找到。) 如果您坚持使用卡尔曼滤波器,请参见https://stackoverflow.com/q/5478881/341970。但是,为什么要自己实现传感器融合算法呢?Android(SensorManager下的Sensor.TYPE_ROTATION_VECTOR)和iPhone(Core Motion)都提供了自己的算法。

非常有帮助,谢谢!实际上,我对白噪声了解很少,从第三张图中看来,白噪声似乎对积分的影响不大,是吗?那么漂移是否真的是一个严重的问题呢? - Allen Jee
如果你收集了一个小时的数据,你会发现偏差在波动。否则,我建议阅读《方向余弦矩阵IMU:理论手稿》,它将让你清楚地了解这个问题。它基本上是一个教程。祝你好运! - Ali
1
对于 Android,Sensor.TYPE_ROTATION_VECTOR 似乎没有在所有设备上实现(在运行 Cyanogenmod 的 OnePlus One 上我从未收到任何事件)。还有一个已弃用的 Sensor.TYPE_ORIENTATION,以及使用加速计和磁力计读数计算滚转、俯仰和偏航的 API 函数。然而,我的经验是,在两个不同的设备上尝试从两个传感器获取偏航值后,精度介于普通和可怕之间,这取决于设备。 - user149408
1
@Ali,我一直在尝试理解你关于白噪声漂移的说法。所谓漂移,是指当陀螺仪处于静止状态时,其积分输出单调递增或递增。如果陀螺仪输出中的噪声(由于热振动)是真正的白噪声,则根据定义,它的均值为零。当你对此进行积分时,你会得到随机游走噪声,这也具有零均值。因此,陀螺仪积分输出具有时间递增的方差,但在静止时实际上不能漂移 - 我有什么遗漏吗? - Ezequiel Garcia
1
@Bendemann 是的,情况就是这样。你不必自己进行传感器融合。 - Ali
显示剩余7条评论

2
亲爱的Ali写了一些非常值得怀疑和不精确(错误)的东西。
漂移是偏差的积分。当你进行集成时,它是偏差的可见“效果”。任何类型的零均值静态噪声都具有零积分(我不是在谈论PSD的积分,而是信号中的加性噪声随时间积分)。
偏差随电压和运动温度变化而变化。例如,如果电压发生变化(并且它会发生变化),偏差也会发生变化。偏差既不是固定的也不是“可预测的”。这就是为什么您不能使用所提议的估计偏差减去信号来消除偏差的原因。任何估计都会有误差。这个误差会随时间累积。如果误差较小,则累积效应(漂移)在更长的时间间隔内变得可见,但它仍然存在。
理论上说,目前不可能完全消除偏差。在现有技术水平下,还没有人找到只基于陀螺仪和加速度计磁力计就能过滤掉所有偏差的方法。
Android 和 iPhone 对于消除偏差的算法实现是有限的。它们并不能完全消除偏差的影响(例如在小间隔内)。对于某些应用程序,这可能会导致严重问题和不可预测的结果。

3
“噪音 - 任何一种均值为零的平稳噪音,都具有积分为零。”您是否熟悉“随机游走”的概念?换句话说,如果您抛100次硬币,根据您的逻辑,我会得到正好50个正面和50个反面。你看到问题了吗?我建议您修订您的答案。 - Ali
他可能指的是积分的平均值也为零。漂移是过程中的系统倾向。我不是在这方面的专家,但我没有看到任何补偿积分噪声的方法。另一方面,可以通过检测持续时期的近零角加速度来进行即时重新校准,以取消集成偏差。 - Pavel Bazant

1
受到Ali回复的启发(谢谢Ali!),我进行了一些阅读和数值实验,并决定发布自己关于陀螺漂移本质的回复。
我编写了一个简单的Octave在线脚本,绘制白噪声和积分白噪声:

enter image description here

显示在问题中的减小偏移角度图似乎类似于典型的随机游走。数学上的随机游走具有零均值,因此不能被视为漂移。然而,我相信白噪声的数值积分会导致非零均值(如下面随机游走的直方图所示)。这与线性增加的方差一起可能与所谓的陀螺漂移有关。
陀螺仪和加速度计产生误差的介绍可以在这里找到。无论如何,我仍有很多需要学习的地方,所以我可能是错误的。
关于互补滤波器,这里有一些讨论,展示了它如何减少陀螺漂移。文章非常不正式,但我觉得很有趣。

1
在这个讨论中,Ali和Stefano都提出了由于理想积分而导致漂移的两个基本方面。基本上,零均值白噪声是一个理想化的概念,即使对于这样的理想噪声,积分也比低频噪声成分具有更高的增益,这会在集成信号中引入低频漂移。根据理论,如果长时间观察零均值噪声,则不应引起任何漂移,但实际上理想的积分永远不起作用。
另一方面,即使读数(输入信号)中存在微小的直流偏移,如果对其进行理想的积分(无损求和),则随着时间的推移可能会引起显着的漂移。它可以在系统中逐渐积累非常小的直流偏移,因为理想的积分在输入信号的DC组分上具有无限增益。因此,为了实际目的,我们通过低通滤波器替代理想积分,其截止频率可以尽可能地低,但不能为零或过低。

1
“理论上,如果在足够长的时间内观测到零均值噪声,它不应该引起任何漂移。”你是否熟悉随机游走的概念?我建议您重新审查您的答案。 - Ali
我同意会有像随机漫步一样的波动,但如果噪声是“真正”的零均值噪声,并且我们观察足够长的时间,理想情况下直到无限,积分信号应该显示出相等量的波动。然而,没有模拟的随机噪声是理想的零均值噪声,因此在实践中甚至在模拟中,我可以预期一些漂移(喜欢Ezequiel的模拟)。在短时间尺度上,我们可以看到信号漂移,但在足够长的时间尺度上,它显然会在零附近波动,而不是持续地远离零。 - abhijit

0
术语“陀螺仪漂移”通常用来描述导致积分漂移的陀螺偏差。陀螺测量中存在各种错误类型。最常见的是噪声和偏差。噪声几乎总是被假设为白噪声(除非你真的在进行陀螺设计,那么这个答案就无关紧要了)。偏差可以有一个恒定项(在单次上电期间恒定,而非终身),以及一个(大部分情况下不可预测的)移动偏差(有时称为不稳定性)。
卡尔曼滤波器可用于估计和消除一些偏差。这个量取决于噪声、偏差不稳定性和测量质量。KF还将(尝试)修正您的角度误差。
互补滤波器用于消除积分中的漂移,而不是估计传感器误差。
我想对之前的回答进行扩展,并修正一些误导性的陈述。
Ali提到(我在这里进行了改述)“由于白噪声的整合,期望的角度误差会增加”。这是不准确的。假设我们手头上有一个一维旋转问题,由于白噪声的整合,期望误差为0(期望值=均值)。然而,标准差确实是单调变化的。这是一个重要的区别,卡尔曼滤波器在没有这个区别的情况下无法工作。Stefano是正确的。
请注意,我指定了一个一维限制。三维是一个不同的问题,但期望值仍然应该为0。
偏差问题完全取决于您的传感器。低质量的传感器往往会出现“偏差漂移”或“偏差稳定性”(不稳定性或您想称之为的其他原因)。也就是说,偏差值会随着时间的推移而变化(由于各种原因),这种变化在其幅度和变化速度上都相当显著。另一方面,非常高质量的传感器会尽量将这种变化降至最低,以便我们有一个恒定的偏差(作为主导项)。这在运行时更容易估计和纠正。
请注意,任何你能够找到的陀螺仪都是低质量的传感器。以至于我们甚至不提及地球的自转(约为每小时15.04度)。

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