旋转设备时磁场测量的奇怪行为

Mr.*_*ppy 6 android orientation magnetometer android-sensors indoor-positioning-system

情况:

我正在尝试通过指纹识别来建立一个室内定位系统,利用建筑物内部的磁场变化.作为传感器,我正在使用我的手机Galaxy Nexus.

基本上,获取指纹的想法是分别测量x,y和z方向的磁场,并通过移动的方向旋转矢量以将矢量带入世界坐标系.为了定位某人,他还测量磁场,旋转矢量并将其发送到我将运行我的定位算法的服务器.

我的问题:

当我在不同方向上测量同一点处的磁场时,在旋转矢量后我得不到相同的结果.即使场强也不一样.

为了表明这一点,我在同一位置进行了四次测量,并将手机绕其z轴(标准Android规格)逆时针旋转90度,180度和270度.结果可以在下面的"表格"和Matlab图表(点击链接)上看到(如果您想要其他观点让我知道)

编辑: 更确切地说:我真正做的是我定义了自己的坐标系,称为房间坐标系.我拿了房间的一面墙,把它定义为北面.我的手机的y轴外挂在那个墙上(在第一个位置),而它在桌子上是平的.因此,正z轴指向天空,x轴定义为90度的墙.以'Raw'命名的矢量是手机的原始值,因此它们位于手机的坐标系中.以"旋转"命名的Vector将旋转到"房间坐标系"中.在图中,虚线矢量是原始矢量,实心矢量是旋转矢量.

?????????????????????????????????????????????????????
? Vector      ?    X   ?   Y    ?    Z   ? Strength ?
?????????????????????????????????????????????????????
? 0°Raw       ?  17.55 ?   8.21 ? -36.83 ?  41.62   ?
? 0°Rotated   ?  17.55 ?   8.21 ? -36.83 ?  41.62   ?
? 90°Raw      ?  15.74 ? -11.36 ? -36.86 ?  41.66   ?
? 90°Rotated  ?  11.36 ?  15.74 ? -36.86 ?  41.66   ?
? 180°Raw     ? -65.06 ? -16.18 ? -44.79 ?  80.63   ?
? 180°Rotated ?  65.06 ?  16.18 ? -44.79 ?  80.63   ?
? 270°Raw     ?   6.38 ?  61.95 ? -46.37 ?  77.64   ?
? 270°Rotated ?  61.95 ?  -6.38 ? -46.37 ?  77.64   ?
?????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

正如您在旋转它们后所看到的那样,它们并不真正匹配.你知道为什么会这样吗?我还有什么可能没想过的?非常感谢提前!

编辑2:

第二个实验

我做了另一个实验,结果更好,但仍然没有我预期的那么好.这次方向并不像应该的那样恒定.这次我在室外进行测量.我将y轴向真正的北方移动,并将其平放在地面上.我逆时针旋转了大约3次90度.我用另一台相机拍了一张手机位置的照片,并用photoshop测量了真实的旋转.您可以在表格和下面的图表中看到结果:

?????????????????????????????????????????????????????
? Vector      ?    X   ?   Y    ?    Z   ? Strength ?
?????????????????????????????????????????????????????
? 0°Raw       ?   1.22 ?  20.31 ? -57.53 ?  61.02   ?
? 0°Rotated   ?   1.22 ?  20.31 ? -57.53 ?  61.02   ?
? 104°Raw     ?  25.92 ?   5.66 ? -57.53 ?  63.35   ?
? 104°Rotated ? -11.93 ?  23.70 ? -57.53 ?  63.35   ?
? 204°Raw     ?   5.42 ? -16.86 ? -59.67 ?  62.24   ?
? 204°Rotated ? -11.90 ?  13.12 ? -59.67 ?  62.24   ?
? 290°Raw     ? -12.18 ?   0.73 ? -57.85 ?  59.12   ?
? 290°Rotated ?  -3.64 ?  11.64 ? -57.85 ?  59.12   ?
?????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

补充说明:

这些值在几秒钟内取平均值.所以这不是噪音问题.

我知道我不能使用这个功能,getOrientation因为它使用磁场来计算方向,这是没有意义的,因为我想找到磁场的变化.对于上面的示例,我手动创建了旋转四元数.

Sto*_*lly 2

确保您通过该onAccuracyChanged(Sensor sensor, int accuracy)方法监控传感器的准确性。我发现我的 Nexus 10 平板电脑的准确度会定期变化,当准确度较低或不可靠时,我会得到与您类似的结果。