/* ----------------------------------------------------------------- */ /* 'ZServo.h' */ /* Header for ZServo.cc */ /* */ /* last modified 07/04/2003 */ /* used to define macros for servo- handling */ /* */ /* */ /* */ /* */ /* (C) Jochen Zimmermann */ /* ----------------------------------------------------------------- */ /****Semantics as set in HDT********** +Right leg from top to bottom: ---------------------------------- right arm = R_Arm right hip side = R_HipSide right hip bend = R_HipBend right knee = R_Knee right ankle bend = R_AnkleBend right ankle side = R_AnkleSide +Left leg from top to bottom: ---------------------------------- left arm = L_Arm left hip side = L_HipSide left hip bend = L_HipBend left knee = L_Knee left ankle bend = L_AnkleBend left ankle side = L_AnkleSide *************************************/ //avoid redefinition during static binding #ifndef ZSERVO #define ZSERVO #include "ZHeaders.h" /* //needed headers, included via ZHeaders.h #include "eyebot.h" #include "fastmath.h" */ /*****Re-defines for internal use****/ #define NUMBEROFSERVOS 10 #define RHIPS 0 #define LHIPS 1 #define RHIPB 2 #define LHIPB 3 #define RKNEE 4 #define LKNEE 5 #define RANKB 6 #define LANKB 7 #define RANKS 8 #define LANKS 9 #define BODY -1 #define RTHIGH 2 #define LTHIGH 3 #define RSHANK 4 #define LSHANK 5 #define RFOOT 8 #define LFOOT 9 /* not connected #define RARM 10 #define LARM 11 */ #define HIPDISTANCE 56 class Servo { public: static Servo* GetTheInstance(); /*instance retriever*/ void Init(); /*initialises servos and members*/ void Release(); /*releases servos, necessary to call before main-exit*/ int Set (int* position, int speed); /*drives servos to absolute positions with chosen speed*/ void Get (int* position); /*returns actual absolute servo positions in buffer*/ int GetLimit (int position); /*returns absolute servo limit of chosen joint*/ int Move(int* delta, int speed); /*drives servos relative to their actual positions with chosen speed*/ private: ServoHandle handle[NUMBEROFSERVOS]; /*array of handles for servos, valid after called Init()*/ int position[NUMBEROFSERVOS]; /*buffer for servo-positions*/ int limit[NUMBEROFSERVOS]; /*limiters for servo-angles (to protect the hardware!!!)*/ bool initialized; /*latch to determine, if servos are initialised*/ Servo(); /*standard constructor for initialisations*/ static Servo SingleInstance; /*The Single Instance of this Class*/ }; #endif