0

私のアプリケーションでは、アプリケーションの開始と現在の測定角度の角度差を計算したいと考えています。したがって、現在の向きを取得するためSensor.TYPE_ACCELEROMETER に とを使用します。Sensor.TYPE_MAGNETIC_FIELDこれは非常にうまく機能します。ここに私のコード:

@Override
public void onSensorChanged(SensorEvent event) {
    if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
        return;
    switch (event.sensor.getType()) {
    case Sensor.TYPE_ACCELEROMETER:
        valuesAccelerometer = lowPass(event.values.clone(),
                valuesAccelerometer);
        break;
    case Sensor.TYPE_MAGNETIC_FIELD:
        valuesMagneticField = lowPass(event.values.clone(),
                valuesMagneticField);
    }
    boolean success = SensorManager.getRotationMatrix(matrixR, matrixI,
            valuesAccelerometer, valuesMagneticField);
    if (success) {
        SensorManager.getOrientation(matrixR, matrixValues);
        azimuth = (float) Math.toDegrees(matrixValues[0]);
        if (azimuth < 0.0f) {
            azimuth += 360.0f;
        }
        if (!initAz) {
            startAzimuth = azimuth;
            initAz = true;
        } else {
            float difAz = startAzimuth-azimuth;
            Log.i("Test", "" +"Dif: "+ difAz +  "Act_Value " + azimuth + " Start_Value " + startAzimuth);
        }
    }

}

ここで私の問題を説明するには、Logcat の例を使用します。

 Dif: -220.63545    Act_Value 358.24    Start_Value 137.61
 Dif: -220.7943     Act_Value 358.40    Start_Value 137.61
 Dif: -221.49236    Act_Value 359.10    Start_Value 137.61
 Dif: 137.07309     Act_Value 0.53      Start_Value 137.61
 Dif: 135.63617     Act_Value 1.97      Start_Value 137.61
 Dif: 135.16443     Act_Value 2.44      Start_Value 137.61
 Dif: 136.15468     Act_Value 1.457     Start_Value 137.61
 Dif: 136.72552     Act_Value 0.88      Start_Value 137.61

現在の測定値が 360° から 0° に変わると、ディファレンス エンジェルが間違った方向に変わります。どうすればこれをきれいに処理できるので、左右の回転で機能しますか。

4

0 に答える 0