JSBSim Flight Dynamics Model  1.2.0 (05 Nov 2023)
An Open Source Flight Dynamics and Control Software Library in C++
FGInertial Class Reference

Detailed Description

Models inertial forces (e.g.

centripetal and coriolis accelerations). Starting conversion to WGS84.

Definition at line 65 of file FGInertial.h.

#include <FGInertial.h>

+ Inheritance diagram for FGInertial:
+ Collaboration diagram for FGInertial:

Classes

struct  Inputs
 

Public Types

enum  eGravType { gtStandard , gtWGS84 }
 These define the indices use to select the gravitation models. More...
 
- Public Types inherited from FGJSBBase
enum  { eL = 1 , eM , eN }
 Moments L, M, N.
 
enum  { eP = 1 , eQ , eR }
 Rates P, Q, R.
 
enum  { eU = 1 , eV , eW }
 Velocities U, V, W.
 
enum  { eX = 1 , eY , eZ }
 Positions X, Y, Z.
 
enum  { ePhi = 1 , eTht , ePsi }
 Euler angles Phi, Theta, Psi.
 
enum  { eDrag = 1 , eSide , eLift }
 Stability axis forces, Drag, Side force, Lift.
 
enum  { eRoll = 1 , ePitch , eYaw }
 Local frame orientation Roll, Pitch, Yaw.
 
enum  { eNorth = 1 , eEast , eDown }
 Local frame position North, East, Down.
 
enum  { eLat = 1 , eLong , eRad }
 Locations Radius, Latitude, Longitude.
 
enum  {
  inNone = 0 , inDegrees , inRadians , inMeters ,
  inFeet
}
 Conversion specifiers.
 

Public Member Functions

 FGInertial (FGFDMExec *)
 
double GetGM (void)
 
const FGColumnVector3GetGravity (void) const
 
int GetGravityType (void) const
 Get the gravity type.
 
const FGColumnVector3GetOmegaPlanet () const
 
double GetSemimajor (void) const
 
double GetSemiminor (void) const
 
FGMatrix33 GetTec2l (const FGLocation &location) const
 Transform matrix from the earth centered to local horizontal frame. More...
 
FGMatrix33 GetTl2ec (const FGLocation &location) const
 Transform matrix from the local horizontal frame to earth centered. More...
 
bool Load (Element *el) override
 
bool Run (bool Holding) override
 Runs the Inertial model; called by the Executive Can pass in a value indicating if the executive is directing the simulation to Hold. More...
 
void SetGravityType (int gt)
 Set the gravity type.
 
void SetGroundCallback (FGGroundCallback *gc)
 Sets the ground callback pointer. More...
 
void SetOmegaPlanet (double rate)
 
Functions that rely on the ground callback

The following functions allow to set and get the vehicle position above the ground.

The ground level is obtained by interrogating an instance of FGGroundCallback. A ground callback must therefore be set with SetGroundCallback() before calling any of these functions.

double GetContactPoint (const FGLocation &location, FGLocation &contact, FGColumnVector3 &normal, FGColumnVector3 &velocity, FGColumnVector3 &ang_velocity) const
 Get terrain contact point information below the current location. More...
 
double GetAltitudeAGL (const FGLocation &location) const
 Get the altitude above ground level. More...
 
void SetAltitudeAGL (FGLocation &location, double altitudeAGL)
 Set the altitude above ground level. More...
 
void SetTerrainElevation (double h)
 Set the terrain elevation above sea level. More...
 
void SetTime (double time)
 Set the simulation time. More...
 
- Public Member Functions inherited from FGModel
 FGModel (FGFDMExec *)
 Constructor.
 
 ~FGModel () override
 Destructor.
 
virtual SGPath FindFullPathName (const SGPath &path) const
 
FGFDMExecGetExec (void)
 
const std::string & GetName (void)
 
unsigned int GetRate (void)
 Get the output rate for the model in frames.
 
bool InitModel (void) override
 
void SetPropertyManager (std::shared_ptr< FGPropertyManager > fgpm)
 
void SetRate (unsigned int tt)
 Set the ouput rate for the model in frames.
 
- Public Member Functions inherited from FGModelFunctions
std::string GetFunctionStrings (const std::string &delimeter) const
 Gets the strings for the current set of functions. More...
 
std::string GetFunctionValues (const std::string &delimeter) const
 Gets the function values. More...
 
std::shared_ptr< FGFunctionGetPreFunction (const std::string &name)
 Get one of the "pre" function. More...
 
