iPhone4 には MEMS ジャイロコンパスが含まれているため、それが最も直接的なルートです。
お気づきのように、磁力計の反応は鈍いです。これは、動きの鈍さを利用して現在の方向が実際にどのようなものであるかについて知識に基づいた推測を行う予測アルゴリズムを使用することで減らすことができます。
まず、センサーの実際の性能を判断する必要があります。これを行うには、いくつかの回転速度のそれぞれで正確な速度で回転させ、コンパスの動作を記録する必要があります。回転プラットフォームには、瞬間的な位置を読み取る方法が必要です。
速度が遅いと、さまざまな程度の固定ラグが見られます。速度が上がるとラグが大きくなり、180 度に近づくと、コンパスが突然反転します。より速い速度では、フリップが同じ値で繰り返されるとフリップしないように見えるかもしれませんが、フリップだけが表示されます。これらの高速の一部では、コンパスが回転方向とは反対に逆方向に回転しているように見える場合があります。
回転テーブルを入手するのは面倒な場合があり、ローカルの磁場に影響を与えないようにする (コンパスが役に立たなくなる) ことを確認するのは困難です。理想的なテーブルはアルミニウム製で、スチール製のテーブルを使用する必要がある場合 (最も一般的)、電話を非磁性プラットフォームに取り付けて、スチール製からできるだけ離す必要があります。
地元の工作機械工場から始めるのがよいでしょう。CNC 工作機械は、必要なことを簡単に行うことができます。
コンパスのパフォーマンス データを取得したら、観測された読み取り値と実際の向きおよび回転速度のモデルを構築する必要があります。モデルを逆にして読み取り値に適用し、実際の読み取り値の推測を取得します。
簡単なアルゴリズムの実装は、読み取りの履歴を保持し、連続した読み取り間の違いのリストを保持することです。コンパス ラグがあることがわかっているため、差の値がゼロ以外の場合、ラグによって現在の値にある程度の不正確さがあることがわかります。
次のステップは、「修正された」測定値のリストを作成することです。ここでは、以前の実際の値の既知のラグを使用して更新された値を生成し、この値を使用して「修正された」測定値の最後の値に追加される更新された値を作成します。リストされ、最新の値として保存されます。
累積補正 (実際のリストと補正されたリストの最新の値の差が 360 度を超える場合、コンパスがどこを指しているかは基本的にわかりません。一般的にかなり短い期間です。
ただし、目標は回転数をカウントすることだけなので、累積誤差が大幅に高い値に達するまで、1 回転未満の誤差が生じます。実際のコンパス ラグと実際の回転速度の両方に依存するため、この値がどうなるかはわかりません。しかし、少数の回転数 (5 程度) だけを気にする場合は、使用可能な結果が得られるはずです。