0

しばらく検索したところ、並進加速度の方向を回転から分離する方法が見つかりませんでした。

私は、携帯電話の回転方法とは関係なく(そしてもちろん、携帯電話の回転方法とは関係なく)加速方向を取得する方法を探しています。

基本的に、これにより、加速、減速、方向転換の違いを生むことができます。

加速度センサーの角度をから得られた角度で補正しようとしましたが、デバイスに並進運動(加速度)がある場合、角度(方位角、ピッチ、ロール)が同じではないgetOrientationことを実験しました。getOrientation

両方のいずれかが必要になります。デバイスがどのように回転しているかに関係なく加速方向、またはデバイスがどのように加速されているかに関係なく方向の値です。

それも可能ですか?

4

1 に答える 1

1

ついに見つけました!

Androidのドキュメントの後、回転行列(getRotationMatrix)を取得して、モバイルの座標系を変更できます。回転行列Rは、ベクトルをデバイスの座標系から世界の座標系に変換します。

しかし、パラメータのドキュメントには次のように書かれています(そしてここにクイズがあります):

重力-デバイスの座標で表される重力ベクトルを含む3つのフロートの配列です。タイプTYPE_ACCELEROMETERのセンサーのSensorEventによって返される値を使用するだけです。

それでは、ドキュメントで加速度計の値を回転行列のパラメーターとして使用すると、もちろん加速度が影響を受けますが、移動移動と行列はすべて役に立ちません。

加速度センサー値を使用する代わりに、重力センサー値(タイプTYPE_GRAVITYのセンサー)を使用する必要があります

このセンサーは移動体の移動の影響を受けないため、移動体の移動中に回転行列を使用できます。

最後に、私たちのために機能するコードは次のようになります。

float[] trueacceleration = new float[4];
float[] R = new float[16];
float[] RINV = new float[16];    

SensorManager.getRotationMatrix(R, I, GRAVITY, geomagnetic);
Matrix.invertM(RINV, 0, R, 0);          
Matrix.multiplyMV(trueAcceleration, 0, RINV, 0, linearAcceleration, 0);

どこ

  • GRAVITYは、TYPE_GRAVITYセンサーからの値を持つベクトルです。
  • geomangeticは、TYPE_MAGNETIC_FIELDセンサーからの値を持つベクトルであり、
  • linearAccelerationは、TYPE_LINEAR_ACCELERATIONセンサーからの値を持つベクトルです。

次に、trueAccelerationベクトルでは、モバイルがその向きをどのように動かしても、モバイルの移動に加速があります。

于 2013-06-03T15:15:48.360 に答える