X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2Fmodels%2FFGLGear.cpp;h=4a4c9946f381e4ebd5aadc63f9ee2a10fdcc3441;hb=a302cdc1cbb3c147e7c862b484cdd5d86f30a29c;hp=569b76ee4f89aa1c63deb85e38e5abda391545be;hpb=52ac173257bf9cc780f0faee5049314442083140;p=flightgear.git diff --git a/src/FDM/JSBSim/models/FGLGear.cpp b/src/FDM/JSBSim/models/FGLGear.cpp index 569b76ee4..4a4c9946f 100644 --- a/src/FDM/JSBSim/models/FGLGear.cpp +++ b/src/FDM/JSBSim/models/FGLGear.cpp @@ -48,6 +48,7 @@ INCLUDES #include "FGMassBalance.h" #include "math/FGTable.h" #include +#include using namespace std; @@ -61,7 +62,7 @@ DEFINITIONS GLOBAL DATA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -static const char *IdSrc = "$Id: FGLGear.cpp,v 1.76 2010/07/30 11:50:01 jberndt Exp $"; +static const char *IdSrc = "$Id: FGLGear.cpp,v 1.80 2011/01/24 13:01:56 jberndt Exp $"; static const char *IdHdr = ID_LGEAR; // Body To Structural (body frame is rotated 180 deg about Y and lengths are given in @@ -76,7 +77,8 @@ FGLGear::FGLGear(Element* el, FGFDMExec* fdmex, int number) : FGForce(fdmex), GearNumber(number), SteerAngle(0.0), - Castered(false) + Castered(false), + StaticFriction(false) { Element *force_table=0; Element *dampCoeff=0; @@ -254,9 +256,7 @@ FGLGear::FGLGear(Element* el, FGFDMExec* fdmex, int number) : Curvature = 1.03; // Initialize Lagrange multipliers - LMultiplier[ftRoll].value = 0.; - LMultiplier[ftSide].value = 0.; - LMultiplier[ftRoll].value = 0.; + memset(LMultiplier, 0, sizeof(LMultiplier)); Debug(0); } @@ -281,13 +281,15 @@ FGColumnVector3& FGLGear::GetBodyForces(void) if (isRetractable) ComputeRetractionState(); if (GearDown) { + FGColumnVector3 angularVel; + vWhlBodyVec = MassBalance->StructuralToBody(vXYZn); // Get wheel in body frame vLocalGear = Propagate->GetTb2l() * vWhlBodyVec; // Get local frame wheel location gearLoc = Propagate->GetLocation().LocalToLocation(vLocalGear); // Compute the height of the theoretical location of the wheel (if strut is // not compressed) with respect to the ground level - double height = fdmex->GetGroundCallback()->GetAGLevel(t, gearLoc, contact, normal, cvel); + double height = fdmex->GetGroundCallback()->GetAGLevel(t, gearLoc, contact, normal, cvel, angularVel); vGroundNormal = Propagate->GetTec2b() * normal; // The height returned above is the AGL and is expressed in the Z direction @@ -372,13 +374,15 @@ FGColumnVector3& FGLGear::GetBodyForces(void) } } - ReportTakeoffOrLanding(); + if (!fdmex->GetTrimStatus()) { + ReportTakeoffOrLanding(); - // Require both WOW and LastWOW to be true before checking crash conditions - // to allow the WOW flag to be used in terminating a scripted run. - if (WOW && lastWOW) CrashDetect(); + // Require both WOW and LastWOW to be true before checking crash conditions + // to allow the WOW flag to be used in terminating a scripted run. + if (WOW && lastWOW) CrashDetect(); - lastWOW = WOW; + lastWOW = WOW; + } return FGForce::GetBodyForces(); } @@ -804,6 +808,10 @@ void FGLGear::bind(void) property_name = base_property_name + "/static_friction_coeff"; fdmex->GetPropertyManager()->Tie( property_name.c_str(), &staticFCoeff ); + property_name = base_property_name + "/rolling_friction_coeff"; + fdmex->GetPropertyManager()->Tie( property_name.c_str(), &rollingFCoeff ); + property_name = base_property_name + "/dynamic_friction_coeff"; + fdmex->GetPropertyManager()->Tie( property_name.c_str(), &dynamicFCoeff ); if (eSteerType == stCaster) { property_name = base_property_name + "/steering-angle-deg";