Kay*_*Kay 5 iphone gyroscope core-motion ios6
在我目前的项目中,我遇到了Core Motion的CMAttitude提供的四元数问题.我把iPhone 5(iOS 6.0.1)放在一个定义良好的起始位置.然后我开始快速移动设备,就像在快速起搏游戏中一样.当我在10-30秒后返回到起始位置时,报告的偏航角与起始位置相差10-20度(大部分时间≈11°).
我使用旧的(可悲的是不再可用的)Core Motion Teapot样本来验证效果.用于记录的欧拉角直接从CMAttitude读取:

NSLog(@"pitch: %f, roll: %f, yaw: %f", attitude.pitch * 180 / M_PI, attitude.roll * 180 / M_PI, attitude.yaw * 180 / M_PI);
Run Code Online (Sandbox Code Playgroud)
我在不同工厂的不同时间生产的两种不同的iPhone 5设备上发现了这一点.但真的很奇怪的是,运行iOS 5.1.1的iPhone 4正在按预期工作.在我看来,这是一个iOS错误,我已经提交了一个错误报告,但另一方面,我很难想象没有人偶然发现它.我怀疑它可能与重新设计的Core Motion API有关.从版本5开始,磁力计(罗盘)也被考虑用于传感器融合.控制台显示来自locationd的偏差估计被提供给CoreMotion:
locationd[41] <Notice>: GYTT inserted: bias,-0.196419,1.749323,-1.828088,variance,0.002644,0.004651,0.002527,temperature,31.554688
Run Code Online (Sandbox Code Playgroud)
我的问题:使用Device Motion时是否有机会阻止磁力计读数?我尝试停用位置服务,但它不会影响Core Motion.如果不可能,替代/解决方法是什么,基于加速度计的重力估算?
PS:由于我们面对的是基于四元模型,这是不是与万向锁
编辑:
经过一些测量后,似乎很明显只有偏航受到影响.无论起始位置如何,俯仰和滚转都会在偏差(<= 1°)内显示偏差.CMDeviceMotion.gravity看起来也很干净.
编辑(2): 我可以使用附加到最近的XCode版本的MotionGraphs示例重现问题.偏航图可以重复地远离原点.
不是最终的解决方案,但至少是我自己问题的解决方法(我将其保留为未答复以邀请您)。事实证明,至少DeviceMotion.gravity没有受到该bug的影响。因此,我决定重新设计运动检测的这个非常简单的部分,并用于arcsin (gravity.x/||gravity||)在倾斜设备时将主要玩家角色移动到一侧。
这绝对是第二佳解决方案,因为它破坏了四元数中包含的有关完整旋转状态的信息。我决定这样做是出于战略考虑:
CMAttitude.quaternion因为大多数人对四元数数学不感兴趣;-)因此,任何与重力矢量相关的未来错误都可能在测试阶段得到修复,因为有大量的用户。| 归档时间: |
|
| 查看次数: |
2676 次 |
| 最近记录: |