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

6

情况:

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

基本上,获取我的指纹的想法是分别测量x、y和z方向上的磁场并旋转向量以使其进入世界坐标系。要定位某人,他还需要测量磁场、旋转向量并将其发送到服务器,在那里我将运行我的定位算法。

我的问题:

当我在不同的方向上在同一位置测量磁场时,在旋转向量后得到的结果并不相同。甚至磁场强度也不同。

为了证明这一点,我在同一位置进行了四次测量,并分别将手机沿着z轴(Android标准规范)逆时针旋转90度、180度和270度。 可以在下面的“表格”和Matlab绘图上看到结果(如果您想要其他视图,请告诉我)

编辑: 更确切地说,我定义了自己的坐标系,称之为“房间坐标系”。我取了房间的一面墙,并将其定义为北。我的手机的y轴与该墙垂直(在第一个位置上)并且放平在桌子上。因此,正z轴指向天空,x轴定义为90度的墙壁。 以“Raw”命名的向量是手机上原始值,因此它们在手机的坐标系中。以“Rotated”命名的向量已经旋转到“房间坐标系”中。在图中,虚线向量是原始向量,实线向量是旋转后的向量。

╔═════════════╦════════╦════════╦════════╦══════════╗
║ Vector      ║    X   ║   Y    ║    Z   ║ Strength ║
╠═════════════╬════════╬════════╬════════╬══════════╣
║ 0°Raw       ║  17.558.21-36.8341.62   ║
║ 0°Rotated   ║  17.558.21-36.8341.62   ║
║ 90°Raw      ║  15.74-11.36-36.8641.66   ║
║ 90°Rotated  ║  11.3615.74-36.8641.66   ║
║ 180°Raw     ║ -65.06-16.18-44.7980.63   ║
║ 180°Rotated ║  65.0616.18-44.7980.63   ║
║ 270°Raw     ║   6.3861.95-46.3777.64   ║
║ 270°Rotated ║  61.95-6.38-46.3777.64   ║
╚═════════════╩════════╩════════╩════════╩══════════╝

enter image description here enter image description here

您可以看到,即使旋转它们,它们仍然不完全匹配。您有任何想法为什么会这样吗?我可能还没有考虑到的事情吗? 非常感谢您提前的帮助!

编辑2:

第二次实验

我进行了另一个实验,结果比上次好得多,但仍不如我预期的那么好。这次方向并不像应该那样恒定。 这次我在户外进行了测量。我将y轴对准真正的北方并将其放在地面上。我大致逆时针旋转了3次90度。我用另一台相机拍摄了手机的位置,并使用Photoshop测量了实际旋转角度。您可以在下表和图中看到结果:

╔═════════════╦════════╦════════╦════════╦══════════╗
║ Vector      ║    X   ║   Y    ║    Z   ║ Strength ║
╠═════════════╬════════╬════════╬════════╬══════════╣
║ 0°Raw       ║   1.2220.31-57.5361.02   ║
║ 0°Rotated   ║   1.2220.31-57.5361.02   ║
║ 104°Raw     ║  25.925.66-57.5363.35   ║
║ 104°Rotated ║ -11.9323.70-57.5363.35   ║
║ 204°Raw     ║   5.42-16.86-59.6762.24   ║
║ 204°Rotated ║ -11.9013.12-59.6762.24   ║
║ 290°Raw     ║ -12.180.73-57.8559.12   ║
║ 290°Rotated ║  -3.6411.64-57.8559.12   ║
╚═════════════╩════════╩════════╩════════╩══════════╝

enter image description here enter image description here

附加说明:

这些值是在几秒钟内平均的。因此,这不是噪声问题。

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


你在哪里测试?室内?户外?上面的数字使用什么坐标系?设备坐标系? - Hoan Nguyen
无论是室内还是室外,磁场应该都是一样的,对吧?我的意思是只要位置相同,传感器的方向不同也应该是相同的磁场。只有方向会改变。如果存在干扰(因为在室内可能会有干扰),那么在这个位置上磁场应该保持不变。或者我错了吗? - Mr.Floppy
它看起来有点像传感器在某些方向上更敏感。 - Mr.Floppy
我知道。这就是为什么我旋转了向量的原因。以“raw”命名的向量是设备坐标系中的原始值。 将它们通过设备的旋转旋转后,您会得到一个世界坐标系中的向量,我将其命名为“rotated”。 请查看我使用Matlab制作的图。旋转的是实心的,原始值是虚线的。为了区分向量,我用相同的颜色对它们进行了着色。 - Mr.Floppy
明天我会出去尝试同样的事情,但是在那里我没有太多的磁性影响。首先我需要找到真正的北极:D 我会尽快更新我的帖子。在此期间感谢! - Mr.Floppy
显示剩余8条评论
1个回答

2

请确保通过onAccuracyChanged(Sensor sensor, int accuracy)方法监测传感器的准确性。我发现在我的Nexus 10平板电脑上,准确性经常变化,当它低或不可靠时,我得到和你类似的结果。


第一个小测试表明你是正确的。它经常变化,所以可能是问题所在。明天或后天我将只使用高精度数据来测试所有内容。我会告诉你结果。谢谢! - Mr.Floppy
非常感谢!我认为这就是解决方案! 我进行的第一次测试表明,如果我只使用最高精度的传感器数据,结果会更好! 但同时也表明,磁场精度经常变化,很难得到好的测量结果。 你知道如何提高磁场传感器的精度吗?我的意思是不移动我的设备在8字形? 或者你知道是什么导致了不准确性吗? - Mr.Floppy
我正在向谷歌投诉这个问题。我有一台Nexus 10,我认为我已经向他们证明了我退回的设备中的磁传感器不可靠。他们最近的回复是:“潜在的误导信息是HAL报告SENSOR_STATUS_UNRELIABLE,实际上它应该是SENSOR_STATUS_ACCURACY_LOW。一旦Nexus 10移动,准确性就会降至0(不可靠)。一旦平板电脑停止移动,它就会回到3(高)。”这仍在进行中,所以不确定最终结果会是什么! - Stochastically
听起来真的很奇怪。对于我的设备(Galaxy Nexus),情况有些不同。对我来说,很难在SENSOR_STATUS_ACCURACY_HIGH上获得测量结果。通常我会得到SENSOR_STATUS_ACCURACY_MEDIUM或SENSOR_STATUS_ACCURACY_LOW。即使我把手机移动成8字形。如果我得到SENSOR_STATUS_UNRELIABLE,它通常很快就会变成MID或LOW。你的投诉是否公开可见?例如在论坛上?这对我来说可能很有趣。 - Mr.Floppy
那太好了!祝你的设备好运,再次感谢! - Mr.Floppy
显示剩余2条评论

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