![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2006 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: simpRotWngPlt.h,v $ $Revision: 1.28 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00014 00015 #ifndef simpRotWngPlt_H_ 00016 #define simpRotWngPlt_H_ 00017 00018 #include "vrfmodel/rotWngPltCtl.h" 00019 #include <matrix/vlDcm.h> 00020 #include <matrix/vlVector.h> 00021 #include "vrfmodel/vrfmodelDefines.h" 00022 00023 class DtString; 00024 class DtSimManager; 00025 class DtRotaryWingPilotDescriptor; 00026 class Coordinate_System; 00027 class DtVectorInputPort; 00028 00039 class DT_DLL_vrfmodel DtSimpleRotaryWingPilot : public DtRotaryWingPilotController 00040 { 00041 public: 00042 00045 DtSimpleRotaryWingPilot(const DtString& name, 00046 DtVrfObject* owner, 00047 DtSimManager* simManager, 00048 DtComponentDescriptor* desc = 0, 00049 DtReaderWriterRegistry* parentRegistry = 0); 00050 00052 virtual ~DtSimpleRotaryWingPilot(); 00053 00055 00057 virtual void setDesiredInertialPos( 00058 DtReal localX, 00059 DtReal localY, 00060 DtReal localZ); 00061 virtual void setDesiredInertialPos(const DtVector& localPosition); 00062 00064 virtual void setDesiredInertialVel( 00065 DtReal vx, 00066 DtReal vy, 00067 DtReal vz); 00068 virtual void setDesiredInertialVel( 00069 const DtVector& vel); 00070 00073 virtual bool init(); 00074 00077 virtual DtString type() const; 00078 00080 static void vectorBound(DtVector& vec, DtReal bound); 00081 00083 virtual void tick(); 00084 00088 static DtSimComponent * creator(const DtString& name, 00089 DtVrfObject* owner, 00090 DtSimManager* simManager, 00091 DtComponentDescriptor* desc = 0, 00092 DtReaderWriterRegistry* parentRegistry = 0); 00093 00094 private: 00096 DtSimpleRotaryWingPilot(); 00097 00099 DtSimpleRotaryWingPilot(const DtSimpleRotaryWingPilot& orig); 00100 00102 DtSimpleRotaryWingPilot& operator=(const DtSimpleRotaryWingPilot& orig); 00103 00104 protected: 00106 virtual void getTransformationMatrices(); 00107 00109 virtual void checkLandNoFuel(); 00110 00115 void calculateDesiredAndActualLinearVelocity(DtVector& desiredBodyVel, 00116 DtVector& topoDesiredInertialVel, DtVector& actualBodyVel); 00117 00120 virtual void calculateDesiredLinearAcceleration(const DtVector& topoDesiredInertialVel, 00121 DtVector& desiredBodyAcc); 00122 00124 virtual void calculateDesiredAngularVelocity(const DtVector& desiredBodyAcc, 00125 const DtVector& desiredBodyVel, const DtVector& actualBodyVel, 00126 DtVector& desiredAngularVel); 00127 00130 virtual void calculateDesiredAngularAcceleration( 00131 const DtVector& desiredAngularVel, DtVector& desiredAngularAcc); 00132 00136 virtual double calculateWhiteNoiseScaleFactor(); 00137 00140 virtual void setCyclic(const DtVector& desiredAngularAcc, double noiseFactor); 00141 00143 virtual void setCollective(const DtVector& desiredBodyAcc, double noiseFactor); 00144 00147 virtual void setPedal(const DtVector& desiredAngularAcc, double noiseFactor); 00148 00150 virtual void setThrottle(); 00151 00156 virtual void boundAcceleration(DtVector & vec); 00157 00160 virtual DtReal terrainAvoidanceVelocity() const; 00161 00167 virtual void calculateControlAlignmentAngle(DtReal& alignmentAngle, 00168 bool& selector) const; 00169 00175 virtual void calculateTargetAlignmentAngle(DtReal& alignmentAngle, 00176 bool& selector) const; 00177 00178 virtual bool createPorts(); 00179 00180 protected: 00182 00183 00184 00185 00186 00187 00188 DtVectorInputPort* myTargetLocationInputPort; 00190 00192 DtRotaryWingPilotDescriptor *myPilotDescriptor; 00193 00195 DtDcm myBodyToRef; 00196 00198 DtDcm myLocalToTopoDcm; 00199 00201 DtDcm myTopoToLocalDcm; 00202 00203 public: 00204 00207 static DtReal xyDistSquared(DtVector a, DtVector b); 00208 00209 }; 00210 00211 #endif