00001
00007 #ifndef STEP_H
00008 #define STEP_H
00009
00010 #include "jwalkincludes.h"
00011 #include "actuators.h"
00012
00013 #define STEP_VERBOSITY 0
00014
00015 #define STEP_LOCATION string("/home/root/jasondata/")
00016 #define STEP_MAX_LENGTH 255
00017
00018 extern string typeToTypeName[];
00019 extern string classToClassName[];
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #define TYPE_NONE_NAME string("NoStep")
00030 #define TYPE_FORWARD_NAME string("WalkForward")
00031 #define TYPE_ARC_NAME string("WalkArc")
00032 #define TYPE_DIAGONAL_NAME string("WalkDiagonal")
00033 #define TYPE_SIDEWARD_NAME string("WalkSideward")
00034 #define TYPE_TURN_NAME string("WalkTurn")
00035 #define TYPE_BACKWARD_NAME string("WalkBackward")
00036
00037 #define CLASS_START_NAME string("Start")
00038 #define CLASS_FOLLOW_NAME string("Follow")
00039 #define CLASS_NORMAL_NAME string("")
00040 #define CLASS_FSTOP_NAME string("FStop")
00041 #define CLASS_NSTOP_NAME string("NStop")
00042
00043 #define LEFT_NAME string("Left")
00044 #define RIGHT_NAME string("Right")
00045
00046
00047 #define LEFT_INF 1000
00048 #define RIGHT_INF -1000
00049
00050 enum StepClassEnum
00051 {
00052 CLASS_START,
00053 CLASS_FOLLOW,
00054 CLASS_NORMAL,
00055 CLASS_FSTOP,
00056 CLASS_NSTOP,
00057 CLASS_NUM_CLASSES
00058 };
00059
00060 enum StepTypeEnum
00061 {
00062 TYPE_NONE,
00063 TYPE_FORWARD,
00064 TYPE_ARC,
00065
00066 TYPE_SIDEWARD,
00067 TYPE_TURN,
00068 TYPE_BACKWARD,
00069 TYPE_NUM_TYPES
00070 };
00071
00072 enum StepSupportHardnessEnum
00073 {
00074 SH_HIP_YAW,
00075 SH_HIP_ROLL,
00076 SH_HIP_PITCH,
00077 SH_KNEE_PITCH,
00078 SH_ANKLE_PITCH,
00079 SH_ANKLE_ROLL,
00080 SH_NUM_JOINTS
00081 };
00082
00083 class Step
00084 {
00085 public:
00086 Step(string name);
00087 ~Step();
00088
00089 void getNextFrame(float** positions, float** hardnesses);
00090 bool hasEnded();
00091 void getInitialPose(float** positions, float** hardnesses);
00092
00093 private:
00094 void setStepProperties();
00095 void resetStep();
00096 void loadStep();
00097 void loadSupportHardnesses();
00098 void useSupportHardnesses(float hardnesses[]);
00099 void readCSV(ifstream& file, float data[STEP_MAX_LENGTH][ALIAS_TARGETS_NOT_HEAD_LENGTH]);
00100 void readCSV(ifstream& file, float data[ALIAS_TARGETS_NOT_HEAD_LENGTH]);
00101
00102 public:
00103 string Name;
00104 float StepOriginalPositions[STEP_MAX_LENGTH][ALIAS_TARGETS_NOT_HEAD_LENGTH];
00105 float StepPositions[STEP_MAX_LENGTH][ALIAS_TARGETS_NOT_HEAD_LENGTH];
00106 float StepOriginalHardnesses[STEP_MAX_LENGTH][ALIAS_HARDNESS_NOT_HEAD_LENGTH];
00107 float StepHardnesses[STEP_MAX_LENGTH][ALIAS_TARGETS_NOT_HEAD_LENGTH];
00108 float StepSupportHardnesses[SM_NUM_MODES][SH_NUM_JOINTS];
00109 unsigned char StepLength;
00110
00111 float StepDirection;
00112 StepClassEnum StepClass;
00113 StepTypeEnum StepType;
00114 bool StepLeft;
00115 Step* NaturalNext;
00116 Step* StopNext;
00117
00118 private:
00119 unsigned char StepCurrentIndex;
00120 unsigned char StepWaitCount;
00121 int StepLastCallTime;
00122 unsigned char StepSwingCount;
00123 unsigned char StepPushCount;
00124
00125 float StepInitialPose[ALIAS_TARGETS_NOT_HEAD_LENGTH];
00126 };
00127
00128 #endif