AR ビューがコンパスのように機能するという非常に厄介な問題が発生しています。したがって、電話を縦向きに持つと (画面が私の顔を指すように)、縦向きにremapCoordinateSystem
持つとピッチが 0 になると を呼び出します。次に、方位角(コンパス機能)は完璧ですが、電話を傾けるとすぐに方位角が台無しになり、前に曲がると方位角が増加し、後ろに曲がると減少します.
読み取り値を取得するために 2 つのセンサーを使用しSensor.TYPE_MAGNETIC_FIELD
ますSensor.TYPE_GRAVITY
。
私はかなり基本的なローパスフィルターを使用しています。これはアルファ定数で実装され、センサーからの読み取り値に直接使用されます。
これが私のコードです:
float[] rotationMatrix = new float[9];
SensorManager.getRotationMatrix(rotationMatrix, null, gravitymeterValues,
magnetometerValues);
float[] remappedRotationMatrix = new float[9];
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_X,
SensorManager.AXIS_Z, remappedRotationMatrix);
float results[] = new float[3];
SensorManager.getOrientation(remappedRotationMatrix, results);
float azimuth = (float) (results[0] * 180 / Math.PI);
if (azimuth < 0) {
azimuth += 360;
}
float pitch = (float) (results[1] * 180 / Math.PI);
float roll = (float) (results[2] * 180 / Math.PI);
ご覧のとおり、ここには魔法はありません。重力計値と磁力計値を使用する準備ができたら、このコードを呼び出します。
私の質問は、電話を傾けたときに方位角が狂わないようにするにはどうすればよいですか?
Google Play ストアで無料アプリCompassを確認しましたが、この問題は解決していませんが、解決策があることを願っています。
私は2つの解決策を考えています:
AR ビューが非常に制約されたピッチ角でのみ機能するようにします。現在、次のようなものがあり
pitch >= -5 && pitch <= 30
ます。これが満たされていない場合、ユーザーには、電話を縦向きに回転するように求める画面が表示されます。どういうわけかピッチを使用して方位角を抑制します。これはかなりデバイス固有のソリューションのように思えますが、もちろん私は提案を受け付けています。
また、まともな解決策を数時間探してきましたが、2) よりも優れた解決策を見つけられなかったと付け加えることもできます。
前もって感謝します!