15

コアモーションを介してジャイロスコープを使用しようとしている非常に単純なアプリケーションがあります。

この時点で、テストの目的で、ロール、ピッチ、ヨーの値を取得し、画面に印刷しています。下の写真によると、私が知る限り、ロール、ピッチ、ヨーは赤、緑、青の軸に対応していますよね?

わかった。左側にあるテーブル(右側のホームボタン)にiPhoneを置いたとき、テーブル平面に対して完全に90度で、これらはロール、ピッチ、ヨーについて読み取った値です:-90、0、 0.次に、テーブルの垂直軸に従ってiPhoneを反時計回りに回転させ始めます。これは、テーブルの垂直軸に従って正の方向になります。iPhoneの場合、それはピッチの回転を意味しますが、私が回転しても、ピッチは一定のままであり、YAWが変化します!!!!!

iPhoneがテーブルの左側に置かれている場合、緑色の軸(ピッチ)は垂直です。X上でデバイスを反時計回り(正)に回転させると、ヨーではなくピッチ角が増加するはずです。

これについて私が持っている唯一の説明は、デバイスを回転させてもジャイロスコープの軸は回転しないということです。したがって、デフォルトの姿勢基準を使用している場合、iPhoneは上向きの静止位置がデフォルトであると見なし、青い軸(ヨー)は常に垂直軸になります。これは正しいです?

これは私が使用しているコードです...

メインコード

motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0/60.0; //60 Hz
[motionManager startDeviceMotionUpdates];


timer = [[NSTimer scheduledTimerWithTimeInterval:(1.0/60.0) 
          target:self
    selector:@selector( readIt )
userInfo:nil
 repeats:YES]
 retain];

残りのコード

#define degrees(x) (180.0 * x / M_PI)

- (void) readIt {

//  CMAttitude *referenceAttitude;
    CMAttitude *attitude;

    CMDeviceMotion *motion = motionManager.deviceMotion;        
    if (!motion) {
        return;
    }

    attitude = motion.attitude;

    NSLog(@"roll = %f... pitch = %f ... yaw = %f", degrees(attitude.roll), degrees(attitude.pitch), degrees(attitude.yaw));


}

ここに画像の説明を入力してください

4

2 に答える 2

2

これに関する詳細については、私の質問と選択した回答を確認してください。特に、その答えは、なぜこの 2 つがつながっているのかを教えてくれると思います。

于 2011-03-06T21:53:41.990 に答える
0

特にピッチ回転を扱う場合、ジンバ​​ルロックに関連する問題のように聞こえます。あなたはiPhoneを見ているかもしれません - iPhoneの回転を理解する

ジンバルロックまたは同様の記事で現象について説明しています。ソリューションは、アプリに必要なものによって異なります。ほとんどの場合、オイラー角の使用を避け、代わりに回転行列または四元数表現を使用する必要があります。わかりました、それは時々不可能です。開始するには、WWDC 2010 ティーポット コア モーションの例を参考にすることをお勧めします。

于 2011-03-08T14:23:21.297 に答える