X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2Fmodels%2FFGLGear.h;h=c2d38a0c4843034ec20da9bc3bd3f73a7c152c6c;hb=642735ab18421db87a07d6841dd720fd4615bfff;hp=11020158bd678c230785b2eec1b807654a458b79;hpb=050221c30697d5abc9658f5b626418286895c16b;p=flightgear.git diff --git a/src/FDM/JSBSim/models/FGLGear.h b/src/FDM/JSBSim/models/FGLGear.h index 11020158b..c2d38a0c4 100644 --- a/src/FDM/JSBSim/models/FGLGear.h +++ b/src/FDM/JSBSim/models/FGLGear.h @@ -4,7 +4,7 @@ Author: Jon S. Berndt Date started: 11/18/99 - ------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) ------------- + ------------- Copyright (C) 1999 Jon S. Berndt (jon@jsbsim.org) ------------- This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software @@ -38,18 +38,17 @@ SENTRY INCLUDES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#include -#include -#include -#include -#include #include +#include "models/propulsion/FGForce.h" +#include "math/FGColumnVector3.h" +#include "math/LagrangeMultiplier.h" + /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_LGEAR "$Id$" +#define ID_LGEAR "$Id: FGLGear.h,v 1.54 2012/04/01 17:05:51 bcoconni Exp $" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -57,12 +56,9 @@ FORWARD DECLARATIONS namespace JSBSim { -class FGAircraft; -class FGPropagate; -class FGFCS; -class FGState; -class FGMassBalance; -class FGAuxiliary; +class FGTable; +class Element; +class FGPropertyManager; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLASS DOCUMENTATION @@ -85,7 +81,6 @@ CLASS DOCUMENTATION

Operational Properties

  1. Name
  2. -
  3. Steerability attribute {one of STEERABLE | FIXED | CASTERED}
  4. Brake Group Membership {one of LEFT | CENTER | RIGHT | NOSE | TAIL | NONE}
  5. Max Steer Angle, in degrees

