私は 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 にジャンプして元に戻ります。この不連続性により、角度がジッターし、角度測定値が大きくジャンプするため、フィルターが混乱します。私はこれに対する解決策を考えようとしましたが、何もうまくいかないようです。何か案は?