![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 1999-2000 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: fixWngPltCtl.h,v $ $Revision: 1.48 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00014 00015 #ifndef fixWngPltCtl_H_ 00016 #define fixWngPltCtl_H_ 00017 00018 #include "vrfobjcore/singleTaskControllerComponent.h" 00019 #include <matrix/LibMatrix.h> 00020 00021 class DtString; 00022 class DtSimManager; 00023 class DtConstrainedAnalogOutputPort; 00024 class DtConstrainedDualAxisAnalogOutputPort; 00025 class DtBooleanOutputPort; 00026 class DtFixedWingEntityStateRepository; 00027 class DtTaskMessage; 00028 class DtFixedWingFlightPSR; 00029 00032 const double DtTurningSpeedTol = 0.0556; 00033 00037 const double DtLandingTolerance = 1.0; 00038 00045 #include "vrfmodel/vrfmodelDefines.h" 00046 class DT_DLL_vrfmodel DtFixedWingPilotController : public DtSingleTaskControllerComponent 00047 { 00048 00049 public: 00050 00053 DtFixedWingPilotController(const DtString& name, 00054 DtVrfObject* owner, 00055 DtSimManager* simManager, 00056 DtComponentDescriptor* desc = 0, 00057 DtReaderWriterRegistry* parentRegistry = 0); 00058 00060 virtual ~DtFixedWingPilotController(); 00061 00063 virtual bool init(); 00064 00068 virtual void tick(); 00069 00072 virtual DtString type() const; 00073 00076 virtual void clearTask(); 00077 00092 virtual void taxiTo(const DtVector& destination, double speed); 00093 00100 virtual void taxi(double speed, double turnRate); 00101 00105 virtual double calculateSteering(double turnAngle) const; 00106 00109 virtual double approximateThrottle(double speed); 00110 00113 virtual double calculateCurrentBrakingDistance() const; 00115 00116 00129 virtual void flyTo(const DtVector& destination, double speed); 00130 00136 virtual void flyToDirect(const DtVector& destination, double speed); 00137 00146 virtual void fly(double speed, double turnRate, double climbRate); 00147 00156 virtual void flyFixedPitch(double speed, double turnRate, double desiredPitch); 00157 00183 virtual void circle(const DtVector& center, double radius, double speed, 00184 double altitude, bool clockwise = true); 00185 00188 virtual double calcControlForRoll(double rollRate); 00189 00197 00200 virtual double calcControlForThrottle(double speed, bool& deployFlaps); 00201 00205 virtual void calcControlForTurnAndClimb(double turnRate, double climbRate, 00206 double& stickX, double& pedal); 00207 00212 virtual void calcControlForTurnAndPitch(double turnRate, double desiredPitch, 00213 double& stickX, double& pedal); 00214 00221 virtual double calculateClimbRate(double altitude, double climbTime) const; 00222 00228 // turn rate = (heading change / max-turnrate-cutoff-angle) * 00229 // max-pitch-rate 00233 virtual double calculateTurnRate(double turnAngle) const; 00234 00237 // roll angle = ATAN((speed * turn rate * 0.5) / 9.8) 00238 virtual double calculateRollAngle(double turnRate, double speed) 00239 const; 00240 00243 virtual double calculateRollRate(double rollAngle); 00244 00246 00260 virtual void calculateNormalizedBodyVelocity(); 00261 00267 virtual void calculateLocalAngularVelocity(); 00268 00274 // mySpeedRatioSquared 00275 virtual void calculateSpeedRatioSquared(); 00276 00283 virtual void initializeControllerForTick(); 00284 00287 virtual bool createFixedWingControlPortGroup(); 00288 virtual bool createThrottlePort(); 00289 virtual bool createStickPort(); 00290 virtual bool createPedalPort(); 00291 virtual bool createBrakePort(); 00292 00294 virtual bool createFlapsDeployedPort(); 00295 00297 virtual DtConstrainedAnalogOutputPort* throttlePort(); 00298 virtual DtConstrainedDualAxisAnalogOutputPort* stickPort(); 00299 virtual DtConstrainedAnalogOutputPort* pedalPort(); 00300 virtual DtConstrainedAnalogOutputPort* brakePort(); 00301 virtual DtBooleanOutputPort* flapsDeployedPort(); 00302 00304 virtual void setMaxThrustAcceleration(double maxThrustAcceleration); 00305 00307 virtual void setTakeOffDir(const DtVector& takeOffDir); 00308 virtual const DtVector& takeOffDir() const; 00309 00312 virtual DtReal maxTurningGs() const; 00313 virtual DtReal maxTurnRateCutoffAngle() const; 00314 virtual DtReal maxTaxiingTurnSpeed() const; 00315 virtual DtReal taxiingNearDistance() const; 00316 virtual DtReal taxiingAtDistance() const; 00317 virtual DtReal taxiingApproachSpeed() const; 00318 virtual DtReal maxPitchAngle() const; 00319 virtual DtReal timeToTargetAltitude() const; 00321 00325 static DtSimComponent * creator(const DtString& name, 00326 DtVrfObject* owner, 00327 DtSimManager* simManager, 00328 DtComponentDescriptor* desc = 0, 00329 DtReaderWriterRegistry* parentRegistry = 0); 00330 00331 protected: 00332 00334 virtual bool createPorts(); 00335 00337 virtual bool createPortGroups(); 00338 00346 virtual void lookupAndCacheProcessSR(); 00347 00352 virtual bool postAddComponentsInit(); 00353 00356 virtual bool decideToGiveUpTask() const; 00357 00358 protected: 00359 00361 DtFixedWingPilotController(); 00362 00364 DtFixedWingPilotController(const DtFixedWingPilotController & 00365 orig); 00366 00368 const DtFixedWingPilotController & operator=(const 00369 DtFixedWingPilotController & orig); 00370 00371 protected: 00372 00373 DtFixedWingEntityStateRepository* myFixedWingEntityState; 00374 00377 00380 DtOutputPortGroup* myFixedWingControlPortGroup; 00381 00387 DtConstrainedAnalogOutputPort* myThrottlePort; 00388 00394 DtConstrainedDualAxisAnalogOutputPort* myStickPort; 00395 00401 DtConstrainedAnalogOutputPort* myPedalPort; 00402 00408 DtConstrainedAnalogOutputPort* myBrakePort; 00409 00415 DtBooleanOutputPort* myFlapsDeployedPort; 00416 00418 00424 DtFixedWingFlightPSR* myProcessState; 00425 }; 00426 #endif