时间:2021-09-30 08:57:19 | 栏目:Android代码 | 点击:次
方向传感器是算法生成的传感器之一,主要借助于磁场传感器的数据。
Android系统自带了方向传感器,不过系统5.0之后方法就被废除了(我们还是可以使用的,只是谷歌不推荐继续使用了)。谷歌提供了一套新的算法来作为替代,运用磁场传感器和加速度传感器来计算方向(可自行搜索调用方法)。
两种方法之间的优劣暂时无法判定,当然我们希望新方法的效果更好。由于没有具体研究两个算法之间的区别,根据我个人使用经验来说,效果应该差不多。
算法的抗干扰能力很弱
我不是要嘲讽谷歌,而是陈述一个事实。我们想象手机中有一个小小的指南针,玩过磁铁的朋友应该知道同性相斥、异性相吸,因此这个小指南针一旦遇到强磁干扰时就会失效。这是算法上的一大缺陷,也是难以克服的。而且市面上几乎所有的手机传感器都会遇到这样一个问题,包括苹果。
手机、电脑、铁制品等容易带磁性的物体,都会对手机的方向造成很大的干扰,一般来说保持合适的距离(手机电脑十五厘米以上,汽车一米以上),干扰就可以忽略不计。但是在车、电梯或者大型仪器设备附近及其内部,方向传感器就很难保持稳定了。
那么手机本身呢?手机本身也可以看作是强磁体,但由于硬件位置是固定的,我们可以把手机本身看作是静态干扰(也就是说干扰是个稳定的值),算出对应的值,做个补偿即可(实际上谷歌的算法中已经考虑到这点,所以并不需要我们多操心)。
一旦受到强磁干扰,此时的传感器在大部分情况下是很难做到自身调节并快速恢复正常的,我们可以拿着手机进行八字形回转来使磁场重新回到正确的值,前提是离开强磁体。
如何克服
合理运用手机的陀螺仪传感器有一定的可能性能降低磁场干扰,陀螺仪给出的是物体旋转时的角速度,理想情况下是正好与我们的方向传感器变化速度(也就是角速度)是一致的,二者相互结合相互印证,就能在一定程度上判断磁场是否受到干扰,可以有效降低手机方向的突变情况。这里提供一种可行的解决思路,具体怎么做,还需要探究。
总结