4

私のアプリでは、真北を基準にしてデバイスの加速度を計算する必要があります。私の考えは、磁北へのデバイスの向きを計算し、それに偏角を適用して真北への向きを取得することでした。次に、デバイスの加速度を計算して向きを参照したいのですが、これをどのように行うべきかわかりません。

SensorManager.getRotationMatrix()と を使用してデバイスの向きを取得しようとしますSensorManager.getOrientation()。次に、 で偏角を取得し、GeomagneticField.getDeclination()からの方位値の方位角に適用しますSensorManager.getOrientation()

しかし、加速度計の値をこの方向にどのようにマッピングすればよいでしょうか? それは可能ですか?

4

1 に答える 1

8

加速度センサーは、デバイスの加速度を返します。これは、3次元空間のベクトルです。このベクトルは、デバイスの座標系で返されます。必要なのは、ワールド座標でのこのベクトルの座標です。これは単純です。

R = rotation matrix obtained by calling getRotationMatrix
A_D = accelerator vector return by sensor ( A_D = event.values.clone )
A_W = R * A_D is the same acceleration vector in the world coordinate system.

A_W is an array of dimention 3 
A_W[0] is acceleration due east.
A_W[1] is acceleration due north.

これを計算するためのコードを次に示します(それぞれのセンサーからの出力を想定gravityして含みます)。magnetic

            float[] R = new float[9];
            float[] I = new float[9];
            SensorManager.getRotationMatrix(R, I, gravity, magnetic);
            float [] A_D = values.clone();
            float [] A_W = new float[3];
            A_W[0] = R[0] * A_D[0] + R[1] * A_D[1] + R[2] * A_D[2];
            A_W[1] = R[3] * A_D[0] + R[4] * A_D[1] + R[5] * A_D[2];
            A_W[2] = R[6] * A_D[0] + R[7] * A_D[1] + R[8] * A_D[2];
于 2013-02-20T19:42:56.897 に答える