加速度データのセンサーをポーリングして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でどのように融合しているかの制限にすぎませんか?後者の場合、重力を除外した後、融合センサーを使用して加速度計の値をより正確にするにはどうすればよいですか?