未校准的磁力计问题

3
我已经使用Android的校准磁力计一段时间,并将其输入到我们的旋转向量值算法中,以计算正确的偏航/方向与北极的角度。尽管我们处理了未完全投影偏航到与地面平行的平面以获得真正独立于俯仰的偏航的问题,但我们注意到即使在校准磁力计之后,使用校准磁力计值并移动手机进行八字形和其他运动/方向时,校准值似乎最终会尝试重新校准。
考虑到这一点,我们决定开始专门查看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轴是给定的y值,y轴是给定的z值 在这里,您可以看到x轴是未校准磁力计给出的y值,y轴是未校准磁力计给出的z值 - 然而,轴是无关紧要的,因为它可以跨所有轴看到。在左下角,您会注意到一个“j”形大约顺时针旋转150度。这些“j”形值在数据收集开始时持续了大约20秒。
我们的数据收集中并不总是出现这种情况,但大约有50%的时间会出现。我真的不知道这是什么。我的意思是,我假设这不是一些奇怪的硬铁偏移,因为我想象这样的偏移接近于大多数数据可见的偏移,并且我认为它不是软铁偏斜值,因为环境至少在1秒钟后一直保持一致,直到数据收集结束(持续约200秒),有时整个跟踪过程环境都是相同的。
我想我们开始猜测我们并没有真正获得未校准/原始值。
提前感谢您。
1个回答

2

磁力计输出的磁场会受温度和其他影响而改变。因此,它所输出的并不是真正的磁场,而是略有不同。例如,当你将手机放置在磁场为5单位的位置,并且如果你通过运行一些应用程序等方式提高手机的温度而没有改变手机的位置,那么该值将会变为5.2。现在Android知道了磁场如何受温度影响的公式。 - Kushal Kumar
尽管传感器向Android系统提供了5.2个单位的值,但屏幕上仍显示5个单位。这就是温度补偿。Android仍然显示5,因为它知道在高温下,传感器输出的值会比5的实际值多0.2。 - Kushal Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接