0

次のセンサーを組み込んだアプリケーションを実装しました。

  • 加速度計
  • 磁場
  • 方向 (非推奨)
  • ジャイロスコープ
  • 重力

これは onSensorChanged() メソッドのサンプル コードです。

        @Override
    public void onSensorChanged(SensorEvent event) {
        int type = event.sensor.getType();

        if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) {
            if (type == Sensor.TYPE_GYROSCOPE) {
                // Log.e(TAG, "Unreliable gyroscope");
            } else if (type == Sensor.TYPE_GRAVITY) {
                // Log.e(TAG, "Unreliable gravity");
            }
            return;
        }

        if (type == Sensor.TYPE_ACCELEROMETER) {
            mmAcceleration = event.values.clone();
        } else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
            mmGeomagnetic = event.values.clone();
        } else if (type == Sensor.TYPE_GYROSCOPE) {
            mmRotation = event.values.clone();
        } else if (type == Sensor.TYPE_ORIENTATION) {
            mmOrientation = event.values.clone();
        } else if (type == Sensor.TYPE_GRAVITY) {
            mmGravity = event.values.clone();
        }

        if (mmAcceleration != null && mmGeomagnetic != null
                && mmOrientation != null) {

                            // Handling the data ...

            mmAcceleration = null;
            mmGeomagnetic = null;
            mmRotation = null;
            mmOrientation = null;
            mmGravity = null;
        }
    }

コードを試したデバイスは HTC One S です。3 台の個別のデバイスで試しました。また、Gセンサーを複数回調整してからアプリケーションを開始しましたが、それでも信頼できない結果が得られます. また、調整を試み、電話を再起動してから再度調整するか、再起動後にアプリケーションを直接実行しました。他のセンサーは正常に動作します。また、さまざまな環境 (屋内) を試しましたが、干渉源の近くにはいません。

ジャイロスコープと重力(ジャイロスコープを使用) センサーの信頼できない (SENSOR_STATUS_UNRELIABLE) 結果がまだ得られます。

何がうまくいかないかについて何か提案はありますか?

前もって感謝します。

4

1 に答える 1

0

あなたがやりたいことは、加速度計データとジャイロスコープデータに「補完フィルター」または「カルマンフィルター」を適用することだと思います....それでうまくいくはずです....

于 2016-06-27T15:59:29.077 に答える