iOS5:CLHeading读数的更新率低 - >切换到CoreMotion是有问题的

fuk*_*kus 5 objective-c magnetometer core-motion ios5 compass-geolocation

使用iOS5,Compass原始数据读取的更新频率CLHeading显着下降.这使得我的增强现实应用程序无法使用,因为它依赖于原始指南针数据的近实时读取.

因此我现在正试图切换到CoreMotion.这提供了更频繁更新的磁力计数据:

cmManager = [[CMMotionManager alloc] init];    
[cmManager startMagnetometerUpdates];
Run Code Online (Sandbox Code Playgroud)

然后我可以magneticField在游戏中随时访问数据:

CMMagneticField magneticField = cmManager.magnetometerData.magneticField;
Run Code Online (Sandbox Code Playgroud)

CMMagneticField遇到的问题如下:数据位于CLHeadingx/y/z数据的不同单位.

我想将CMMagneticFieldx/y/z数据转换为与CLHeading/CLHeadingComponentValue相同的单位 - 以便能够使用我现有的AR代码.

这里有几点读物:

7.3     /  17.64 /  -39.58          CLHeadingComponentValue X/Y/Z
-103.12 /  88.51 /  -20.05          CMMagneticField 
Run Code Online (Sandbox Code Playgroud)
-10.81  /  -34.9 /  -18.6          CLHeadingComponentValue X/Y/Z
-121.00 /   33.29 /  3.1           CMMagneticField    
Run Code Online (Sandbox Code Playgroud)
-20.8  /  -38.0 /   -4.0          CLHeadingComponentValue X/Y/Z
-132.9 /   32.2 /  14.4           CMMagneticField
Run Code Online (Sandbox Code Playgroud)

adi*_*dig 0

与此相关的文档中的唯一参考是报告的 CLHeadingComponentValue 标准化为范围 -128 到 +128。但对我来说,似乎应用了某种其他类型的校准。