我已经使用Android的校准磁力计一段时间了,将它输入我们的旋转矢量值算法,以计算与North的正确偏航/方向。尽管没有完全将偏航投射到与地面平行的平面上以获得与俯仰无关的真实偏航,但我们已经注意到即使在我们校准磁力计之后 - 使用校准的磁力计值并在图中移动手机8和其他运动/方向 - 校准值似乎最终会重新校准。
考虑到这一点,我们决定开始专门研究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秒之后一直持续相同,直到数据收集结束(持续约200s),并且在整个过程中有时是相同的。
我想我们开始猜测我们并没有真正获得未校准/原始值。
提前致谢。
答案 0 :(得分:2)
正如http://developer.android.com/guide/topics/sensors/sensors_position.html#sensors-pos-magunc
所述"工厂校准和温度补偿仍然适用于磁场。"希望它有所帮助!