taoControlJt.h

Go to the documentation of this file.
00001 #ifndef _taoControlJt_h
00002 #define _taoControlJt_h
00003 
00004 #include "taoTypes.h"
00005 #include "taoJoint.h"
00006 #include "taoControl.h"
00007 #include "deMath.h"
00008 
00009 class taoJoint;
00010 class taoDNode;
00011 class taoNodeRoot;
00012 
00020 class taoJCParam
00021 {
00022         friend class taoControlJt;
00023 public:
00024         taoJCParam(taoJoint* joint)
00025         {
00026                 _joint = joint;
00027                 _controlOn = 1;
00028                 _useGlobalGains = 1;
00029                 _goalVelocityAuto = 0;
00030                 _jtLimitSoftOn = 0;
00031                 _jlU = 0;
00032                 _jlL = 0;
00033                 _kpU = 0;
00034                 _kvU = 0;
00035                 _kpL = 0;
00036                 _kvL = 0;
00037                 _kp = 0;
00038                 _kv = 0;
00039                 reset(-1);
00040         }
00041 
00042         taoDVar* getDVar() { return _joint->getDVar(); }
00043 
00044         virtual void reset(deFloat time) { _tg = time; _tgo = time; }
00045         virtual void moveGoal2Old() {}
00046 
00047         virtual void PDLaw(taoJCParam* jcpRoot, deFloat s, deFloat periodInv) {}
00048         virtual void ZeroLaw() {}
00049         virtual void addJointLimitSoft() {}
00050 
00051         virtual void setGoalPosition(deFrame* goal) {}
00052 
00053         deInt& controlOn() { return _controlOn; }               
00054         deInt& useGlobalGains() { return _useGlobalGains; }     
00055         deInt& goalVelocityAuto() { return _goalVelocityAuto; } 
00056         deInt& jtLimitSoftOn() { return _jtLimitSoftOn; }       
00057         deFloat& jlU() { return _jlU; }                 
00058         deFloat& jlL() { return _jlL; }                 
00059         deFloat& kpU() { return _kpU; }                 
00060         deFloat& kvU() { return _kvU; }                 
00061         deFloat& kpL() { return _kpL; }                 
00062         deFloat& kvL() { return _kvL; }                 
00063         deFloat& kp() { return _kp; }                   
00064         deFloat& kv() { return _kv; }
00065 
00066 protected:
00067         deInt _controlOn;               
00068         deInt _useGlobalGains;  
00069         deInt _goalVelocityAuto;        
00070         deInt _jtLimitSoftOn;   
00071         deFloat _jlU;                   
00072         deFloat _jlL;                   
00073         deFloat _kpU;                   
00074         deFloat _kvU;                   
00075         deFloat _kpL;                   
00076         deFloat _kvL;                   
00077         deFloat _kp;                    
00078         deFloat _kv;                    
00079 
00080 protected:
00081         taoJoint* _joint;
00082         deFloat _tg;
00083         deFloat _tgo;
00084 };
00085 
00093 class taoJCParamSpherical : public taoJCParam
00094 {
00095 public:
00096         taoJCParamSpherical(taoJoint* j) : taoJCParam(j) { reset(0); }
00097         virtual void reset(deFloat time) 
00098         {
00099                 taoJCParam::reset(time);
00100                 _Qo.identity();
00101                 _dQo.zero();
00102                 _Qg.identity();
00103                 _Qgo.identity();
00104                 _dQg.zero();
00105         }
00106         taoVarSpherical* getVarSpherical() { return (taoVarSpherical*)getDVar(); }
00107 
00108         virtual void moveGoal2Old() { _tgo = _tg; _Qgo = _Qg; }
00109 
00110         virtual void PDLaw(taoJCParam* jcpRoot, deFloat s, deFloat periodInv);
00111         virtual void ZeroLaw();
00112 
00113         virtual void addJointLimitSoft();
00114 
00115         virtual void setGoalPosition(deFrame* goal);
00116 
00117         deQuaternion& Qg() { return _Qg; }
00118         deVector3& dQg() { return _dQg; }
00119 
00120 private:
00121         deQuaternion _Qo;
00122         deVector3 _dQo;
00123         deQuaternion _Qg;
00124         deQuaternion _Qgo;
00125         deVector3 _dQg;
00126 };
00127 
00135 class taoJCParamDOF1 : public taoJCParam
00136 {
00137 public:
00138         taoJCParamDOF1(taoJoint* j) : taoJCParam(j) { reset(0); }
00139         virtual void reset(deFloat time)
00140         {
00141                 taoJCParam::reset(time);
00142                 _Qo = 0;
00143                 _dQo = 0;
00144                 _Qg = 0;
00145                 _Qgo = 0;
00146                 _dQg = 0;
00147         }
00148         taoVarDOF1* getVarDOF1() { return (taoVarDOF1*)getDVar(); }
00149 
00150         virtual void moveGoal2Old() { _tgo = _tg; _Qgo = _Qg; }
00151 
00152         virtual void PDLaw(taoJCParam* jcpRoot, deFloat s, deFloat periodInv);
00153         virtual void ZeroLaw();
00154 
00155         virtual void addJointLimitSoft();
00156 
00157         virtual void setGoalPosition(deFrame* goal) {}
00158 
00159         deFloat& Qg() { return _Qg; }
00160         deFloat& dQg() { return _dQg; }
00161 
00162 protected:
00163         deFloat _Qo;
00164         deFloat _dQo;
00165         deFloat _Qg;
00166         deFloat _Qgo;
00167         deFloat _dQg;
00168 };
00169 
00177 class taoJCParamPrismatic : public taoJCParamDOF1
00178 {
00179 public:
00180         taoJCParamPrismatic(taoJoint* j) : taoJCParamDOF1(j) {}
00181         virtual void setGoalPosition(deFrame* goal);
00182 };
00183 
00191 class taoJCParamRevolute : public taoJCParamDOF1
00192 {
00193 public:
00194         taoJCParamRevolute(taoJoint* j) : taoJCParamDOF1(j) {}
00195         virtual void setGoalPosition(deFrame* goal);
00196 };
00197 
00206 class taoControlJt : public taoControl
00207 {
00208 public:
00212         taoControlJt(taoNodeRoot* root);
00213 
00214         virtual ~taoControlJt();
00215         virtual void deleteParamTree(taoDNode* node);
00216 
00217         virtual deFloat time() { return _time; }
00218         virtual void reset(deFloat time);
00219 
00220         virtual void control(deFloat time);
00221 
00223 
00227         virtual void setGoalPosition(taoDNode* node, deFrame* F, deFloat timestamp);
00228 
00229         virtual taoControlJt* getControlJt() { return this; }
00230 
00231         virtual taoJCParam* taoControlJt::createJCParam(taoJoint* joint);
00232 
00233         virtual void jointForceTree(taoDNode* node);
00234         virtual void zeroTorqueControlOffTree(taoDNode* node);
00235 
00236         void resetParamTree(taoDNode* node);
00237 
00238         taoNodeRoot* root() { return _root; }
00239         
00240         taoJCParam* jcpGlobal() { return _jcpGlobal; }                  
00241         deInt& doDynamicControl() { return _doDynamicControl; }         
00242         deInt& includeG() { return _includeG; }                         
00243         taoControlType& controlLawType() { return _controlLawType; }    
00244 
00245 private:
00246         deFloat _time;
00247         taoNodeRoot* _root;
00248         
00249         taoJCParam* _jcpGlobal;                 
00250         deInt _doDynamicControl;                
00251         deInt _includeG;                                
00252         taoControlType _controlLawType; 
00253 
00254 private:
00255         void _PDLaw(taoDNode* node);
00256         void _ZeroLaw(taoDNode* node);
00257         void _FloatLaw(taoDNode* node);
00258 
00259         void _NewParamTree(taoDNode* node);
00260 };
00261 
00262 #endif // _taoControlJt_h

Generated on Sun Apr 9 22:12:43 2006 for TAO by  doxygen 1.4.6-NO