X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2Fmodels%2FFGLGear.h;h=f1828f8cf840b17c4c7ffebc6ea90ac5022d8fec;hb=a302cdc1cbb3c147e7c862b484cdd5d86f30a29c;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..f1828f8cf 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,16 @@ SENTRY INCLUDES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#include -#include -#include -#include -#include +#include "models/propulsion/FGForce.h" +#include "models/FGPropagate.h" +#include "math/FGColumnVector3.h" #include /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_LGEAR "$Id$" +#define ID_LGEAR "$Id: FGLGear.h,v 1.41 2010/09/22 11:33:40 jberndt Exp $" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -60,9 +58,10 @@ namespace JSBSim { class FGAircraft; class FGPropagate; class FGFCS; -class FGState; class FGMassBalance; class FGAuxiliary; +class FGTable; +class Element; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLASS DOCUMENTATION @@ -85,7 +84,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 +161,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.41 2010/09/22 11:33:40 jberndt 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,7 +193,7 @@ CLASS DOCUMENTATION CLASS DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -class FGLGear : public FGJSBBase +class FGLGear : public FGForce { public: /// Brake grouping enumerators @@ -207,27 +201,24 @@ public: /// 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); /// Destructor ~FGLGear(); /// The Force vector for this gear - FGColumnVector3& Force(void); - /// The Moment vector for this gear - FGColumnVector3& Moment(void) {return vMoment;} + FGColumnVector3& GetBodyForces(void); /// Gets the location of the gear in Body axes FGColumnVector3& GetBodyLocation(void) { return vWhlBodyVec; } @@ -237,72 +228,75 @@ public: double GetLocalGear(int idx) const { return vLocalGear(idx); } /// Gets the name of the gear - inline string GetName(void) const {return name; } + 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;} + double GetCompForce(void) const {return StrutForce; } + double GetBrakeFCoeff(void) const {return BrakeFCoeff;} /// Gets the current normalized tire pressure - inline double GetTirePressure(void) const { return TirePressureNorm; } + double GetTirePressure(void) const { return TirePressureNorm; } /// Sets the new normalized tire pressure - inline void SetTirePressure(double p) { TirePressureNorm = p; } + void SetTirePressure(double p) { TirePressureNorm = p; } /// Sets the brake value in percent (0 - 100) - inline void SetBrake(double bp) {brakePct = bp;} + void SetBrake(double bp) {brakePct = bp;} /// 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; } + 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);} + 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 GearUp; } + bool GetGearUnitDown(void) const { return GearDown; } + double GetWheelRollForce(void) { + FGColumnVector3 vForce = mTGear.Transposed() * FGForce::GetBodyForces(); + return vForce(eX)*cos(SteerAngle) + vForce(eY)*sin(SteerAngle); } + double GetWheelSideForce(void) { + 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); + double GetSteerAngleDeg(void) const { return radtodeg*SteerAngle; } + FGPropagate::LagrangeMultiplier* GetMultiplierEntry(int entry); + void SetLagrangeMultiplier(double lambda, int entry); + FGColumnVector3& UpdateForces(void); void bind(void); private: int GearNumber; - FGColumnVector3 vXYZ; - FGColumnVector3 vMoment; + static const FGMatrix33 Tb2s; + FGMatrix33 mTGear; + FGColumnVector3 vGearOrient; FGColumnVector3 vWhlBodyVec; FGColumnVector3 vLocalGear; - FGColumnVector3 vForce; - FGColumnVector3 last_vForce; // remove this - FGColumnVector3 vLocalForce; - FGColumnVector3 vWhlVelVec; // Velocity of this wheel (Local) - FGColumnVector3 normal, cvel; + FGColumnVector3 vWhlVelVec, vLocalWhlVel; // Velocity of this wheel + FGColumnVector3 normal, cvel, vGroundNormal; FGLocation contact, gearLoc; FGTable *ForceY_Table; double dT; @@ -313,6 +307,7 @@ private: double compressLength; double compressSpeed; double staticFCoeff, dynamicFCoeff, rollingFCoeff; + double Stiffness, Shape, Peak, Curvature; // Pacejka factors double brakePct; double BrakeFCoeff; double maxCompLen; @@ -321,13 +316,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; @@ -340,11 +333,13 @@ private: bool isRetractable; bool GearUp, GearDown; bool Servicable; - string name; - string sSteerType; - string sBrakeGroup; - string sRetractable; - string sContactType; + bool Castered; + bool StaticFriction; + std::string name; + std::string sSteerType; + std::string sBrakeGroup; + std::string sRetractable; + std::string sContactType; BrakeGroup eBrakeGrp; ContactType eContactType; @@ -352,23 +347,14 @@ 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; + + FGPropagate::LagrangeMultiplier LMultiplier[3]; + + FGAuxiliary* Auxiliary; + FGPropagate* Propagate; + FGFCS* FCS; + FGMassBalance* MassBalance; + FGGroundReactions* GroundReactions; void ComputeRetractionState(void); void ComputeBrakeForceCoefficient(void); @@ -376,6 +362,8 @@ private: void ComputeSlipAngle(void); void ComputeSideForceCoefficient(void); void ComputeVerticalStrutForce(void); + void ComputeGroundCoordSys(void); + void ComputeJacobian(const FGColumnVector3& vWhlContactVec); void CrashDetect(void); void InitializeReporting(void); void ResetReporting(void); @@ -384,12 +372,6 @@ private: void Debug(int from); }; } -#include "FGAircraft.h" -#include "FGPropagate.h" -#include "FGAuxiliary.h" -#include "FGFCS.h" -#include "FGMassBalance.h" -#include "FGState.h" //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%