001 /*----------------------------------------------------------------------------*/ 002 /* Copyright (c) FIRST 2008-2012. All Rights Reserved. */ 003 /* Open Source Software - may be modified and shared by FRC teams. The code */ 004 /* must be accompanied by the FIRST BSD license file in the root directory of */ 005 /* the project. */ 006 /*----------------------------------------------------------------------------*/ 007 008 package edu.wpi.first.wpilibj; 009 010 /** 011 * A Skeleton object to be used with Kinect data from the 012 * FRC Kinect server on the DriverStation 013 * @author koconnor 014 */ 015 public class Skeleton { 016 017 /** 018 * The TrackState of the skeleton 019 */ 020 public static class tTrackState{ 021 022 /** The integer value representing this enumeration. */ 023 public final int value; 024 025 protected static final int kNotTracked_val = 0; 026 protected static final int kPositionOnly_val = 1; 027 protected static final int kTracked_val = 2; 028 029 /** TrackState: Not Tracked */ 030 public static final tTrackState kNotTracked = new tTrackState(kNotTracked_val); 031 /** TrackState: Position Only */ 032 public static final tTrackState kPositionOnly = new tTrackState(kPositionOnly_val); 033 /** TrackState: Tracked */ 034 public static final tTrackState kTracked = new tTrackState(kTracked_val); 035 036 private tTrackState(int value){ 037 this.value = value; 038 } 039 } 040 041 /** 042 * The Joint TrackingState 043 */ 044 public static class tJointTrackingState{ 045 /** The integer value representing this enumeration. */ 046 public final int value; 047 048 protected static final int kNotTracked_val = 0; 049 protected static final int kInferred_val = 1; 050 protected static final int kTracked_val = 2; 051 052 /** Joint TrackingState: Not Tracked */ 053 public static final tJointTrackingState kNotTracked = new tJointTrackingState(kNotTracked_val); 054 /** Joint TrackingState: Inferred */ 055 public static final tJointTrackingState kInferred = new tJointTrackingState(kInferred_val); 056 /** Joint TrackingState: Tracked */ 057 public static final tJointTrackingState kTracked = new tJointTrackingState(kTracked_val); 058 059 private tJointTrackingState(int value){ 060 this.value = value; 061 } 062 } 063 064 /** 065 * An individual Joint from Kinect data 066 */ 067 public class Joint { 068 protected float x, y, z; 069 protected byte trackingState; 070 071 Joint(){ x = y = z = 0;} 072 073 public float getX() {return x;} 074 public float getY() {return y;} 075 public float getZ() {return z;} 076 public tJointTrackingState getTrackingState() { 077 switch(trackingState){ 078 case 1: 079 return tJointTrackingState.kInferred; 080 case 2: 081 return tJointTrackingState.kTracked; 082 default: 083 return tJointTrackingState.kNotTracked; 084 } 085 } 086 } 087 088 /** 089 * Helper class used to index the joints in a (@link Skeleton) 090 */ 091 public static class tJointTypes{ 092 public final int value; 093 094 protected static final int kHipCenter_val = 0; 095 protected static final int kSpine_val = 1; 096 protected static final int kShoulderCenter_val = 2; 097 protected static final int kHead_val = 3; 098 protected static final int kShoulderLeft_val = 4; 099 protected static final int kElbowLeft_val = 5; 100 protected static final int kWristLeft_val = 6; 101 protected static final int kHandLeft_val = 7; 102 protected static final int kShoulderRight_val = 8; 103 protected static final int kElbowRight_val = 9; 104 protected static final int kWristRight_val = 10; 105 protected static final int kHandRight_val = 11; 106 protected static final int kHipLeft_val = 12; 107 protected static final int kKneeLeft_val = 13; 108 protected static final int kAnkleLeft_val = 14; 109 protected static final int kFootLeft_val = 15; 110 protected static final int kHipRight_val = 16; 111 protected static final int kKneeRight_val = 17; 112 protected static final int kAnkleRight_val = 18; 113 protected static final int kFootRight_val = 19; 114 protected static final int kCount_val = 20; 115 116 public static final tJointTypes kHipCenter = new tJointTypes(kHipCenter_val); 117 public static final tJointTypes kSpine = new tJointTypes(kSpine_val); 118 public static final tJointTypes kShoulderCenter = new tJointTypes(kShoulderCenter_val); 119 public static final tJointTypes kHead = new tJointTypes(kHead_val); 120 public static final tJointTypes kShoulderLeft = new tJointTypes(kShoulderLeft_val); 121 public static final tJointTypes kElbowLeft = new tJointTypes(kElbowLeft_val); 122 public static final tJointTypes kWristLeft = new tJointTypes(kWristLeft_val); 123 public static final tJointTypes kHandLeft = new tJointTypes(kHandLeft_val); 124 public static final tJointTypes kShoulderRight = new tJointTypes(kShoulderRight_val); 125 public static final tJointTypes kElbowRight = new tJointTypes(kElbowRight_val); 126 public static final tJointTypes kWristRight = new tJointTypes(kWristRight_val); 127 public static final tJointTypes kHandRight = new tJointTypes(kHandRight_val); 128 public static final tJointTypes kHipLeft = new tJointTypes(kHipLeft_val); 129 public static final tJointTypes kKneeLeft = new tJointTypes(kKneeLeft_val); 130 public static final tJointTypes kAnkleLeft = new tJointTypes(kAnkleLeft_val); 131 public static final tJointTypes kFootLeft = new tJointTypes(kFootLeft_val); 132 public static final tJointTypes kHipRight = new tJointTypes(kHipRight_val); 133 public static final tJointTypes kKneeRight = new tJointTypes(kKneeRight_val); 134 public static final tJointTypes kAnkleRight = new tJointTypes(kAnkleRight_val); 135 public static final tJointTypes kFootRight = new tJointTypes(kFootRight_val); 136 public static final tJointTypes kCount = new tJointTypes(kCount_val); 137 138 private tJointTypes(int value){ 139 this.value = value; 140 } 141 } 142 143 public Joint GetHandRight() { return skeleton[tJointTypes.kHandRight.value]; } 144 public Joint GetHandLeft() { return skeleton[tJointTypes.kHandLeft.value]; } 145 public Joint GetWristRight() { return skeleton[tJointTypes.kWristRight.value]; } 146 public Joint GetWristLeft() { return skeleton[tJointTypes.kWristLeft.value]; } 147 public Joint GetElbowLeft() { return skeleton[tJointTypes.kElbowLeft.value]; } 148 public Joint GetElbowRight() { return skeleton[tJointTypes.kElbowRight.value]; } 149 public Joint GetShoulderLeft() { return skeleton[tJointTypes.kShoulderLeft.value]; } 150 public Joint GetShoulderRight() { return skeleton[tJointTypes.kShoulderRight.value]; } 151 public Joint GetShoulderCenter() { return skeleton[tJointTypes.kShoulderCenter.value]; } 152 public Joint GetHead() { return skeleton[tJointTypes.kHead.value]; } 153 public Joint GetSpine() { return skeleton[tJointTypes.kSpine.value]; } 154 public Joint GetHipCenter() { return skeleton[tJointTypes.kHipCenter.value]; } 155 public Joint GetHipRight() { return skeleton[tJointTypes.kHipRight.value]; } 156 public Joint GetHipLeft() { return skeleton[tJointTypes.kHipLeft.value]; } 157 public Joint GetKneeLeft() { return skeleton[tJointTypes.kKneeLeft.value]; } 158 public Joint GetKneeRight() { return skeleton[tJointTypes.kKneeRight.value]; } 159 public Joint GetAnkleLeft() { return skeleton[tJointTypes.kAnkleLeft.value]; } 160 public Joint GetAnkleRight() { return skeleton[tJointTypes.kAnkleRight.value]; } 161 public Joint GetFootLeft() { return skeleton[tJointTypes.kFootLeft.value]; } 162 public Joint GetFootRight() { return skeleton[tJointTypes.kFootRight.value]; } 163 public Joint GetJoint(tJointTypes index) { return skeleton[index.value]; } 164 165 public tTrackState GetTrackState(){ return trackState;} 166 167 Skeleton(){ 168 for(int i=0; i<20; i++){ 169 skeleton[i] = new Joint(); 170 } 171 } 172 173 protected Joint[] skeleton = new Joint[20]; 174 protected tTrackState trackState; 175 }