ブログ@kaorun55

HoloLensやKinectなどのDepthセンサーを中心に書いています。

Kinect for Windows SDK v1.6 の 加速度センサーを使ってみる(C#)

v1.6で新たに取得できるようになった、3軸加速度センサーの値を見てみましょう。

加速度センサーは特に設定など必要なく、値が欲しいときにKinectSensor.AccelerometerGetCurrentReading()を呼び出すとVector4として加速度の値が返ってきます。それぞれ軸の方向は次のようになっています。

単純に値を表示するだけであれば、次のようにします。全体のコードはこちらにあります

Vector4 accelerometer = kinect.AccelerometerGetCurrentReading();

textAccelerometerX.Text = accelerometer.X.ToString();

textAccelerometerY.Text = accelerometer.Y.ToString();

textAccelerometerZ.Text = accelerometer.Z.ToString();

この加速度センサーの値から現在のKinectの角度を取得してみましょう。加速度センサーの扱いは、Windows Phoneと同じようにできるので、こちらのサイトを参考に角度を求めてみました。座標系が異なるため軸と値を少しいじっています。

int GetAccelerometerAngle()

{

// http://thinkit.co.jp/story/2011/11/11/2329?page=0,2

Vector4 accelerometer = kinect.AccelerometerGetCurrentReading();

return -(int)Math.Round( Math.Asin( accelerometer.Z ) * 180 / Math.PI );

}

これをやっていて初めて気づいたのですが、KinectSensor.ElevationAngleで取得される角度は、上記GetAccelerometerAngle()で取得される値と同じなのですね。ずっとチルトの角度だと思っていたのですが、水平位置に対する角度だったようです。台座をいろいろな角度で持ってみてKinectSensor.ElevationAngleを0に設定すると、Kinectは水平方向に動きました。