コアモーションを介してジャイロスコープを使用しようとしている非常に単純なアプリケーションがあります。
この時点で、テストの目的で、ロール、ピッチ、ヨーの値を取得し、画面に印刷しています。下の写真によると、私が知る限り、ロール、ピッチ、ヨーは赤、緑、青の軸に対応していますよね?
わかった。左側にあるテーブル(右側のホームボタン)に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));
}