4

Android 携帯の加速度計から取得した 3 次元の加速度ベクトル (a、b、c) があります。

このベクトル (a、b、c) と、正確に下向きの重力ベクトルとの間の角度を計算したいと思います。

Android では、ワールド座標系ではなく電話座標系のコンテキストで重力ベクトルを取得する方法があることに気付きました。単にセンサー タイプSENSOR_TYPE_GRAVITYを使用するだけで、3 次元の重力ベクトル (d、e、f) を取得できます。両方のベクトルが同じ座標系の下にあるため、電話の座標系です。単純なベクトル内積によって、それらの角度を簡単に見つけることができます。

この角度を見つけたら、電話の座標系から現実世界の座標系に移動しても、角度は変わりません。

私の質問:

の背後にある動作メカニズムは何SENSOR_TYPE_GRAVITYですか?

重力を測定するハードウェアは他にないと思います。したがって、重力を測定するのは加速度計だけです。重力は、結果として生じる加速度からどのように抽出されますか?

この重力の出し方の精度が気になるので質問させていただきます。

不正確な場合は、LPF を実装して、DC 成分である重力を自分でフィルター処理することができます。SENSOR_TYPE_GRAVITYから取得する方が自分で行うよりも正確かどうかはわかりません。

================================== アップデート =============== ========================

明確にするために、次のコードで加速度と重力の両方のデータを正しく取得できますか?

正しくは、加速度と重力が同じ特定の瞬間に属しているということですか? ある時点で値を使用する必要があります。したがって、加速が time=13:12:00 で、重力が後の時間、たとえば time=13:12:01 である状況は望ましくありません。

public void onSensorChanged(SensorEvent event) { 

    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
        acceleration[0] = event.values[0];
        acceleration[1] = event.values[1];
        acceleration[2] = event.values[2];
    }

    if (event.sensor.getType() == Sensor.TYPE_GRAVITY) {
        gravity[0] = event.values[0];
        gravity[1] = event.values[1];
        gravity[2] = event.values[2];
    }

}
4

1 に答える 1

5

The three sensors Sensor.TYPE_ACCELEROMETER, Sensor.TYPE_GRAVITY and Sensor.TYPE_LINEAR_ACCELERATION are related by the equation

"Sensor.TYPE_ACCELEROMETER" =  "Sensor.TYPE_GRAVITY" + "Sensor.TYPE_LINEAR_ACCELERATION"

If you register for updates for all three, what you find is that Sensor.TYPE_ACCELEROMETER always arrives first, followed by Sensor.TYPE_GRAVITY and Sensor.TYPE_LINEAR_ACCELERATION, and that the values always satisfy that equation. Internally, Android is using filtering, and in particular a Kalman filter, to separate the two.

A low pass filter is a simple way of doing something similar. However, a lot of thought will have gone into the Android mechanism, so I'm sure that if a low pass filter was better, then Android would have implemented that.

于 2013-06-14T07:56:13.080 に答える