強火で進め

このブログではプログラム関連の記事を中心に書いてます。

ジャイロ(gyroscope)で取得出来る値を調査

iPhone 4に新しく搭載されたジャイロ(gyroscope)を使ってみた - 強火で進め
http://d.hatena.ne.jp/nakamura001/20100628/1277747006

前回作成したこちらのジャイロのサンプルですが pitch や roll のプロパティでは自分がイメージしている値とは異なるものが帰って来ていたのでこんな感じのかなりの力技でやってました。

	NSArray *array = [[currentAttitude description] componentsSeparatedByString:@" "];
	NSString* str = [array objectAtIndex:5];
	gyroDataLabel.text = [NSString stringWithFormat:@"%d", [str intValue]];

流石にこんな力技でやってると description が返す値の形式に変更がかかったら一発でダメになるプログラムなので今回、ちょっと詳しく pitch などが返す値を調べてみました。

(descriptionのPitchの値)/pitchプロパティ

で倍率をチェックしたところ 57.296 。変な値だと思っていたのはただ「ラジアン度」で返しているだけでした。以下の様なマクロで値を出力してみたところ、descriptionと同じ様にPicthでは0〜90,-90〜0、RollとYawでは0〜180,-180〜0の範囲で値を取得する事が出来ました。

#define PI 3.14159265358979323846
#define RadianToDegree(Radian) ((Radian) * (180.0 / PI))
	 NSLog(@"picth %f", RadianToDegree(currentAttitude.pitch));

サンプルはこちらからDL出来ます。

「基準データ変更」ボタンを押すと現在の姿勢を基準にそこからの差分で値を返します。

詳しくは前回のエントリーの動画を確認してみて下さい。あの動画で押しているボタンと同じ動作になります。

プログラムの仕組みについては以下のサイトの「Handling Processed Device-Motion Data」の項目辺りを参照して下さい。

Event Handling Guide for iOS: Motion Events
http://developer.apple.com/iphone/library/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html

まとめ

descriptionの値→Radian度
プロパティの値→Degree度