11

車輪を再発明する前に、誰かが次のコードまたはヒントを共有できるかどうかを確認したかったのです。

iPhone の相対位置を取得するには、

  • 加速度センサーの読み取り速度を設定する
  • 加速度センサーの応答をノイズ フィルター処理する
  • ベクトルに変換します
  • ベクトルをローパス フィルター処理して重力を検出する
  • 生の読み取り値から重力を差し引いて、ユーザーが加速を引き起こしたことを見つけます
  • ユーザーが引き起こした加速をフィルタリングして、関心のある周波数を取得します(アプリケーションによってはおそらくバンドパス)
  • 積分して相対速度を求める
  • 位置を見つけるために統合する

だから私が望んでいるのは、人々がすでに上記のいくつかまたはすべてを書いていて、ヒントやコードを提供できることです.

答えが見つからないいくつかの質問:

iPhone加速度計の周波数応答は? 加速度センサーとアナログ - デジタル コンバーターの間に存在するハードウェア フィルターは何ですか?

読み取り値を複製せずに加速度計デリゲートを呼び出すことができる最速の読み取り速度は?

さまざまな電話機の上記の違いは?

重力とユーザーの動きを分離するためのカットオフ周波数など、フィルターを設計するための良いヒントはありますか?

統合手順のコードやヒントはありますか? ベクトルとしてではなくデカルト座標系に統合する理由、またはその逆の理由はありますか?

これを実装する前に知っておくべきその他の経験、ヒント、または情報はありますか?

4

2 に答える 2

9

情報を見つけたら、この回答で収集します。

ハードウェア

3GS は、ST LIS331DL 3 軸 ±2g/±8g デジタル加速度計を使用しています。

iPhone 4 および iPad は、ST LIS331DLH 3 軸 ±2g/±4g/±8g デジタル加速度計を使用しています。

どちらも 100Hz と 400Hz で読み取ることができますが、iPhone 3G (iOS 4.1 の下) では、更新を高速化するために setUpdateInterval が設定されていても、加速度計デリゲートは 100Hz よりも頻繁には呼び出されません。API が iPhone 4 でより高速な更新を許可しているかどうかはわかりません。Apple のドキュメントには、最大値は iPhone のハードウェアによって決まるとしか書かれていません。(未定)

A/D コンバーターは MEM センサーと同じシリコン上にあるため、ノイズ耐性に優れています。

DL バージョンは 8 ビット (3GS) で、DLH バージョンは 12 ビット (iPhone 4) です。DL バージョンの最大バイアス (オフセット) は、DLH バージョンのバイアスの 2 倍 (0.04g 対 0.02g) です。

DLH のデータシートには加速騒音密度が報告されていますが、その値は DL データシートには報告されていません。DLH のノイズ密度は 218 μ g /√Hz とかなり低くなります。

どちらのセンサーも、カスタム レートなしで、100Hz サンプリングまたは 400Hz サンプリング速度のいずれかを提供します。iPhone が設定されたサンプリング レートで出力レジスタを読み取らない場合、センサーは値を破棄します。

DL センサーの「典型的な」フルスケール値は ±2.3g ですが、ST はそれが少なくとも ±2g であることを保証するだけです。

センサーへの温度の影響は存在し、測定可能ですが、それほど重要ではありません。

未定:

  • ハードウェア フィルターがオンになっているか、フィルター特性はどうなっていますか?
  • 加速度計への電源のノイズはどれくらいですか? (たまたま iPhone の回路図を持っている人はいますか?)
  • 加速度計は内部クロックを使用して、サンプル レートと A/D 変換のタイミングを提供します。データシートには、このクロックの精度、精度、または温度感度は示されていません。正確な時間分析のために、iPhone は割り込みを使用して、サンプルがいつ終了したかを検出し、割り込みの時間を記録する必要があります。(これが行われているかどうかは不明ですが、正確なタイミング情報を取得する唯一の方法です)

API

100Hz 未満のサンプリング レートを要求すると、選択されたサンプルが取得され、残りは破棄されます。ソフトウェアで 100Hz の倍数ではないサンプリング レートが要求された場合、実際のセンサー読み取り値間の時間間隔を均等にすることはできません。100 倍の係数が使用されている場合でも、Apple は均等なサンプリング レートを保証しません。

API はソフトウェア フィルタリングを提供していないようです。

API は生の加速度計の値を、G を表す double にスケーリングします。使用されるスケーリング係数は不明であり、これが電話ごとに異なるかどうか (つまり、キャリブレーションされているかどうか)、およびセンサーのドリフトを説明するために継続的にキャリブレーションが行われるかどうかは不明です。オンラインの報告によると、iPhone が平らな面に横たわっているときに、iPhone 自体が再調整される場合があるようです。

簡単なテストの結果は、API がセンサーを 3GS に対して ±2g に設定することを示唆しています。

未定:

  • UIAccelerometer が 1G を 1G として報告するように、Apple は各ユニットを調整しますか? Apple のドキュメントでは、デバイスを機密性の高い測定アプリケーションに使用しないように特に警告しています。
  • 報告された NSTimeInterval は、加速度計から値が読み取られたとき、または加速度計の割り込みが新しい値の準備ができたことを示したときを表していますか?
于 2010-10-30T13:43:08.360 に答える
0

私は同じ問題を扱っているだけです。あなたのアプローチとの唯一の違いは、重力を見つけるためにローパスフィルターに頼りたくないということです。(TBH加速度計の読み取り値から重力ベクトルを確実に見分ける方法がわかりません)現在、ジャイロで試してみています。

于 2011-01-15T10:59:22.717 に答える