未校准的磁力计问题

Uncalibrated Magnetometer Issues

我已经使用 Android 的校准磁力计工作了一段时间,将其输入到我们的旋转矢量值算法中,以计算正确的 yaw/orientation 与北。尽管没有将偏航完全投射到与地面平行的平面上以获得与俯仰无关的真实偏航,但我们已经注意到,即使在我们校准磁力计之后——使用校准后的磁力计值并移动 phone 在八字形和其他 movements/orientations 中 - 校准值似乎最终会尝试重新校准。

考虑到这一点,我们决定开始专门研究 JNI 代码中 Android 给出的未校准值。在结构 "ASensorEvent" 中,有 "uncalibrated_magnetic",即结构 "AUncalibratedEvent" - 所有这些都在 "android/sensor.h" 中定义。我认为这会给我未校准的值;但是我错了 - 至少在我检查它的设备上 - 并给出了假定的校准值。因为在 "sensor.h" 中,唯一明确定义的传感器枚举是...

ASENSOR_TYPE_ACCELEROMETER      = 1,
ASENSOR_TYPE_MAGNETIC_FIELD     = 2,
ASENSOR_TYPE_GYROSCOPE          = 4,
ASENSOR_TYPE_LIGHT              = 5,
ASENSOR_TYPE_PROXIMITY          = 8

...我决定直接输入 14,假设这会给我未校准的磁力计值,因为这是与 JNI 外部的磁力计关联的值 http://developer.android.com/reference/android/hardware/Sensor.html#TYPE_MAGNETIC_FIELD 这给出了与 JNI 外部对应的未校准磁力计值。

所以,在这一点上,我们决定绘制给定的值,但我们注意到了一些奇怪的事情。

在这里,您可以看到 x-axis 是给定的 y-values,而 y-axis 是未校准磁力计给出的 z-values - 然而,轴是无关紧要的,因为它可以在所有轴上看到。在左下角,您会注意到一个 "j" 图形顺时针旋转了大约 150 度。这些 "j" 数字值是在数据收集开始时持续了大约 20 秒。

我们并不总是在我们的数据收集中看到这一点,但大约有 50% 的时间我们看到过这一点。我真的不知道这是什么。我的意思是我假设它不是一些奇怪的硬铁偏移,因为我想象这样的偏移接近大多数数据可见的偏移,我假设它不是 soft-iron 偏斜值,因为至少在 1 秒后直到数据收集结束(持续约 200 秒),环境始终相同,有时在整个跟踪过程中都是相同的。

我想我们开始推测我们并没有真正获得 uncalibrated/raw 值。

提前致谢。

写在http://developer.android.com/guide/topics/sensors/sensors_position.html#sensors-pos-magunc

"Factory calibration and temperature compensation are still applied to the magnetic field."希望对您有所帮助!