未校准的磁力计问题

Posted

技术标签:

【中文标题】未校准的磁力计问题【英文标题】:Uncalibrated Magnetometer Issues 【发布时间】:2015-02-01 17:31:00 【问题描述】:

我一直在使用 android 的校准磁力计,将其输入到我们的旋转矢量值算法中,以计算正确的偏航/北方向。尽管没有将偏航完全投射到与地面平行的平面上以获得独立于俯仰的真正偏航,但我们注意到即使在我们校准磁力计之后 - 使用校准的磁力计值并在图中移动手机八点和其他运动/方向 - 校准值似乎最终会尝试重新校准。

考虑到这一点,我们决定开始专门研究 Android 在我们的 JNI 代码中给出的未校准值。在结构“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 轴是给定的 y 值,而 y 轴是未校准的磁力计给出的 z 值 - 但是,这些轴是无关紧要的,因为它可以在所有轴上看到。在左下角,您会注意到一个“j”图形顺时针旋转了大约 150 度。这些“j”数字值是在数据收集开始时,持续了大约 20 秒。

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

我想我们开始推测我们并没有真正获得未校准/原始值。

提前致谢。

【问题讨论】:

【参考方案1】:

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

“工厂校准和温度补偿仍适用于磁场。”希望对您有所帮助!

【讨论】:

磁力计输出的磁场随温度等影响而变化。所以,它输出的不是真正的磁场,而是有点不同。例如,您将手机保持在磁场为 5 单位和传感器的位置,如果您通过运行某些应用程序等来增加手机的温度,而不改变手机的位置,则该值将变为 5.2。现在Android知道了磁场如何受温度影响的公式 虽然传感器为安卓系统提供了 5.2 个单位的值,但屏幕上仍然有 5 个单位。这是温度补偿。那个 android 仍然显示 5,因为它知道在高温下传感器会输出比 5 的实际值多 0.2。

以上是关于未校准的磁力计问题的主要内容,如果未能解决你的问题,请参考以下文章

在这种 scrnaroo 中无法校准连接到车辆的磁力计,如图 8 校准

iPhone 5 磁力计数据校准

存在永久磁场的磁力计校准

如何正确应用矢量磁力计的标量校准?

如何确定磁力计是不是需要校准 CoreMotion 参考系?

绝对磁轴编码器校准