3

私の目標は、Androidフォンを使用してヘッドマウントディスプレイ用のヘッドトラッカーをコーディングすることです。動きはマウスの動きに移され、PCゲーム内で使用されます。アンドロイドフォンをヘッドトラッカーの後ろに取り付けたいので、頭の後ろに固定されます。真っ直ぐ前を見ると、y軸は上を向いており、x軸は右を向いています。つまり、私の後ろの頭を見ると、携帯電話のディスプレイが見えます。

携帯電話の画像

この設定の仕組みにより、y軸と重力軸の間に角度があるため、携帯電話は真っ直ぐ前を向いたときに後頭部からわずかに傾いています。また、z軸を中心にわずかに回転しており、z軸を中心に約5〜10°の角度で移動しながら回転している可能性があります。

私の電話にはジャイロスコープがありません。使用しました

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];
}

これは、加速度計からの生データを使用するよりもうまく機能します。アルファとして0.8を使用しましたが、t /(t + dT)に従って調整する必要がありますか?では、tとdTを取得する方法は?

この設定を使用すると、頭を上下に傾けることができます。

しかし、左右に動かすことが問題であることがわかります。また、左下から右上に斜めに移動し、ミラーリングされます。または円を描くように移動します。

私のエラーの説明ではなく、基本的な数学から来ていますが、これを機能させるためにどのコードを提案しますか?

4

0 に答える 0