00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __rdActuatedModel_SDFast_h__
00010 #define __rdActuatedModel_SDFast_h__
00011
00012
00013
00014
00015
00016 #include <rdTools.h>
00017 #include "rdSDFastDLL.h"
00018 #include <rdModel.h>
00019 #include <rdActuatorSet.h>
00020 #include <rdContactForceSet.h>
00021 #include "rdSDFast.h"
00022
00023
00024
00025
00030 class RDSDFAST_API rdActuatedModel_SDFast : public rdSDFast
00031 {
00032
00033
00034
00035 protected:
00036 rdActuatorSet *_actuatorSet;
00037 rdContactForceSet *_contactSet;
00038
00039
00040
00041
00042 public:
00043 rdActuatedModel_SDFast(rdActuatorSet *aActuators,
00044 rdContactForceSet *aContacts);
00045 virtual ~rdActuatedModel_SDFast();
00046 private:
00047 void setNull();
00048 void constructControls();
00049 void constructStates();
00050 void constructPseudoStates();
00051 void constructNames();
00052
00053 public:
00054
00055
00056
00057
00058 const char* getActuatorName(int aIndex) const;
00059
00060 const rdActuatorSet* getActuatorSet() const;
00061
00062 const rdContactForceSet* getContactForceSet() const;
00063
00064 virtual void setControls(const double aX[]);
00065
00066 virtual void setStates(const double aY[]);
00067 virtual void getStates(double rY[]) const;
00068 virtual double getState(int aIndex) const;
00069
00070 virtual void setPseudoStates(const double aYP[]);
00071 virtual void getPseudoStates(double rYP[]) const;
00072 virtual double getPseudoState(int aIndex) const;
00073
00074
00075
00076
00077 virtual void computeActuation();
00078 virtual void computeActuatorStateDerivatives(double rDY[]);
00079 virtual void applyActuatorForce(int aID);
00080 virtual void applyActuatorForces();
00081 virtual double getActuatorForce(int aID) const;
00082 virtual double getActuatorSpeed(int aID) const;
00083 virtual double getActuatorPower(int aID) const;
00084
00085
00086
00087
00088 virtual void
00089 computeContact();
00090 virtual void
00091 applyContactForce(int aID);
00092 virtual void
00093 applyContactForces();
00094 virtual int
00095 getContactBodyA(int aID) const;
00096 virtual int
00097 getContactBodyB(int aID) const;
00098 virtual void
00099 setContactPointA(int aID,const double aPoint[3]);
00100 virtual void
00101 getContactPointA(int aID,double rPoint[3]) const;
00102 virtual void
00103 setContactPointB(int aID,const double aPoint[3]);
00104 virtual void
00105 getContactPointB(int aID,double rPoint[3]) const;
00106 virtual void
00107 getContactForce(int aID,double rF[3])const;
00108 virtual void
00109 getContactNormalForce(int aID,double rFP[3],double rFV[3],double rF[3])
00110 const;
00111 virtual void
00112 getContactTangentForce(int aID,double rFP[3],double rFV[3],double rF[3])
00113 const;
00114 virtual void
00115 getContactStiffness(int aID,const double aDX[3],double rDF[3]) const;
00116 virtual void
00117 getContactViscosity(int aID,const double aDV[3],double rDF[3]) const;
00118 virtual void
00119 getContactFrictionCorrection(int aID,double rDFFric[3]) const;
00120 virtual double
00121 getContactForce(int aID) const;
00122 virtual double
00123 getContactSpeed(int aID) const;
00124 virtual double
00125 getContactPower(int aID) const;
00126
00127
00128
00129
00130 virtual void promoteControlsToStates(const double aX[],double aDT);
00131
00132
00133
00134
00135 int deriv(double t,double *xt,double *y,double *dy);
00136 int deriv(double t,double *xt,double *y,double *dqdt,double *dudt);
00137
00138
00139
00140
00141 void
00142 integBeginCallback(int i,double dt,double t,double *x,double *y,
00143 void *cd=NULL);
00144 void
00145 integStepCallback(double *xtPrev,double *yPrev,int i,double dt,
00146 double t,double *x,double *y,void *cd=NULL);
00147
00148
00149
00150 };
00151
00152
00153
00154
00155 #endif // #ifndef __rdActuatedModel_SDFast_h__