3

電話が360度回転したかどうかを検出するアプリケーションを構築しています。このローテーションは、ほとんどの場合35秒で完了します。これを正確に検出するにはどうすればよいですか?「統合」と短期間のジャイロスコープの使用、およびジャイロスコープを補正するための加速度計に関するいくつかの記事を読みました。これを達成するための最良の方法は何ですか、そして最初に、ジャイロスコープから回転値を取得するにはどうすればよいですか?

逆行列のCMAttitudeを掛けたものから回転行列を本当に理解していません。CMAttitude.yawは、電話を使用していないときでも異なる値を表示します。ティーポットの例も見ました。私のコードはほぼ同じですが、OpenGLを使用していないため、RotationMatrixからのデータを自分で処理する必要があります。

よろしくお願いします、Hidde

4

1 に答える 1

1

コアモーションAPIを調べると、回転速度を監視するのが最善の策のようです。具体的には、このディスカッションでrotationRateプロパティを宣言するCMDeviceMotionインターフェイスを介して:

CMRotationRate構造には、3つの軸を中心としたデバイスの回転速度を指定するデータが含まれています。このプロパティの値には、コアモーションアルゴリズムによってバイアスが除去されたジャイロスコープデータの測定値が含まれます。一方、CMGyroDataの同じ名前のプロパティは、ジャイロスコープからの生データを提供します。構造体タイプはCMGyroData.hで宣言されています。

CMMotionManagerメソッドを介して関心を宣言することにより、イベントを監視できます。

- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame toQueue:(NSOperationQueue *)queue withHandler:(CMDeviceMotionHandler)handler

次に、完全な360度の回転を構成するために、特定の速度で回転が発生する時間を計算するために、少し計算を行う必要があります。

于 2011-11-26T10:25:57.680 に答える