2

現在、加速度計の値から方向の値 (ヨー、ピッチ、ロール) を取得する方法に取り組んでいます。以下は私が現在使用している方法ですが、向きの値が間違っているようです。無視した問題や間違いはありますか? 助けてくれてありがとう!

if (sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        accelerometerValues = event.values;
    }

    if (sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        magneticFieldValues = event.values;
    }

    SensorManager.getRotationMatrix(rotate, null, accelerometerValues,
            magneticFieldValues);
    SensorManager.getOrientation(rotate, rotationValues);

    // change radian to degree
    rotationValues[0] = (float) Math.toDegrees(rotationValues[0]);
    rotationValues[1] = (float) Math.toDegrees(rotationValues[1]);
    rotationValues[2] = (float) Math.toDegrees(rotationValues[2]);
4

2 に答える 2

1

getRotationMatrix() と getOrientationMatrix で使用される座標軸は異なります。したがって、上記の回転マトリックス コードを次のように回転する必要があります。

SensorManager.getRotationMatrix(rotate, null, accelerometerValues,
        magneticFieldValues);
SensorManager.remapCoordinateSystem(rotate, SensorManager.AXIS_X, SensorManager.AXIS_MINUS_Z, rotate); //Overwriting rotate matrix with the rotated values
SensorManager.getOrientation(rotate, rotationValues);
于 2014-05-28T22:23:23.190 に答える
0

北極に関連する方向は、rotationValues[2] です。

そう

float course = (float) Math.toDegrees(rotationValues[2]);

正しいはずです。

キャリブレーション (デバイスで 8 の字を作る) を試し、他のアプリが正しい方向を示しているかどうかを確認します。コンパスで確認。

于 2013-02-07T17:54:04.340 に答える