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