5

WWDCから、デバイスの動きに合わせて回転するOpenGLESのティーポットを示す話があったことを覚えています。急須が宇宙に静止しているように見えました。

アプリが起動すると、ティーポットは特定の位置から始まりました。次に、デバイスが回転すると、ティーポットも回転して空間に静止しました。

この講演で、彼らは、たとえばアプリの起動時に、ユーザーが最初にデバイスをどのように持っていたかを示す「参照フレーム」を取得する必要があると述べました。

たとえば、加速度計の軸は次のとおりです。

加速度計

Y軸を中心とした回転を知りたいのですが、ユーザーがデバイスをどのように持っているかを基準にしています。したがって、ユーザーがそれを直立させてYを中心に回転させる場合、その回転値を知る必要があります。

重要なのは、測定値から重力を取り除くことだと思いますか?また、私はiPhone 4 / 4Sをジャイロでターゲットにしていますが、CoreMotionはそれらを自動的にセンサーフュージョンすると思います。

ユーザーがデバイスをY軸を中心にどれだけ回転させたかをどのように把握できますか?

4

1 に答える 1

3

あなたの他の質問から、このCMDeviceMotionHandlerがCoreMotionによって呼び出されないのはなぜですか? あなたが iOS 4 で作業していることは知っていますが、iOS5 では状況が少し変わりました。一般的なジャイロ データ、または DeviceMotion で行われるような加速度計とジャイロ データのさらに優れたセンサー フュージョンは、適切な結果を取得するための最良のアプローチです。

したがって、これを実行している場合は、CMAttitude の MultiplyByInverseOfAttitudeメソッドを使用して、参照フレームに関連するすべての CMDeviceMotion の結果を取得する必要があります。最初の CMAttitude の参照をクラス メンバーに保存し、それ以降のすべての呼び出しでこれを使ってmultiplyByInverseOfAttitude を呼び出すだけです。次に、CMDeviceMotion.attitude のすべてのメンバーがこの参照フレームを参照します。

Y 軸周りの回転を取得するための最初のアプローチは、オイラー角、つまりCMAttitude.rollを取得することです。小さな動きを追跡する必要があるだけなら、これで問題ないかもしれません。モーションがより広範囲である場合、ジンバ​​ル ロックに関する問題が発生します。次に、安定した結果を得るにはクォータニオン操作などの高度な手法が必要ですが、これは独自の問題のように思えます。

于 2012-06-01T14:59:14.237 に答える