bool Load (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void PostLoad (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void PreLoad (Element *el, FGFDMExec *fdmex, std::string prefix="")
 
void RunPostFunctions (void)
 
void RunPreFunctions (void)
 
- Public Member Functions inherited from FGJSBBase
 FGJSBBase ()
 Constructor for FGJSBBase.
 
virtual ~FGJSBBase ()
 Destructor for FGJSBBase.
 
void disableHighLighting (void)
 Disables highlighting in the console output.
 

Static Public Member Functions

static constexpr double GetStandardGravity (void)
 
- Static Public Member Functions inherited from FGJSBBase
static const std::string & GetVersion (void)
 Returns the version number of JSBSim. More...
 
static constexpr double KelvinToFahrenheit (double kelvin)
 Converts from degrees Kelvin to degrees Fahrenheit. More...
 
static constexpr double CelsiusToRankine (double celsius)
 Converts from degrees Celsius to degrees Rankine. More...
 
static constexpr double RankineToCelsius (double rankine)
 Converts from degrees Rankine to degrees Celsius. More...
 
static constexpr double KelvinToRankine (double kelvin)
 Converts from degrees Kelvin to degrees Rankine. More...
 
static constexpr double RankineToKelvin (double rankine)
 Converts from degrees Rankine to degrees Kelvin. More...
 
static constexpr double FahrenheitToCelsius (double fahrenheit)
 Converts from degrees Fahrenheit to degrees Celsius. More...
 
static constexpr double CelsiusToFahrenheit (double celsius)
 Converts from degrees Celsius to degrees Fahrenheit. More...
 
static constexpr double CelsiusToKelvin (double celsius)
 Converts from degrees Celsius to degrees Kelvin. More...
 
static constexpr double KelvinToCelsius (double kelvin)
 Converts from degrees Kelvin to degrees Celsius. More...
 
static constexpr double FeetToMeters (double measure)
 Converts from feet to meters. More...
 
static bool EqualToRoundoff (double a, double b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (float a, float b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (float a, double b)
 Finite precision comparison. More...
 
static bool EqualToRoundoff (double a, float b)
 Finite precision comparison. More...
 
static constexpr double Constrain (double min, double value, double max)
 Constrain a value between a minimum and a maximum value.
 
static constexpr double sign (double num)
 

Public Attributes

struct JSBSim::FGInertial::Inputs in
 

Additional Inherited Members

- Static Public Attributes inherited from FGJSBBase
static char highint [5] = {27, '[', '1', 'm', '\0' }
 highlights text
 
static char halfint [5] = {27, '[', '2', 'm', '\0' }
 low intensity text
 
static char normint [6] = {27, '[', '2', '2', 'm', '\0' }
 normal intensity text
 
static char reset [5] = {27, '[', '0', 'm', '\0' }
 resets text properties
 
static char underon [5] = {27, '[', '4', 'm', '\0' }
 underlines text
 
static char underoff [6] = {27, '[', '2', '4', 'm', '\0' }
 underline off
 
static char fgblue [6] = {27, '[', '3', '4', 'm', '\0' }
 blue text
 
static char fgcyan [6] = {27, '[', '3', '6', 'm', '\0' }
 cyan text
 
static char fgred [6] = {27, '[', '3', '1', 'm', '\0' }
 red text
 
static char fggreen [6] = {27, '[', '3', '2', 'm', '\0' }
 green text
 
static char fgdef [6] = {27, '[', '3', '9', 'm', '\0' }
 default text
 
static short debug_lvl = 1
 
- Protected Member Functions inherited from FGModel
bool Upload (Element *el, bool preLoad)
 Uploads this model in memory. More...
 
- Static Protected Member Functions inherited from FGJSBBase
static std::string CreateIndexedPropertyName (const std::string &Property, int index)
 
- Protected Attributes inherited from FGModel
unsigned int exe_ctr
 
FGFDMExecFDMExec
 
std::string Name
 
std::shared_ptr< FGPropertyManagerPropertyManager
 
unsigned int rate
 
- Protected Attributes inherited from FGModelFunctions
FGPropertyReader LocalProperties
 
std::vector< std::shared_ptr< FGFunction > > PostFunctions
 
std::vector< std::shared_ptr< FGFunction > > PreFunctions
 
- Static Protected Attributes inherited from FGJSBBase
static constexpr double radtodeg = 180. / M_PI
 
static constexpr double degtorad = M_PI / 180.
 
static constexpr double hptoftlbssec = 550.0
 
static constexpr double psftoinhg = 0.014138
 
static constexpr double psftopa = 47.88
 
static constexpr double fttom = 0.3048
 
static constexpr double ktstofps = 1852./(3600*fttom)
 
static constexpr double fpstokts = 1.0 / ktstofps
 
static constexpr double inchtoft = 1.0/12.0
 
static constexpr double m3toft3 = 1.0/(fttom*fttom*fttom)
 
static constexpr double in3tom3 = inchtoft*inchtoft*inchtoft/m3toft3
 
static constexpr double inhgtopa = 3386.38
 
static constexpr double slugtolb = 32.174049
 Note that definition of lbtoslug by the inverse of slugtolb and not to a different constant you can also get from some tables will make lbtoslug*slugtolb == 1 up to the magnitude of roundoff. More...
 
static constexpr double lbtoslug = 1.0/slugtolb
 
static constexpr double kgtolb = 2.20462
 
static constexpr double kgtoslug = 0.06852168
 
static const std::string needed_cfg_version = "2.0"
 
static const std::string JSBSim_version = JSBSIM_VERSION " " __DATE__ " " __TIME__
 

Member Enumeration Documentation

◆ eGravType

enum eGravType

These define the indices use to select the gravitation models.

Enumerator
gtStandard 

Evaluate gravity using Newton's classical formula assuming the Earth is spherical.

gtWGS84 

Evaluate gravity using WGS84 formulas that take the Earth oblateness into account.

Definition at line 154 of file FGInertial.h.

154  {
157  gtStandard,
160  gtWGS84
161  };
@ gtWGS84
Evaluate gravity using WGS84 formulas that take the Earth oblateness into account.
Definition: FGInertial.h:160
@ gtStandard
Evaluate gravity using Newton's classical formula assuming the Earth is spherical.
Definition: FGInertial.h:157

Member Function Documentation

◆ GetAltitudeAGL()

double GetAltitudeAGL ( const FGLocation location) const
inline

Get the altitude above ground level.

Returns
the altitude AGL in feet.
Parameters
locationLocation at which the AGL is evaluated.
See also
SetGroundCallback

Definition at line 115 of file FGInertial.h.

115  {
116  FGLocation lDummy;
117  FGColumnVector3 vDummy;
118  return GroundCallback->GetAGLevel(location, lDummy, vDummy, vDummy,
119  vDummy);
120  }

◆ GetContactPoint()

double GetContactPoint ( const FGLocation location,
FGLocation contact,
FGColumnVector3 normal,
FGColumnVector3 velocity,
FGColumnVector3 ang_velocity 
) const
inline

Get terrain contact point information below the current location.

Parameters
locationLocation at which the contact point is evaluated.
contactContact point location
normalTerrain normal vector in contact point (ECEF frame)
velocityTerrain linear velocity in contact point (ECEF frame)
ang_velocityTerrain angular velocity in contact point (ECEF frame)
Returns
Location altitude above contact point (AGL) in feet.
See also
SetGroundCallback

Definition at line 104 of file FGInertial.h.

107  {
108  return GroundCallback->GetAGLevel(location, contact, normal, velocity,
109  ang_velocity); }

◆ GetTec2l()

FGMatrix33 GetTec2l ( const FGLocation location) const
inline

Transform matrix from the earth centered to local horizontal frame.

The local frame is the NED (North-East-Down) frame. Since the Down direction depends on the gravity so is the local frame. The East direction is tangent to the spheroid with a null component along the Z axis. The North direction is obtained from the cross product between East and Down.

Parameters
locationThe location at which the transform matrix must be evaluated.
Returns
a rotation matrix of the transform from the earth centered frame to the local horizontal frame.

Definition at line 195 of file FGInertial.h.

196  { return GetTl2ec(location).Transposed(); }
FGMatrix33 GetTl2ec(const FGLocation &location) const
Transform matrix from the local horizontal frame to earth centered.
Definition: FGInertial.cpp:157
FGMatrix33 Transposed(void) const
Transposed matrix.
Definition: FGMatrix33.h:221
+ Here is the call graph for this function:

◆ GetTl2ec()

FGMatrix33 GetTl2ec ( const FGLocation location) const

Transform matrix from the local horizontal frame to earth centered.

The local frame is the NED (North-East-Down) frame. Since the Down direction depends on the gravity so is the local frame. The East direction is tangent to the spheroid with a null component along the Z axis. The North direction is obtained from the cross product between East and Down.

Parameters
locationThe location at which the transform matrix must be evaluated.
Returns
a rotation matrix of the transform from the earth centered frame to the local horizontal frame.

Definition at line 157 of file FGInertial.cpp.

158 {
159  FGColumnVector3 North, Down, East{-location(eY), location(eX), 0.};
160 
161  switch (gravType) {
162  case gtStandard:
163  {
164  Down = location;
165  Down *= -1.0;
166  }
167  break;
168  case gtWGS84:
169  {
170  FGLocation sea_level = location;
171  sea_level.SetPositionGeodetic(location.GetLongitude(),
172  location.GetGeodLatitudeRad(), 0.0);
173  Down = GetGravityJ2(location);
174  Down -= vOmegaPlanet*(vOmegaPlanet*sea_level);}
175  }
176  Down.Normalize();
177  East.Normalize();
178  North = East*Down;
179 
180  return FGMatrix33{North(eX), East(eX), Down(eX),
181  North(eY), East(eY), Down(eY),
182  North(eZ), 0.0, Down(eZ)};
183 }
FGColumnVector3 & Normalize(void)
Normalize.
+ Here is the call graph for this function:

◆ Run()

bool Run ( bool  Holding)
overridevirtual

Runs the Inertial model; called by the Executive Can pass in a value indicating if the executive is directing the simulation to Hold.

Parameters
Holdingif true, the executive has been directed to hold the sim from advancing time. Some models may ignore this flag, such as the Input model, which may need to be active to listen on a socket for the "Resume" command to be given.
Returns
false if no error

Reimplemented from FGModel.

Definition at line 133 of file FGInertial.cpp.

134 {
135  // Fast return if we have nothing to do ...
136  if (FGModel::Run(Holding)) return true;
137  if (Holding) return false;
138 
139  // Gravitation accel
140  switch (gravType) {
141  case gtStandard:
142  {
143  double radius = in.Position.GetRadius();
144  vGravAccel = -(GetGAccel(radius) / radius) * in.Position;
145  }
146  break;
147  case gtWGS84:
148  vGravAccel = GetGravityJ2(in.Position);
149  break;
150  }
151 
152  return false;
153 }
double GetRadius() const
Get the distance from the center of the earth in feet.
Definition: FGLocation.h:291
virtual bool Run(bool Holding)
Runs the model; called by the Executive.
Definition: FGModel.cpp:89

◆ SetAltitudeAGL()

void SetAltitudeAGL ( FGLocation location,
double  altitudeAGL 
)

Set the altitude above ground level.

Parameters
locationLocation at which the AGL is set.
altitudeAGLAltitude above Ground Level in feet.
See also
SetGroundCallback

Definition at line 222 of file FGInertial.cpp.

223 {
224  FGColumnVector3 vDummy;
225  FGLocation contact;
226  contact.SetEllipse(a, b);
227  GroundCallback->GetAGLevel(location, contact, vDummy, vDummy, vDummy);
228  double groundHeight = contact.GetGeodAltitude();
229  double longitude = location.GetLongitude();
230  double geodLat = location.GetGeodLatitudeRad();
231  location.SetPositionGeodetic(longitude, geodLat,
232  groundHeight + altitudeAGL);
233 }
+ Here is the call graph for this function:

◆ SetGroundCallback()

void SetGroundCallback ( FGGroundCallback gc)
inline

Sets the ground callback pointer.

FGInertial will take ownership of the pointer which must therefore be located in the heap.

Parameters
gcA pointer to a ground callback object
See also
FGGroundCallback

Definition at line 151 of file FGInertial.h.

151 { GroundCallback.reset(gc); }

◆ SetTerrainElevation()

void SetTerrainElevation ( double  h)
inline

Set the terrain elevation above sea level.

Parameters
hTerrain elevation in ft.
See also
SetGroundcallback

Definition at line 131 of file FGInertial.h.

131  {
132  GroundCallback->SetTerrainElevation(h);
133  }

◆ SetTime()

void SetTime ( double  time)
inline

Set the simulation time.

The elapsed time can be used by the ground callback to assess the planet rotation or the movement of objects.

Parameters
timeelapsed time in seconds since the simulation started.

Definition at line 140 of file FGInertial.h.

140  {
141  GroundCallback->SetTime(time);
142  }
+ Here is the caller graph for this function:

The documentation for this class was generated from the following files: