![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 1999 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: autoAct.h,v $ $Revision: 1.64 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00013 00014 #ifndef autoAct_H_ 00015 #define autoAct_H_ 00016 00017 #include <vlpi/disEnums.h> 00018 #include "vrfobjcore/actCmpnt.h" 00019 #include "vrfobjcore/automotivePSR.h" 00020 00021 class DtChord; 00022 class DtString; 00023 class DtSimManager; 00024 class DtGroundVehicleStateRepository; 00025 class boolPort; 00026 class DtVector; 00027 class DtTaitBryan; 00028 class DtSoilFactors; 00029 class DtAutomotivePSR; 00030 class DtAutomotiveActuatorDescriptor; 00031 class DtConstrainedIntegerInputPort; 00032 class DtConstrainedAnalogInputPort; 00033 class DtBooleanInputPort; 00034 class DtChordIntersectionRecord; 00035 class DtAttachedTerrain; 00036 00037 00047 #include "vrfmodel/vrfmodelDefines.h" 00048 class DT_DLL_vrfmodel DtAutomotiveActuatorComponent : public DtActuatorComponent 00049 { 00050 00051 public: 00052 00055 DtAutomotiveActuatorComponent(const DtString& name, DtVrfObject* owner, 00056 DtSimManager* simManager, 00057 DtComponentDescriptor* desc = 0, 00058 DtReaderWriterRegistry* parentRegistry = 0); 00059 00060 00062 virtual ~DtAutomotiveActuatorComponent(); 00063 00065 virtual bool init(); 00066 00069 virtual DtString type() const; 00070 00072 virtual void tick(); 00073 00077 static DtSimComponent * creator(const DtString& name, 00078 DtVrfObject* owner, 00079 DtSimManager* simManager, 00080 DtComponentDescriptor* desc = 0, 00081 DtReaderWriterRegistry* parentRegistry = 0); 00082 00083 protected: 00084 00086 virtual double maxSpeedSoilFactor() const; 00087 00089 virtual double accelSoilFactor() const; 00090 00092 virtual double decelSoilFactor() const; 00093 00096 virtual DtSoilFactors* soilFactors() const; 00097 00101 virtual bool disableControl(); 00102 00109 virtual void useFuel(double fuelUsed); 00110 00116 virtual double fuelLeft() const; 00117 00135 virtual void updateRepository(const DtVector & localPosition, 00136 const DtVector & localVelocity, const DtVector & localAcceleration, 00137 const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity, 00138 double newHeading); 00139 00140 00145 virtual double calculateMaxDecelerationFromFriction( 00146 const DtVector& oldBodyVelocity); 00147 00152 virtual double calculateMaxDecelerationFromBrake(double brake); 00153 00158 virtual double calculateAccelerationFromEngine(double throttle, 00159 DtAutoTransmissionGear gear); 00160 00171 virtual double calculateDecelerationFromSoilType( 00172 const DtVector& oldBodyVelocity); 00173 00179 virtual double calculateAccelerationFromSlope(double slope); 00180 00194 virtual void calculateOrientationAndPosition( 00195 const DtVector& newLocalProjectedLocation, double newHeading, 00196 DtDcm& newLocalOrientation, DtVector& newLocalPosition); 00197 00203 virtual bool useHighFidelityGroundClamping() const; 00204 00216 bool groundClamp(double heading, const DtVector& location, 00217 DtAttachedTerrain& terrain, DtVector& newNormal); 00218 00223 void groundClampHighFidelity(double heading, const DtVector& location, 00224 DtAttachedTerrain& terrain, DtVector& newNormal); 00225 00231 void groundClampLowFidelity(double heading, const DtVector& location, 00232 DtAttachedTerrain& terrain, DtVector& newNormal); 00233 00238 virtual double calculateHeading(double oldHeading, 00239 const DtVector& oldBodyVelocity, DtAutoTransmissionGear gear, 00240 double steering, double throttle, double dT); 00241 00249 virtual DtVector calculateBodyAcceleration(double throttle, 00250 DtAutoTransmissionGear gear, double brake, 00251 const DtVector& oldBodyVelocity, double oldPitch, double dT); 00252 00253 virtual DtVector calculateBodyVelocity( 00254 const DtVector& oldBodyVelocity, const DtVector& newBodyAcceleration, 00255 double dT); 00256 00257 virtual DtVector calculateProjectedLocation( 00258 const DtVector& oldLocalPosition, const DtVector& newBodyAcceleration, 00259 const DtVector& oldBodyVelocity, double newHeading); 00260 00269 virtual bool checkForTerrainCollisions() const; 00270 00276 virtual bool foundTerrainCollision(double heading, 00277 const DtVector& oldLocalPosition, 00278 const DtVector& newLocalPosition, 00279 DtChordIntersectionRecord 00280 &collisionIntersectionRecord) const; 00281 00291 virtual bool createMovementChord(DtChord& movementChord, 00292 double heading, 00293 const DtVector& oldLocalPosition, 00294 const DtVector& newLocalPosition) const; 00295 00300 virtual bool terrainPassable(double heading, 00301 const DtChordIntersectionRecord& 00302 terrainIntersectionRecord) const; 00303 00304 00306 virtual double calculateMaxSpeed(); 00307 00310 virtual double calculateMaxAcceleration(); 00311 00315 virtual DtVector calculateRotationalVelocity( 00316 const DtDcm& newOrientation, 00317 const DtDcm& oldOrientation, double dT); 00318 00323 virtual double calculatePitch(const DtVector& localPosition, double heading, 00324 const DtAttachedTerrain& terrain); 00325 00329 virtual void calculateDirectionOfLinearMotion( 00330 const DtDcm& newLocalOrientation, const DtVector& newLocalPosition, 00331 DtDcm& newLocalDirectionOfLinearMotion); 00332 00336 virtual double getPitchAdjustedMaxSpeed(double maxSpeed, double pitch) const; 00337 00339 virtual bool createPortGroups(); 00340 00342 virtual bool createPorts(); 00343 00349 virtual bool createPSR(); 00350 00354 virtual bool rotationalVelocityShouldBeClamped(const DtVector& 00355 bodyRotationalVelocity); 00356 00358 virtual double steeringControlValue() const; 00360 virtual double throttleControlValue() const; 00362 virtual double brakeControlValue() const; 00364 virtual DtAutoTransmissionGear gearControlValue() const; 00366 virtual bool parkingBrakeControlValue() const; 00367 00368 private: 00370 DtAutomotiveActuatorComponent(); 00371 00373 DtAutomotiveActuatorComponent(const DtAutomotiveActuatorComponent & orig); 00374 00376 const DtAutomotiveActuatorComponent & operator=(const 00377 DtAutomotiveActuatorComponent & orig); 00378 00379 protected: 00380 00383 00389 DtConstrainedAnalogInputPort* myThrottlePort; 00390 00396 DtConstrainedAnalogInputPort* mySteeringPort; 00397 00403 DtConstrainedAnalogInputPort* myBrakePort; 00404 00410 DtConstrainedIntegerInputPort* myGearPort; 00411 00417 DtBooleanInputPort* myParkingBrakePort; 00418 00422 DtInputPortGroup* myAutomotiveControlPortGroup; 00423 00432 DtBooleanInputPort * myMovementDisableInputPort; 00433 00435 00436 DtGroundVehicleStateRepository * myGroundVehicleState; 00437 00440 DtAutomotivePSR* myProcessState; 00441 00442 const DtAutomotiveActuatorDescriptor* myAutomotiveDescriptor; 00443 }; 00444 00445 #endif