Exemplo n.º 1
0
        /// <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 );
        }