2011-11-26 90 views
3

我正在构建一个应用程序,检测手机是否旋转了360度。这种旋转很可能会在35秒内完成。我如何准确检测到这一点?我读过一些关于“集成”的文章,短期内使用陀螺仪,加速度计用于补偿陀螺仪。实现这一目标的最佳方法是什么?并且首先要如何从陀螺仪获取旋转值?使用iPhone的传感器检测旋转

我真的不了解RotationMatrix乘以inverse'd CMAttitude。即使我不使用手机,CMAttitude.yaw也给了我不同的价值。我也看到了茶壶的例子。我的代码大致相同,只是我需要自己处理来自RotationMatrix的数据,因为我没有使用OpenGL为我做这件事。

由于提前, Hidde

+0

围绕什么轴,你需要检测360度旋转? –

+0

任何轴。不知道手机如何定位 – Hidde

+0

如果不是现实世界中的轴,那么相对于手机的轴是什么? –

回答

1

展望核心运动API似乎最好的办法是监视旋转速度。特别是通过CMDeviceMotion接口,其声明了一个rotationRate属性与本讨论:

甲CMRotationRate结构包含数据指定围绕三个轴的旋转的装置的速率 。该属性的值包含陀螺仪数据的 测量值,其偏差已被Core 运动算法删除。另一方面,CMGyroData的同名属性给出了陀螺仪的原始数据。结构类型 在CMGyroData.h中声明。

您可以通过CMMotionManager method:

- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame toQueue:(NSOperationQueue *)queue withHandler:(CMDeviceMotionHandler)handler 

声明的兴趣监视事件,则你需要做一点数学的工作出来的时候转动应该发生在一个给定的量率构成完整的360度旋转。

+0

谢谢,我会做一些测试和计算。你给了我正确的设置。 – Hidde

+0

所以我做了一些测试,但是当我把Y轴上的每一个旋转加起来时,即使我根本没有移动手机,我也会得到这个不断变化的数字 – Hidde

+0

这个数字有偏差(偏移量)陀螺仪给出的旋转速率。这种偏见随着时间而改变。 iPhone使用复杂的算法(他们称之为“传感器融合”,但它可能是一个卡尔曼滤波器)来补偿这种偏差,通过使用加速度计。您在CMDeviceMotion中获得的姿态数据是此传感器融合算法的结果,而旋转速率未经处理。 –