情况:
我正在尝试使用指纹识别技术,通过测量建筑物内部的磁场变化来创建一个室内定位系统。作为传感器,我正在使用我的手机——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.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 ║
╚═════════════╩════════╩════════╩════════╩══════════╝
您可以看到,即使旋转它们,它们仍然不完全匹配。您有任何想法为什么会这样吗?我可能还没有考虑到的事情吗? 非常感谢您提前的帮助!
编辑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 ║
╚═════════════╩════════╩════════╩════════╩══════════╝
附加说明:
这些值是在几秒钟内平均的。因此,这不是噪声问题。
我知道不能使用函数getOrientation
,因为它使用磁场来计算方向,但这没有意义,因为我想找到磁场的变化。对于上面的示例,我手动创建了旋转四元数。