17

デバイス (HTC Hero) がどの方向 (n/w/s/e) を向いているかを知る必要がある Google Android 2.1 のアプリを作成しています。センサーとそのリスナーはうまく機能していますが、センサーから取得した値はまったくお粗末です。たとえば、デバイスが南西などに面している場合、私は北を向いていると表示されます...

これは、Android デバイスの既知の問題のようです。Webで見つけた「解決策」は次のようになります。

  • デバイスを振る
  • デバイスを8のように動かします
  • デバイスの背面をタップします

これにより、センサーの再キャリブレーションがトリガーされると考えられます。そして、「動き回る」ということは私にとってはうまくいきます...しかし、それはあまり専門的ではないと思います...

では、SDK から方向センサーの再キャリブレーションをトリガーするにはどうすればよいですか? このアプリのユーザーが電話を「手動で」再調整しているときに、このアプリのユーザーを完全なばかのように見せるような凝ったものを使わずに、センサーを適切に調整する必要があります...

これを「正しく」行う方法はありますか?

編集:

または: デバイスが正しく調整されているかどうかをプログラム的に判断する方法はありますか? いわばフォールバックオプションとして...次に、デバイスに「手動」の再調整が必要であることをユーザーに警告できます。

4

2 に答える 2

3

GPS のようなセカンダリ データ ソースを使用しない限り、コンパス センサーが正しく調整されているかどうかをプログラムで知る方法はないと思います。GPS を使用できる場合、ユーザーが移動しているときに、GPS の動きをコンパスの方向と比較して修正できます。局所的な磁場はコンパスの読み取りを台無しにする可能性があり、デバイスはあなたが森の真ん中にいるか、変圧器の隣にいるかを認識できないことに注意してください.

これらのマイクロ デバイスには、対処しなければならないわずかなスキューが常に存在します。加速度計の値も確認すると、安静時に常に 9.8 m/s^2 (または少なくともデバイス間で一貫して) を返すとは限らないことがわかります。

あなたのヘルプでは、ユーザーに携帯電話を8の字に回転/ひねってコンパスをリセットするように指示するだけでよい場合があります。

于 2010-07-04T19:39:28.447 に答える
0

ヒーロー内の磁力計について言及していると思います。

それを調整するのは難しいものであり、現実的な調整のために常にユーザーの操作が必要です。それに対処するための個別の戦略があります。デバイスを北方向に保持してから再調整するようにユーザーに依頼できます。ユーザーが北がどこにあるのかわからない場合は、デバイスを太陽に向けるように指示し、場所と時間に基づいてその場所を計算することができます。

キャリブレーションはさておき、あなたの問題は、センサーから取得した読み取り値が不正確であることだと思います。もちろん、キャリブレーションは正確な読み取りの前提条件ですが、他にも要因があります。

精度を上げるために、あるセンサーからのセンサー データを別のセンサーからのデータで補完するのが一般的な方法です。ユーザーが移動しているときに、GPS を使用して進行方向を特定できます。ただし、彼の動きが遅い場合、これも不正確です。加速度計によって報告されたデータを統合して、方向の変化 (絶対的な方向ではありません) を推測できます。しかし、正直なところ、この場合はジャイロメーターの方が理想的です。

このように機能するシステムは、慣性航法システム(INS)と呼ばれることがあります。これは、空間内の固定点が与えられた場合、その後の相対的な位置と方向を、追加の外部データなしで正確に決定できるためです。カルマン フィルターの使用は、絶対位置 (たとえば、GPS を介して取得) が利用可能な場合にシステムを再調整する一般的な方法です。

本格的な INS を実装するのは現実的ではありませんが、向きの読み取りをより正確にするために、INS がどのように機能するかからいくつかのアイデアを引き出すことができます。

于 2010-07-24T08:29:03.390 に答える