3a95bd8407958ba03b98da9f213eb55b
指南针在 AR 中的使用注意事项

在 AR 中使用指南针

在 AR 中使用指南针主要有三种方式:

  • CoreMotion:可以获取加速度计、陀螺仪、磁力计、重力感应等信息,可以指定更新间隔时间。
  • CoreLocation:不仅可获取磁北,还可与 GPS 结合获取真北,缺点是更新频率不如 CoreMotion。
  • ARKit:在ARConfiguration的子类中,指定ARConfiguration.WorldAlignment.gravityAndHeading就可以让 ARKit 启动后,场景自动指向真北

对于 AR 开发来说,最简单又好用的方式就是用 ARKit 自带的功能,但是有些场景下,我们不能随意改动 rootNode 的朝向,或者因为使用了其他定位技术,需要在 AR 启动后,再去更改朝向问题,就必须要自己用CoreMotion或者CoreLocation来实现指南/指北功能了。

精度与刷新问题

苹果在开发文档中,给出指南针的精度是 15 度,因此不管用什么方式,都必然存在一定误差。在CoreLocation中会同时返回heading的误差,经过测试,一般给出的在 7 度左右。但实际肉眼观察,这个值也并不是太准确,尤其是在室内,只能做为参考。经验上,一般最大误差在± 40 度左右,也就是说只能大概指出北方,iPhone 8 误差最大,8 plus 就没那么差,iPhone 11 系列好一些。


刷新问题就是指,当方向确定后,后续如果出现变动或者误差累积,手机指示的正北方向是否会改变。

在 ARKit 中,如果使用.gravityAndHeading配置,那么在 AR 启动后,正北的方向就确定了,接下来以视觉跟踪为主,根据肉眼观察是不会再去对方向做更新(可能会有微调,但很难确定是什么原因导致,也可能是误差或场景变化导致的)

top Created with Sketch.