0

質問自体は単純です。CMDeviceMotionモーションを使用する場合、ロールとピッチを含むタイプCMAttitudeのattitudeという名前のオブジェクトが含まれます。ロールとピッチは、Y軸とX軸を中心としたオブジェクトの回転を表します。iPhoneがテーブルの上にあり、ディスプレイが上を向いている場合、ロールとピッチは両方とも0です。iPhoneをY軸またはX軸を中心に回転させると、これらの値が更新されます。

これらの値がどのように計算されるか知りたいのですが、デバイスの現在の重力ベクトルからロールとピッチを計算する方法があります。ピッチは次のように見えます:pitch = -asin(motion.gravity.y)しかし、ロールの計算方法がわかりません。

ご協力いただきありがとうございます

4

3 に答える 3

3
CMQuaternion quat = self.motionManager.deviceMotion.attitude.quaternion;
myRoll = radiansToDegrees(atan2(2*(quat.y*quat.w - quat.x*quat.z), 1 - 2*quat.y*quat.y - 2*quat.z*quat.z)) ;
myPitch = radiansToDegrees(atan2(2*(quat.x*quat.w + quat.y*quat.z), 1 - 2*quat.x*quat.x - 2*quat.z*quat.z)); // PITCH !!!
myYaw = radiansToDegrees(asin(2*quat.x*quat.y + 2*quat.w*quat.z));
于 2014-11-04T22:29:27.287 に答える
0
pitch = atan2(motion.gravity.z, motion.gravity.y)
roll = atan2(motion.gravity.z, motion.gravity.x)

このようにして、ピッチの値はロールのように0+piと0-piの間になります

于 2011-12-11T14:58:01.190 に答える
0

それはおそらく次のようなものです:

roll = -atan(x / z);

ただし、現在の方向に応じて符号を変更する必要があり、z=0の漸近線の周囲に注意してください。

Core Motionは、実際には、加速度計の読み取り値に加えてジャイロ測定値を使用して、姿勢をより正確に計算していると思います(ジンバルロックを処理するためにも使用できます)。

于 2011-12-10T19:48:47.110 に答える