]> git.mxchange.org Git - flightgear.git/blobdiff - src/FDM/JSBSim/FGLGear.cpp
Check return value of FDM::init().
[flightgear.git] / src / FDM / JSBSim / FGLGear.cpp
index f55895f40ad008b6064fe5c05fbb5a4990bf2206..6858c969cf92bf664c2b9b865112e7c90eff1281 100644 (file)
@@ -39,6 +39,9 @@ INCLUDES
 #include "FGLGear.h"
 #include <algorithm>
 
+static const char *IdSrc = "$Header$";
+static const char *IdHdr = ID_LGEAR;
+
 /*******************************************************************************
 ************************************ CODE **************************************
 *******************************************************************************/
@@ -46,17 +49,32 @@ INCLUDES
 
 FGLGear::FGLGear(FGConfigFile* AC_cfg, FGFDMExec* fdmex) : vXYZ(3),
                                                            vMoment(3),
+                                                           vWhlBodyVec(3),
                                                            Exec(fdmex)
 {
   string tmp;
-  *AC_cfg >> tmp >> name >> vXYZ(1) >> vXYZ(2) >> vXYZ(3) >> kSpring >> bDamp
-                                                    >> statFCoeff >> brakeCoeff;
+  *AC_cfg >> tmp >> name >> vXYZ(1) >> vXYZ(2) >> vXYZ(3)  
+            >> kSpring >> bDamp>> dynamicFCoeff >> staticFCoeff
+                 >> SteerType >> BrakeType >> GroupMember >> maxSteerAngle;
+    
+  cout << "    Name: " << name << endl;
+  cout << "      Location: " << vXYZ << endl;
+  cout << "      Spring Constant:  " << kSpring << endl;
+  cout << "      Damping Constant: " << bDamp << endl;
+  cout << "      Dynamic Friction: " << dynamicFCoeff << endl;
+  cout << "      Static Friction:  " << staticFCoeff << endl;
+  cout << "      Brake Type:       " << BrakeType << endl;
+  cout << "      Grouping:         " << GroupMember << endl;
+  cout << "      Steering Type:    " << SteerType << endl;
+  cout << "      Max Steer Angle:  " << maxSteerAngle << endl;
+  
   State       = Exec->GetState();
   Aircraft    = Exec->GetAircraft();
   Position    = Exec->GetPosition();
   Rotation    = Exec->GetRotation();
-
+  
   WOW = false;
+  ReportEnable=true;
   FirstContact = false;
   Reported = false;
   DistanceTraveled = 0.0;
@@ -68,28 +86,28 @@ FGLGear::FGLGear(FGConfigFile* AC_cfg, FGFDMExec* fdmex) : vXYZ(3),
 
 FGLGear::~FGLGear(void)
 {
+  cout << "Destructing Landing Gear ..." << endl;
 }
 
 /******************************************************************************/
 
 FGColumnVector FGLGear::Force(void)
 {
-  static FGColumnVector vForce(3);
-  static FGColumnVector vLocalForce(3);
-  static FGColumnVector vLocalGear(3);     // Vector: CG to this wheel (Local)
-  static FGColumnVector vWhlBodyVec(3);    // Vector: CG to this wheel (Body)
-  static FGColumnVector vWhlVelVec(3);     // Velocity of this wheel (Local)
-
+  FGColumnVector vForce(3);
+  FGColumnVector vLocalForce(3);
+  FGColumnVector vLocalGear(3);     // Vector: CG to this wheel (Local)
+  FGColumnVector vWhlVelVec(3);     // Velocity of this wheel (Local)
+  
   vWhlBodyVec     = (vXYZ - Aircraft->GetXYZcg()) / 12.0;
   vWhlBodyVec(eX) = -vWhlBodyVec(eX);
   vWhlBodyVec(eZ) = -vWhlBodyVec(eZ);
 
   vLocalGear = State->GetTb2l() * vWhlBodyVec;
-
+  
   compressLength = vLocalGear(eZ) - Position->GetDistanceAGL();
 
   if (compressLength > 0.00) {
-
+     
     WOW = true;
     vWhlVelVec      =  State->GetTb2l() * (Rotation->GetPQR() * vWhlBodyVec);
     vWhlVelVec     +=  Position->GetVel();
@@ -102,12 +120,20 @@ FGColumnVector FGLGear::Force(void)
       GroundSpeed   =  Position->GetVel().Magnitude();
     }
 
+    // The following code normalizes the wheel velocity vector, reverses it, and zeroes out
+    // the z component of the velocity. The question is, should the Z axis velocity be zeroed
+    // out first before the normalization takes place or not? Subsequent to that, the Wheel
+    // Velocity vector now points as a unit vector backwards and parallel to the wheel
+    // velocity vector. It acts AT the wheel.
+
     vWhlVelVec      = -1.0 * vWhlVelVec.Normalize();
     vWhlVelVec(eZ)  =  0.00;
 
+// the following needs work regarding friction coefficients and braking and steering
+
     vLocalForce(eZ) =  min(-compressLength * kSpring - compressSpeed * bDamp, (float)0.0);
-    vLocalForce(eX) =  fabs(vLocalForce(eZ) * statFCoeff) * vWhlVelVec(eX);
-    vLocalForce(eY) =  fabs(vLocalForce(eZ) * statFCoeff) * vWhlVelVec(eY);
+    vLocalForce(eX) =  fabs(vLocalForce(eZ) * staticFCoeff) * vWhlVelVec(eX);
+    vLocalForce(eY) =  fabs(vLocalForce(eZ) * staticFCoeff) * vWhlVelVec(eY);
 
     MaximumStrutForce = max(MaximumStrutForce, fabs(vLocalForce(eZ)));
     MaximumStrutTravel = max(MaximumStrutTravel, fabs(compressLength));
@@ -134,10 +160,9 @@ FGColumnVector FGLGear::Force(void)
     DistanceTraveled += Position->GetVel().Magnitude()*State->Getdt()*Aircraft->GetRate();
   }
 
-  if (Position->GetVel().Magnitude() <= 0.05 && !Reported) {
+  if (ReportEnable && Position->GetVel().Magnitude() <= 0.05 && !Reported) {
     Report();
   }
-
   return vForce;
 }