Sensor.TYPE_ROTATION_VECTOR 有偏差:有替代方案吗?

Sensor.TYPE_ROTATION_VECTOR has drift: Is there an alternative?

我正在 Android 上试用 Sensor.TYPE_ROTATION_VECTOR。它应该使用磁场传感器、加速度计和陀螺仪来始终提供准确的旋转。但是,我注意到 Moto G 2nd 发生了巨大的漂移。我想知道这是否是一个特定于设备的问题,或者这是否发生在很多手机上(我会假设,虽然我很熟悉 Moto G 2nd 是陀螺仪的问题案例)。

有无漂移(使用磁传感器)的传感器融合的替代形式吗?我也尝试过 Google Cardboard 的传感器融合,但它使用偏差估计,所以大概不是完全自由漂移(因为此时似乎没有使用磁场传感器),尽管仍然比 TYPE_ROTATION_VECTOR.

https://play.google.com/store/apps/details?id=org.hitlabnz.sensor_fusion_demo 有一些我刚刚找到的方便的替代方法。我仍然需要测试哪种融合会导致最稳定的结果。 来源:https://bitbucket.org/apacha/sensor-fusion-demo/src .

其中很多也表现出漂移;特别是那些使用陀螺仪的。

Platform/Hardware独立方法

  1. 陀螺仪,根据定义,总是漂移。
  2. 根据定义,磁力计缺乏精度(*)。
  3. 就检测设备位置而言,加速度计没有任何价值。

一般方法包括:

  • 收听磁力计变化通知,随着时间的推移进行摊销。这会给您带来 设备方向变化。
  • 收听陀螺仪变化通知,随着时间的推移进行摊销。这给你 设备方向变化的变化。

(*) 在笛卡尔物理世界中,磁力计应该足够了,但在地球人的宇宙中,你需要用磁力计来弥补磁力计更新频率、精度和外部因素的不足陀螺仪,提供即时反馈。