手机要想得到compass的值需要由三个sensor来确定,accel, gyro, magnetic。accel可以判断重力感应的放心,来确定手机所在的三个轴向XYZgyro可以判断出机器在三个轴向的转动。magnetic可以判断出在三个轴向的磁感应量。这个值并不是我们所能直观看懂的compass的值。那么通过orientation的设置,使机器能够知道XYZ三个方向哪个是指北的。一般机器在打开compass的application时只有知道自己的orientation和default offset。这时候就需要各位转动手机。虽然是说的8字,但是其实是想让你把三个轴向都转一转这样在每个轴向会形成一个螺旋线的球体(我用小画家画不出来,大家脑补,或者换个时间我去弄个图来)。这个就是周围的磁场。在这一刻传感器就开始计算当前的三个轴向offset并加以纠正,加上适当的补偿值。如此你就可以得到准确的北。并且通过gyro和magnetic共同计算就可以知道你在水平方向的旋转度数,这样你除了东西南北还能知道其他方向的角度(东西南北对应的是-X,+X,-Y,+Y,比较好算,转过这些点就要混合计算了。)如果算法足够先进,再加上accel的判断就可以计算出机器是否是在倾斜的状况下旋转并计算出compass的值。
绕8字可以让你的手机上电子罗盘的传感器收集到不同方向的地磁参数,所以要求你尽量让设备的法线指向一个立体空间的所有8个象限,然后根据其反馈回来的数值计算方向,这样的数据来源比较准确。其实不绕8字,把手机向各个方向颠来侄倒去,也可以完成校准过程。