2012-05-08 3 views
6

私はKinectとiPhoneベースのアプリケーションを構築しようとしています。iPhoneから加速度計の読みを解釈する方法

私はkinectから返された軌道に基づいて、X軸とZ軸のそれぞれの上で時間の経過とともに自分の手の加速を計算しようとしています。基本的には、標準的な時間間隔0.5秒または15フレーム(dt)と3ポイント(x0,x1およびx2)を0.5秒間隔で選択しています。まず、3点の位置はメートルで述べられています。これらの点を使って私は2つの速度(v0 = (x1 - x0)/dtv1 = (x2 - x1)/dt)を計算しています。最後に、これらの速度を使用して、x1x2の間のアクセラレーションをacc = (v1 - v0)/dtとして計算しています。

これらの計算を各フレームで繰り返すため、加速度の配列が得られます。

私が言ったように、私はiPhoneも持っており、私は自分のiPhone、左手または右手をどの手に持っているかを見たいと思っています。私は、私の手の加速と正しい位置に保持されているiPhoneの加速とを一致させて、同じ軸システムを持つようにしたいと考えています。

唯一の問題は、自分の加速と携帯電話の加速との間に大きな違いがあることです。

各軸の-2〜2の間にありますが、マイナスは-10〜10です。メーター/秒で同様の測定を行うには、iPhoneの加速度をどのように解釈すればよいですか?

+0

基本的には、一定間隔でiPhoneの読み値とKinectの加速度との間のSum Squared Errorを計算しました。しかし、値のスケールが異なると、得られる結果はそれほど信頼できません。 – Simon

+0

うん、それは意味をなさない –

答えて

2

iPhoneの加速度計のデータは、力の単位で提供されています。 x軸は電話画面の上端に、y軸は左端に、z軸は画面の外に向かって真っ直ぐに向かっています。だからあなたの携帯電話が表に表向きに置かれている場合は、それぞれx軸、y軸、z軸の値が(0, 0, -1)になるはずです。自由落下中に携帯電話を降ろしたら、(0, 0, 0)になるはずです。毎秒メートルで3次元の加速度を得るために、あなたはそれを周りに移動すると、このように整列携帯電話を保つと仮定すると、

は乗:あなたは順番に地球の重力の影響を差し引く必要があります

- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration 
{ 
    float g = 9.80665f; 
    float x = acceleration.x * g; 
    float y = acceleration.y * g; 
    float z = (acceleration.z + 1.0f) * g; 
    // x, y, and z now hold the absolute acceleration in ms^-2 
} 

お知らせ4次元の空間時間に比べてリビングルームに対して相対的な加速度を得ることができます。

また、iPhoneの加速度計は非常に騒々しいので、これらの値は電話機が静的であってもジッタがあることに注意してください。そのため、スムージングをいくつか適用する必要があります。しかし、同様のテクニックをポジションデータで行っているように見せて、各フレームの値を配列に入れて0.5秒間の平均値を取得すると、データは既に滑らかになります。

もう1つ注意すべきことは、iPhone加速度計が約2.3gでピークに達していることです。これらの力は達成するのが困難ではありません(例えば、手を一緒に叩いた場合)、それらを超える可能性があり、データを蓄積する技法はあまり信頼できません。

関連する問題