/// <summary> /// スケルトンを描画する /// </summary> /// <param name="kinect"></param> /// <param name="skeletonFrame"></param> /// <param name="source"></param> /// <returns></returns> private void Power( KinectSensor kinect, SkeletonFrame skeletonFrame ) { // スケルトンのデータを取得する Skeleton skeleton = skeletonFrame.GetFirstTrackedSkeleton(); if ( skeleton == null ) { return; } // 操作に必要なジョイントを取得する Joint rightHand = skeleton.Joints[JointType.HandRight]; Joint rightElbow = skeleton.Joints[JointType.ElbowRight]; Joint leftHand = skeleton.Joints[JointType.HandLeft]; Joint leftElbow = skeleton.Joints[JointType.ElbowLeft]; // ジョイントの描画 DrawSkeleton( kinect, new Joint[] { rightHand, rightElbow, leftHand, leftElbow }); // ジョイントすべてがトラッキング状態のときのみ操作する if ( (rightHand.TrackingState != JointTrackingState.Tracked) || (rightElbow.TrackingState != JointTrackingState.Tracked) || (leftHand.TrackingState != JointTrackingState.Tracked) || (leftElbow.TrackingState != JointTrackingState.Tracked) ) { return; } // 腕の角度を、モーターのパワーに変換して、NXTに送信する sbyte rightPower = 0, leftPower = 0; if ( rightHand.Position.Y > rightElbow.Position.Y ) { rightPower = GetPower( rightHand, rightElbow ); } if ( leftHand.Position.Y > leftElbow.Position.Y ) { leftPower = GetPower( leftHand, leftElbow ); } SetMotorPower( rightPower, leftPower ); }