4

ユーザーがiPhoneデバイスを回転させたときにスピンの数を検出できるアプリケーションを作成したいと思います。現在、私は Compass API を使用して角度を取得し、スピンを検出するさまざまな方法を試しています。以下は私が試した解決策のリストです: 1/ コンパスから取得した角度がそれらを通過したかどうかを検出するために、フルラウンドに 2 つの角度トラップ (フルラウンドのピース) を作成します。2/ コンパスが更新される時間の間のすべての角度距離を合計します (updateHeading 関数で)。合計角度を 360 に分割してみましょう => スピン数を取得できます

問題は、電話の回転が速すぎると、コンパスが電話の速度に追いつかず、最新の時間で角度を返します (実際の回転のように連続的ではありません)。

また、加速度計を使用してスピンを検出しようとしています。ただし、平面上で電話を回転させると、この方法は機能しません。

この問題に関する解決策または経験があれば、私を助けてください。

本当にありがとう。

4

3 に答える 3

3

iPhone4 には MEMS ジャイロコンパスが含まれているため、それが最も直接的なルートです。

お気づきのように、磁力計の反応は鈍いです。これは、動きの鈍さを利用して現在の方向が実際にどのようなものであるかについて知識に基づいた推測を行う予測アルゴリズムを使用することで減らすことができます。

まず、センサーの実際の性能を判断する必要があります。これを行うには、いくつかの回転速度のそれぞれで正確な速度で回転させ、コンパスの動作を記録する必要があります。回転プラットフォームには、瞬間的な位置を読み取る方法が必要です。

速度が遅いと、さまざまな程度の固定ラグが見られます。速度が上がるとラグが大きくなり、180 度に近づくと、コンパスが突然反転します。より速い速度では、フリップが同じ値で繰り返されるとフリップしないように見えるかもしれませんが、フリップだけが表示されます。これらの高速の一部では、コンパスが回転方向とは反対に逆方向に回転しているように見える場合があります。

回転テーブルを入手するのは面倒な場合があり、ローカルの磁場に影響を与えないようにする (コンパスが役に立たなくなる) ことを確認するのは困難です。理想的なテーブルはアルミニウム製で、スチール製のテーブルを使用する必要がある場合 (最も一般的)、電話を非磁性プラットフォームに取り付けて、スチール製からできるだけ離す必要があります。

地元の工作機械工場から始めるのがよいでしょう。CNC 工作機械は、必要なことを簡単に行うことができます。

コンパスのパフォーマンス データを取得したら、観測された読み取り値と実際の向きおよび回転速度のモデルを構築する必要があります。モデルを逆にして読み取り値に適用し、実際の読み取り値の推測を取得します。

簡単なアルゴリズムの実装は、読み取りの履歴を保持し、連続した読み取り間の違いのリストを保持することです。コンパス ラグがあることがわかっているため、差の値がゼロ以外の場合、ラグによって現在の値にある程度の不正確さがあることがわかります。

次のステップは、「修正された」測定値のリストを作成することです。ここでは、以前の実際の値の既知のラグを使用して更新された値を生成し、この値を使用して「修正された」測定値の最後の値に追加される更新された値を作成します。リストされ、最新の値として保存されます。

累積補正 (実際のリストと補正されたリストの最新の値の差が 360 度を超える場合、コンパスがどこを指しているかは基本的にわかりません。一般的にかなり短い期間です。

ただし、目標は回転数をカウントすることだけなので、累積誤差が大幅に高い値に達するまで、1 回転未満の誤差が生じます。実際のコンパス ラグと実際の回転速度の両方に依存するため、この値がどうなるかはわかりません。しかし、少数の回転数 (5 程度) だけを気にする場合は、使用可能な結果が得られるはずです。

于 2010-09-03T22:12:09.157 に答える
0

iPhone 4 を使用している場合、問題は解決されており、Core Motionを使用して回転データを取得できます。

以前のデバイスの場合、非常に細かいレポート間隔でUIAccelerometerを使用して、デバイスの回転に伴うぐらつきを検出しようとする興味深いアプローチがあると思います。回転面に対して直角な動きから検出されたいくつかの合理的なパターンを取得できる場合があります。

于 2010-10-06T14:18:11.703 に答える
0

加速度の速度を使用して、電話の回転速度を判断し、それを使用して、電話が停止するまで空白を埋めることができます。停止した時点で、コンパスを再度クエリできます。

于 2010-01-21T18:09:41.250 に答える