我想计算iPhone沿y轴方向的变化率。1.最初,我需要将参考定义为y轴,2.然后从定义的基准测量方向的变化率(角度测量)。
CMAttitude是否提供了可靠的角度测量来实现这一点?或者我可以使用旋转矩阵或积分陀螺仪数据吗(我实现了这个方法,但由于陀螺仪的漂移,它不起作用)。所以请给我一个可靠的方法来完成这项工作?
提前谢谢!
首先,澄清一下:旋转速率不是"从"任何轴测量的,而是"围绕"一个轴测量的。您不需要提供初始参考框架,因为您只是担心随时间的推移而发生更改。
无论如何,你会得到的最好的是CMDeviceMotion的rotationRate
属性,文档说:
CMRotationRate结构包含指定设备速率的数据围绕三个轴旋转。此属性的值包含核心消除了偏差的陀螺仪数据的测量运动算法。
据称,它集成了来自多个来源(加速度计)的传感器数据,试图从读数中消除陀螺仪漂移,而不是CMGyroData类,文档称其为:
此属性产生设备旋转速率的测量值围绕三个轴。而此属性从陀螺仪,CMDeviceMotion的同名属性给出CMRotationRate结构测量陀螺仪数据,其偏差已经核心运动算法删除。
从这些参考文献中得出的结论是,如果你想要最准确的旋转速率数据,你应该使用以下内容:
CMMotionManager* manager = [[CMMotionManager alloc] init];
[manager startDeviceMotionUpdates];
// Later, in some other scope...
double rotationAroundY = [[manager deviceMotion] rotationRate].y;