iOS5:CLHeading 读数更新率低 ->切换到 CoreMotion 是有问题的
在 iOS5 中,指南针原始数据读取 CLHeading
的更新频率急剧下降。这使得我的增强现实应用程序无法使用,因为它依赖于近乎实时的原始罗盘数据读取。
因此我现在正在尝试切换到 CoreMotion。这提供了更频繁更新的磁力计数据:
cmManager = [[CMMotionManager alloc] init];
[cmManager startMagnetometerUpdates];
然后我可以在游戏过程中随时访问MagneticField
数据:
CMMagneticField magneticField = cmManager.magnetometerData.magneticField;
我遇到的问题如下: CMMagneticField
中的数据与 CLHeading
x/y/z 数据采用不同的单位。
我想将 CMMagneticField
x/y/z 数据转换为与 CLHeading / CLHeadingComponentValue 相同的单位 - 以便能够使用我现有的 AR 代码。
这里有一些读物:
7.3 / 17.64 / -39.58 CLHeadingComponentValue X/Y/Z
-103.12 / 88.51 / -20.05 CMMagneticField
-10.81 / -34.9 / -18.6 CLHeadingComponentValue X/Y/Z
-121.00 / 33.29 / 3.1 CMMagneticField
-20.8 / -38.0 / -4.0 CLHeadingComponentValue X/Y/Z
-132.9 / 32.2 / 14.4 CMMagneticField
With iOS5 the update frequencey of the Compass raw data reading, CLHeading
, dropped dramatically. This rendered my augmented reality app unusable, because it depends on a close-to-real-time reading of the raw compass data.
Therefore I'm now trying to switch to CoreMotion. This provides more frequently updated magnetometer data:
cmManager = [[CMMotionManager alloc] init];
[cmManager startMagnetometerUpdates];
I can then access the magneticField
data anytime I want during the game:
CMMagneticField magneticField = cmManager.magnetometerData.magneticField;
The problem I have is the following:
The data in CMMagneticField
are in a different unit then CLHeading
x/y/z data.
I would like to convert the CMMagneticField
x/y/z data to the same units as CLHeading / CLHeadingComponentValue are - in order to be able to use my existing AR code.
Here a few readings:
7.3 / 17.64 / -39.58 CLHeadingComponentValue X/Y/Z
-103.12 / 88.51 / -20.05 CMMagneticField
-10.81 / -34.9 / -18.6 CLHeadingComponentValue X/Y/Z
-121.00 / 33.29 / 3.1 CMMagneticField
-20.8 / -38.0 / -4.0 CLHeadingComponentValue X/Y/Z
-132.9 / 32.2 / 14.4 CMMagneticField
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
与此相关的文档中的唯一参考是报告的 CLHeadingComponentValue 标准化为范围 -128 到 +128。但对我来说,似乎应用了某种其他类型的校准。
The only reference in documentation related to this is that CLHeadingComponentValue reported is normalized to the range -128 to +128. But to me it seems that some other sort of calibration is applied.