mark下,电脑上来回答。
—————————————————-
手机要想得到compass的值需要由三个sensor来确定,accel, gyro, magnetic。
accel可以判断重力感应的放心,来确定手机所在的三个轴向XYZ

手机指南针校正为什么要绕 8 字?插图

(用小画家画的。。。。能讲明白事情就好,别在意画工。。。)
gyro可以判断出机器在三个轴向的转动。
magnetic可以判断出在三个轴向的磁感应量。这个值并不是我们所能直观看懂的compass的值。
那么通过orientation的设置,使机器能够知道XYZ三个方向哪个是指北的。
一般机器在打开compass的application时只有知道自己的orientation和default offset。这时候就需要各位转动手机。虽然是说的8字,但是其实是想让你把三个轴向都转一转这样在每个轴向会形成一个螺旋线的球体(我用小画家画不出来,大家脑补,或者换个时间我去弄个图来)。这个就是周围的磁场。在这一刻传感器就开始计算当前的三个轴向offset并加以纠正,加上适当的补偿值。如此你就可以得到准确的北。并且通过gyro和magnetic共同计算就可以知道你在水平方向的旋转度数,这样你除了东西南北还能知道其他方向的角度(东西南北对应的是-X,+X,-Y,+Y,比较好算,转过这些点就要混合计算了。)如果算法足够先进,再加上accel的判断就可以计算出机器是否是在倾斜的状况下旋转并计算出compass的值。

所以你可以把手机拿好了,然后默默的沿着图示的三个轴各转三圈,一样能达到效果。

— 完 —

本文作者:engos

【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)

此问题还有 3 个回答,查看全部。
延伸阅读:
如何使用指南针?
智能手机上的指南针应用是靠什么原理实现的?

分享到