3
 public void onSensorChanged(SensorEvent event)
 {
      // alpha is calculated as t / (t + dT)
      // with t, the low-pass filter's time-constant
      // and dT, the event delivery rate

      final float alpha = 0.8;

      gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];
      gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];
      gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];

      linear_acceleration[0] = event.values[0] - gravity[0];
      linear_acceleration[1] = event.values[1] - gravity[1];
      linear_acceleration[2] = event.values[2] - gravity[2];
 }

上記のコードで、重力とは何ですか? 私も何を初期化しますか?

4

1 に答える 1

6

加速度計を使用すると、常に地球に向かって約 1g の静的加速度を読み取ることができます。上記のコードは、時間の経過とともにその静的コンポーネントを削除するための単なるローパス フィルターです。読み取り値が取得されるたびに、既存の重力測定値の 80% と新しい読み取り値の 20% を組み合わせて使用​​し、それを追跡して静的コンポーネントを後で削除できるようにします。

gravity開始のために配列をゼロの値に初期化します。ただし、5 つのサンプルが取得されるまで、読み取り値は正確ではないことに注意してください。カウンターを導入し、フィルターが安定するまで読み取り値を無視することをお勧めします。

たとえば、デバイスがテーブルの上に平らに置かれている場合、そのコードがなければ、Z軸で1gの読み取り値が常に得られます(最も一般的な加速度計の取り付け配置の場合)。コードを使用すると、ゼロに近い読み取り値が得られ、それを拾ったときにのみ読み取り値が表示されます。

于 2013-10-20T04:14:54.533 に答える