我一直在玩iPhone陀螺仪和加速度计,并试图通过使用两个传感器准确测量设备旋转。
首先,我使用陀螺仪计算设备的角速度,然后使用加速度计找到角度(通过找到重力指向的位置,然后使用atan2)。然后我用它们用这个公式创建一个很好的角度估计:
accAngle = atan2f(yAcceleration, xAcceleration); // reading from accelerometer
gyroAngle = gyroVelocity * timeSinceUpdate; // reading from gyroscope
estimatedAngle = 0.97 * (estimatedAngle + gyroAngle) + 0.03 * accAngle; // filtered angle
然后我使用estimatedAngle旋转CALayer。
它的功能就像一个魅力,直到设备侧向转动,atan2功能从-pi跳到pi并返回。这种不连续性会导致角度抖动,并且由于角度测量值会跳跃太多,因此会混淆滤波器。我试图想出一个解决方案,但似乎没有任何效果。有什么想法吗?