@@ -163,30 +158,26 @@ CLASS DOCUMENTATION {number} {number} + + {number} + {number} + {number} + {number} {number} {number} {number} - {number} - {number} + {number} + {number} {number | 0 | 360} {NONE | LEFT | RIGHT | CENTER | NOSE | TAIL} {0 | 1}
- - {number} - {number} - - - {number} - {number} - - {number} @endcode @author Jon S. Berndt - @version $Id$ + @version $Id: FGLGear.h,v 1.54 2012/04/01 17:05:51 bcoconni Exp $ @see Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at NASA-Ames", NASA CR-2497, January 1975 @see Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics", @@ -199,113 +190,129 @@ CLASS DOCUMENTATION CLASS DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -class FGLGear : public FGJSBBase +class FGLGear : public FGForce { public: + struct Inputs { + double Vground; + double VcalibratedKts; + double Temperature; + double DistanceAGL; + double DistanceASL; + double TotalDeltaT; + bool TakeoffThrottle; + bool WOW; + FGMatrix33 Tb2l; + FGMatrix33 Tec2l; + FGMatrix33 Tec2b; + FGColumnVector3 PQR; + FGColumnVector3 UVW; + FGColumnVector3 vXYZcg; // CG coordinates expressed in the structural frame + FGLocation Location; + std::vector SteerPosDeg; + std::vector BrakePos; + double FCSGearPos; + double EmptyWeight; + }; + /// Brake grouping enumerators - enum BrakeGroup {bgNone=0, bgLeft, bgRight, bgCenter, bgNose, bgTail }; + enum BrakeGroup {bgNone=0, bgLeft, bgRight, bgCenter, bgNose, bgTail, bgNumBrakeGroups }; /// Steering group membership enumerators enum SteerType {stSteer, stFixed, stCaster}; /// Contact point type - enum ContactType {ctBOGEY, ctSTRUCTURE, ctUNKNOWN}; + enum ContactType {ctBOGEY, ctSTRUCTURE}; /// Report type enumerators enum ReportType {erNone=0, erTakeoff, erLand}; /// Damping types enum DampType {dtLinear=0, dtSquare}; + /// Friction types + enum FrictionType {ftRoll=0, ftSide, ftDynamic}; /** Constructor @param el a pointer to the XML element that contains the CONTACT info. @param Executive a pointer to the parent executive object @param number integer identifier for this instance of FGLGear */ - FGLGear(Element* el, FGFDMExec* Executive, int number); - /** Constructor - @param lgear a reference to an existing FGLGear object */ - FGLGear(const FGLGear& lgear); + FGLGear(Element* el, FGFDMExec* Executive, int number, const struct Inputs& input); /// Destructor ~FGLGear(); /// The Force vector for this gear - FGColumnVector3& Force(void); - /// The Moment vector for this gear - FGColumnVector3& Moment(void) {return vMoment;} + const FGColumnVector3& GetBodyForces(void); /// Gets the location of the gear in Body axes - FGColumnVector3& GetBodyLocation(void) { return vWhlBodyVec; } - double GetBodyLocation(int idx) const { return vWhlBodyVec(idx); } - - FGColumnVector3& GetLocalGear(void) { return vLocalGear; } + FGColumnVector3 GetBodyLocation(void) const { + return Ts2b * (vXYZn - in.vXYZcg); + } + double GetBodyLocation(int idx) const { + FGColumnVector3 vWhlBodyVec = Ts2b * (vXYZn - in.vXYZcg); + return vWhlBodyVec(idx); + } + + const FGColumnVector3& GetLocalGear(void) const { return vLocalGear; } double GetLocalGear(int idx) const { return vLocalGear(idx); } /// Gets the name of the gear - inline string GetName(void) const {return name; } + const string& GetName(void) const {return name; } /// Gets the Weight On Wheels flag value - inline bool GetWOW(void) const {return WOW; } + bool GetWOW(void) const {return WOW; } /// Gets the current compressed length of the gear in feet - inline double GetCompLen(void) const {return compressLength;} + double GetCompLen(void) const {return compressLength;} /// Gets the current gear compression velocity in ft/sec - inline double GetCompVel(void) const {return compressSpeed; } + double GetCompVel(void) const {return compressSpeed; } /// Gets the gear compression force in pounds - inline double GetCompForce(void) const {return vForce(eZ); } - inline double GetBrakeFCoeff(void) const {return BrakeFCoeff;} - - /// Gets the current normalized tire pressure - inline double GetTirePressure(void) const { return TirePressureNorm; } - /// Sets the new normalized tire pressure - inline void SetTirePressure(double p) { TirePressureNorm = p; } - - /// Sets the brake value in percent (0 - 100) - inline void SetBrake(double bp) {brakePct = bp;} + double GetCompForce(void) const {return StrutForce; } /// Sets the weight-on-wheels flag. void SetWOW(bool wow) {WOW = wow;} /** Set the console touchdown reporting feature @param flag true turns on touchdown reporting, false turns it off */ - inline void SetReport(bool flag) { ReportEnable = flag; } + void SetReport(bool flag) { ReportEnable = flag; } /** Get the console touchdown reporting feature @return true if reporting is turned on */ - inline bool GetReport(void) const { return ReportEnable; } - double GetSteerNorm(void) const { return radtodeg/maxSteerAngle*SteerAngle; } + bool GetReport(void) const { return ReportEnable; } + double GetSteerNorm(void) const { return radtodeg/maxSteerAngle*SteerAngle; } double GetDefaultSteerAngle(double cmd) const { return cmd*maxSteerAngle; } double GetstaticFCoeff(void) const { return staticFCoeff; } - inline int GetBrakeGroup(void) const { return (int)eBrakeGrp; } - inline int GetSteerType(void) const { return (int)eSteerType; } - - inline double GetZPosition(void) const { return vXYZ(3); } - inline void SetZPosition(double z) { vXYZ(3) = z; } - - bool GetSteerable(void) const { return eSteerType != stFixed; } - inline bool GetRetractable(void) const { return isRetractable; } - inline bool GetGearUnitUp(void) const { return GearUp; } - inline bool GetGearUnitDown(void) const { return GearDown; } - inline double GetWheelSideForce(void) const { return SideForce; } - inline double GetWheelRollForce(void) const { return RollingForce; } - inline double GetWheelSideVel(void) const { return SideWhlVel; } - inline double GetWheelRollVel(void) const { return RollingWhlVel; } - inline double GetBodyXForce(void) const { return vLocalForce(eX); } - inline double GetBodyYForce(void) const { return vLocalForce(eY); } - inline double GetWheelSlipAngle(void) const { return WheelSlip; } - double GetWheelVel(int axis) const { return vWhlVelVec(axis);} - bool IsBogey(void) const { return (eContactType == ctBOGEY);} - double GetGearUnitPos(void); + int GetBrakeGroup(void) const { return (int)eBrakeGrp; } + int GetSteerType(void) const { return (int)eSteerType; } + + bool GetSteerable(void) const { return eSteerType != stFixed; } + bool GetRetractable(void) const { return isRetractable; } + bool GetGearUnitUp(void) const { return isRetractable ? (GetGearUnitPos() < 0.01) : false; } + bool GetGearUnitDown(void) const { return isRetractable ? (GetGearUnitPos() > 0.99) : true; } + + double GetWheelRollForce(void) { + UpdateForces(); + FGColumnVector3 vForce = mTGear.Transposed() * FGForce::GetBodyForces(); + return vForce(eX)*cos(SteerAngle) + vForce(eY)*sin(SteerAngle); } + double GetWheelSideForce(void) { + UpdateForces(); + FGColumnVector3 vForce = mTGear.Transposed() * FGForce::GetBodyForces(); + return vForce(eY)*cos(SteerAngle) - vForce(eX)*sin(SteerAngle); } + double GetWheelRollVel(void) const { return vWhlVelVec(eX)*cos(SteerAngle) + + vWhlVelVec(eY)*sin(SteerAngle); } + double GetWheelSideVel(void) const { return vWhlVelVec(eY)*cos(SteerAngle) + - vWhlVelVec(eX)*sin(SteerAngle); } + double GetWheelSlipAngle(void) const { return WheelSlip; } + double GetWheelVel(int axis) const { return vWhlVelVec(axis);} + bool IsBogey(void) const { return (eContactType == ctBOGEY);} + double GetGearUnitPos(void) const; + double GetSteerAngleDeg(void) const { return radtodeg*SteerAngle; } + + const struct Inputs& in; void bind(void); private: int GearNumber; - FGColumnVector3 vXYZ; - FGColumnVector3 vMoment; - FGColumnVector3 vWhlBodyVec; + static const FGMatrix33 Tb2s, Ts2b; + FGMatrix33 mTGear; FGColumnVector3 vLocalGear; - FGColumnVector3 vForce; - FGColumnVector3 last_vForce; // remove this - FGColumnVector3 vLocalForce; - FGColumnVector3 vWhlVelVec; // Velocity of this wheel (Local) - FGColumnVector3 normal, cvel; - FGLocation contact, gearLoc; + FGColumnVector3 vWhlVelVec, vGroundWhlVel; // Velocity of this wheel + FGColumnVector3 vGroundNormal; FGTable *ForceY_Table; - double dT; double SteerAngle; double kSpring; double bDamp; @@ -313,7 +320,7 @@ private: double compressLength; double compressSpeed; double staticFCoeff, dynamicFCoeff, rollingFCoeff; - double brakePct; + double Stiffness, Shape, Peak, Curvature; // Pacejka factors double BrakeFCoeff; double maxCompLen; double SinkRate; @@ -321,15 +328,11 @@ private: double TakeoffDistanceTraveled; double TakeoffDistanceTraveled50ft; double LandingDistanceTraveled; - double MaximumStrutForce; + double MaximumStrutForce, StrutForce; double MaximumStrutTravel; - double SideWhlVel, RollingWhlVel; - double RollingForce, SideForce, FCoeff; + double FCoeff; double WheelSlip; - double TirePressureNorm; - double SinWheel, CosWheel; double GearPos; - bool useFCSGearPos; bool WOW; bool lastWOW; bool FirstContact; @@ -338,13 +341,9 @@ private: bool TakeoffReported; bool ReportEnable; bool isRetractable; - bool GearUp, GearDown; - bool Servicable; - string name; - string sSteerType; - string sBrakeGroup; - string sRetractable; - string sContactType; + bool Castered; + bool StaticFriction; + std::string name; BrakeGroup eBrakeGrp; ContactType eContactType; @@ -352,30 +351,22 @@ private: DampType eDampType; DampType eDampTypeRebound; double maxSteerAngle; - double RFRV; // Rolling force relaxation velocity - double SFRV; // Side force relaxation velocity - double LongForceLagFilterCoeff; // Longitudinal Force Lag Filter Coefficient - double LatForceLagFilterCoeff; // Lateral Force Lag Filter Coefficient - double WheelSlipLagFilterCoeff; // Wheel slip angle lag filter coefficient - - Filter LongForceFilter; - Filter LatForceFilter; - Filter WheelSlipFilter; - - FGFDMExec* Exec; - FGState* State; - FGAircraft* Aircraft; - FGPropagate* Propagate; - FGAuxiliary* Auxiliary; - FGFCS* FCS; - FGMassBalance* MassBalance; - - void ComputeRetractionState(void); + + LagrangeMultiplier LMultiplier[3]; + + FGGroundReactions* GroundReactions; + FGPropertyManager* PropertyManager; + + mutable bool useFCSGearPos; + void ComputeBrakeForceCoefficient(void); void ComputeSteeringAngle(void); void ComputeSlipAngle(void); void ComputeSideForceCoefficient(void); void ComputeVerticalStrutForce(void); + void ComputeGroundFrame(void); + void ComputeJacobian(const FGColumnVector3& vWhlContactVec); + void UpdateForces(void); void CrashDetect(void); void InitializeReporting(void); void ResetReporting(void); @@ -384,12 +375,6 @@ private: void Debug(int from); }; } -#include "FGAircraft.h" -#include "FGPropagate.h" -#include "FGAuxiliary.h" -#include "FGFCS.h" -#include "FGMassBalance.h" -#include "FGState.h" //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%