web-dev-qa-db-ja.com

Appleジャイロスコープのサンプルコード

ジャイロスコープのデータを使用してopenglテクスチャを回転するようなジャイロスコープベースのプロジェクトを開発する予定です、AppleジャイロスコープまたはopenGLとジャイロスコープを統合するためのチュートリアルについて... コアモーションガイド および イベント処理ガイド 以外は見つかりませんでした。

更新:利用可能なサンプルがあれば教えてください..

30

ジャイロの更新を取得するには、モーションマネージャーオブジェクトと、オプションで(ただし推奨)参照姿勢オブジェクトを作成する必要があります

そのため、インターフェイス定義に次を追加します。

CMMotionManager *motionManager;
CMAttitude *referenceAttitude;

ドキュメントによると、アプリケーションごとにこれらのマネージャーの1つのみを作成する必要があります。 motionManagerをシングルトンを介してアクセス可能にすることをお勧めしますが、クラスを1回だけインスタンス化する場合は必要のない追加の作業です。

次に、initメソッドでモーションマネージャーオブジェクトを割り当てる必要があります。

motionManager = [[CMMotionManager alloc] init];
referenceAttitude = nil; 

モーション更新を有効にする場合は、enableMotionメソッドを作成するか、initメソッドから呼び出します。以下は、デバイスの初期姿勢を保存し、デバイスにジャイロのサンプリングと姿勢プロパティの更新を継続させます。

-(void) enableMotion{
        CMDeviceMotion *deviceMotion = motionManager.deviceMotion;      
        CMAttitude *attitude = deviceMotion.attitude;
        referenceAttitude = [attitude retain];
        [motionManager startDeviceMotionUpdates];
}

ジャイロとOpenGLを使用したバーチャルリアリティアプリケーションの場合、非常に簡単です。現在のジャイロの姿勢(回転)を取得して、OpenGL互換のマトリックスに保存する必要があります。以下のコードは、現在のデバイスの動きを取得して保存します。

GLfloat rotMatrix[16];

-(void) getDeviceGLRotationMatrix 
{
        CMDeviceMotion *deviceMotion = motionManager.deviceMotion;      
        CMAttitude *attitude = deviceMotion.attitude;

        if (referenceAttitude != nil) [attitude multiplyByInverseOfAttitude:referenceAttitude];
        CMRotationMatrix rot=attitude.rotationMatrix;
        rotMatrix[0]=rot.m11; rotMatrix[1]=rot.m21; rotMatrix[2]=rot.m31;  rotMatrix[3]=0;
        rotMatrix[4]=rot.m12; rotMatrix[5]=rot.m22; rotMatrix[6]=rot.m32;  rotMatrix[7]=0;
        rotMatrix[8]=rot.m13; rotMatrix[9]=rot.m23; rotMatrix[10]=rot.m33; rotMatrix[11]=0;
        rotMatrix[12]=0;      rotMatrix[13]=0;      rotMatrix[14]=0;       rotMatrix[15]=1;
}

あなたがそれで何をしたいのかに応じて、あなたはそれを非常に簡単に反転させる必要があるかもしれません。回転の逆は、列と行を入れ替えることを意味する転置にすぎません。したがって、上記は次のようになります。

rotMatrix[0]=rot.m11; rotMatrix[4]=rot.m21; rotMatrix[8]=rot.m31;  rotMatrix[12]=0;
rotMatrix[1]=rot.m12; rotMatrix[5]=rot.m22; rotMatrix[9]=rot.m32;  rotMatrix[13]=0;
rotMatrix[2]=rot.m13; rotMatrix[6]=rot.m23; rotMatrix[10]=rot.m33; rotMatrix[14]=0;
rotMatrix[3]=0;       rotMatrix[7]=0;       rotMatrix[11]=0;       rotMatrix[15]=1;

ヨー、ピッチ、ロールの角度が必要な場合は、次を使用して簡単にアクセスできます。

attitude.yaw
attitude.pitch
attitude.roll
58
twerdster

私はいくつかのサンプルコードを非常に単純なプロジェクトとして探しています。数日間の検索の後、私はついにそれを見つけました。ここに行くよ!

http://cs491f10.wordpress.com/2010/10/28/core-motion-gyroscope-example/

15
SamB

CoreMotionは、ジャイロスコープのデータを取得する方法です。生データのCMGyrodataを確認するか、DeviceMotionの姿勢と回転速度のプロパティを使用します。

登録済みのApple開発者の場合、 'Device Motion' WWDCセッションをご覧になることをお勧めします。

5
mbehan

CoreMotionフレームワーク用のAppleのサンプルコードの一部を次に示します。 http://developer.Apple.com/library/ios/#samplecode/pARk/Introduction/Intro.html#//Apple_ref/doc/uid/DTS4001108

古いスタイルのUIAccelerometer(ただし、OpenGLを操作するための優れたサンプルコードがあります): http://developer.Apple.com/library/ios/#samplecode/GLGravity/Listings/Classes_GLGravityView_m.html#// Apple_ref/doc/uid/DTS40007327-Classes_GLGravityView_m-DontLinkElementID_6

3
drewish