Sensor.TYPE_ROTATION_VECTOR有漂移:有替代方案吗?

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

是否有另一种forms的传感器融合,它是无漂移的(使用磁传感器)? 我也试过了Google Cardboard的传感器融合,但是它使用了偏差估计,因此可能并非完全没有漂移(因为此时似乎没有使用磁场传感器),尽管仍然比TYPE_ROTATION_VECTOR好很多。

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

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

平台/硬件独立方法

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

一般方法包括:

  • 听取磁力计更改通知,随着时间的推移摊销。 这为您提供了设备方向更改的大幅更改。
  • 听取陀螺变化通知,随着时间的推移摊销。 这使您可以对设备方向更改进行微小更改。

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