5

制御/ステアリングに使用されるAndroidアプリケーションを含むプロジェクトに取り組んでいます。

  • 速度:電話を前後に傾けると(ピッチ)、ガスの供給と破損をシミュレートします。
  • 方向:電話を左右に傾ける(ロールする)と、左右へのステアリングをシミュレートします。

私はすでにうまくいくように見えるいくつかのコードを書きました。しかし、よく見てみると、いくつかの値が奇妙に機能していることがわかりました。

電話を前後に傾けて速度を処理すると、期待どおりの速度と方向の値が得られます。しかし、方向を処理するために電話を左右に傾けると、いくつかの値が破損しているように見えます。左右に傾けると、方向の値(ロール)だけでなく、速度の値(ピッチ)にも影響します。

追加情報:

  • Android2.2のプログラミング
  • デバイスはGoogleNexusOneです
  • デバイスを縦向きに保持する

センサー値を読み取るために使用する最も関連性の高いコードは次のとおりです。

public void onSensorChanged(SensorEvent sensorEvent)
{        
    synchronized (this)
    {
        if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION)
        {
            float azimuth = sensorEvent.values[0]; // azimuth rotation around the z-axis
            float pitch = sensorEvent.values[1];   // pitch rotation around the x-axis
            float roll = sensorEvent.values[2];    // roll rotation around the y-axis

            System.out.println("pitch: " + pitch);
            System.out.println("roll: " + roll);
            System.out.println("--------------------");

            // Convert the sensor values to the actual speed and direction values
            float speed = (pitch * 2.222f) + 200;
            float direction = roll * -2.222f;    

したがって、コードを実行すると、出力された値を確認します。デバイスを左右に傾けると、ピッチ値にも影響を与えるようです。どうして?そして、「ロール」するときに、どうすれば純粋なピッチ値を取得できますか?電話機を左/右に傾けても、ピッチ値に影響を与えたり破損させたりしないようにします。

4

1 に答える 1

2

ジンバルロックを読むことができます。それは前に私を噛んだ。

于 2011-03-08T12:40:02.490 に答える