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 }