2016-03-27 18 views
0

加速度データのセンサーをポーリングしてXYZ値をSQL DBに保存するアプリがあります。それは非常に単純ですCodewise:Android直線加速精度

public void onSensorChanged(SensorEvent event) { 
     sensor = event.sensor; 

     int i = sensor.getType(); 
     if (i == MainActivity.TYPE_ACCELEROMETER) { 
      accelerometerMatrix = event.values; 
     } else if (i == MainActivity.TYPE_GYROSCOPE) { 
      gyroscopeMatrix = event.values; 
     } else if (i == MainActivity.TYPE_GRAVITY) { 
      gravityMatrix = event.values; 
     } else if (i == MainActivity.TYPE_MAGNETIC) { 
      magneticMatrix = event.values; 
     } 

     //insert into database 

    } 

MainActivity.TYPE_ACCELEROMETERは、私は私のMainActivityクラスに設定されたばかりのフィールドです。

これをSensor.TYPE_LINEAR_ACCELERATIONに設定すると、私のDBに格納される値の精度がかなり低くなります(小数点以下2桁のみ)。しかし、ハードウェアアクセラレータSensor.TYPE_ACCELERATIONを使用した場合、精度ははるかに高いです(6dp)

私の質問は、2dpの精度しか得られないように線形加速値を間違って取得していますか?それとも、これはセンサーがAndroidでどのように融合しているかの制限にすぎませんか?後者の場合、重力を除外した後、融合センサーを使用して加速度計の値をより正確にするにはどうすればよいですか?

答えて

0

私が知る限り、Androidのハードウェアセンサーの精度を変更することはできません。 registerListener()メソッドでは、クラスまたはモニタの精度変更からサンプリング時間を調整することができます。onAccuracyChanged()コールバックをSensorEventListenerインターフェイスからのみ行います。

コードスニペットでセンサの読みを正しく検索しているようです。私は、次のことをやってお勧めし

  • は、アプリケーションの動作が変更された場合だけ一つのセンサと チェックと同じ測定を実行しよう - 多分、複数の測定値 は、測定の不正確さを引き起こしていますか?
  • このアプリケーションを別のデバイスで実行しようとした場合、動作と精度が異なるかどうかを確認してください。異なるデバイスではセンサーの精度が異なる可能性がありますか?
  • データベースのチェックの精度とデータ型と、それは、より正確なデータを扱うかどうかを確認し、正しく

あなたが言及した提案を適用した後の任意の違いに気付くない場合、私たちはセンサーの読み取り精度を高めることについて何もできないと思います。

また、以前はNexus 5とNexus 6を使用していたAndroidのセンサーでいくつかの実験を行いましたが、気付いたようにさまざまなセンサーの精度が異なることがわかりました。私の知るところによれば、Android SDK APIレベルからはそれを制御することはできません。