6

Kinect と iPhone ベースのアプリケーションを構築しようとしています。

Kinect によって返された軌跡に基づいて、XY 軸と Z 軸のそれぞれで時間の経過に伴う手の加速度を計算しようとしています。基本的に、0.5 秒または 15 フレーム ( dt) と 3 つのポイント ( x0x1およびx2) の標準的な時間間隔を 0.5 秒間隔で選択しています。最初に、3 点の位置がメートル単位で示されていることに注意してください。v0 = (x1 - x0) / dtこれらのポイントを使用して、2 つの速度 (と)を計算していますv1 = (x2 - x1) / dt。最後に、これらの速度を使用して、 と の間の加速度x1x2として計算していacc = (v1 - v0) / dtます。

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

私が言ったように、私も iPhone を持っています。私は自分の iPhone を左手と右手のどちらの手で持っているかを知りたいのです。これを行うには、手の加速度を正しい位置に保持された iPhone の加速度と一致させて、同じ座標系を持つようにします。

唯一の問題は、私の加速度と電話の加速度に大きな違いがあることです。

電話の加速度の読み取り値は、各軸で -2 から 2 の間のどこかですが、私のものは -10 から 10 の間です。メートル/秒で私のものと同様の測定値を取得するには、iPhone の加速度をどのように解釈すればよいですか?

4

1 に答える 1

2

iPhone の加速度計データは、g 力の単位で提供されます。x 軸はスマートフォンの画面の上端に、y 軸は左端に、z 軸は画面から真っ直ぐ伸びます。したがって、電話をテーブルの上に置いた状態で(0, 0, -1)、x、y、z 軸の値をそれぞれ取得する必要があります。携帯電話を落とした場合、自由落下中に(0, 0, 0).

携帯電話をこのように位置合わせしたまま移動すると仮定すると、3 次元の加速度が毎秒 2 メートルで得られます。

- (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 でピークに達することです。これらの g 力を達成するのは難しくありません (たとえば、手をたたくなど)。そのため、g 力を超える可能性があり、データを蓄積する手法はあまり信頼できません。

于 2012-05-25T21:21:21.477 に答える