Updates to JSBsim from Jon Berndt.
Fixed a typo in hud.cxx.
This commit is contained in:
parent
3895c604ce
commit
c54a4fe206
6 changed files with 26 additions and 329 deletions
|
@ -1103,7 +1103,7 @@ void fgUpdateHUD( void ) {
|
|||
}
|
||||
|
||||
char *gmt_str = get_formated_gmt_time();
|
||||
HUD_TextList.add( fgText( gmt_str, 40, 10) );
|
||||
HUD_TextList.add( fgText( 40, 10, gmt_str) );
|
||||
|
||||
HUD_TextList.draw();
|
||||
|
||||
|
|
|
@ -37,10 +37,10 @@ SENTRY
|
|||
/*******************************************************************************
|
||||
COMMENTS, REFERENCES, and NOTES
|
||||
*******************************************************************************/
|
||||
/**
|
||||
/*
|
||||
The aerodynamic coefficients used in this model typically are:
|
||||
<PRE>
|
||||
<b>Longitudinal</b>
|
||||
|
||||
Longitudinal
|
||||
CL0 - Reference lift at zero alpha
|
||||
CD0 - Reference drag at zero alpha
|
||||
CDM - Drag due to Mach
|
||||
|
@ -56,7 +56,7 @@ The aerodynamic coefficients used in this model typically are:
|
|||
Cmq - Pitch damping (pitch moment due to pitch rate)
|
||||
CmM - Pitch Moment due to Mach
|
||||
|
||||
<b>Lateral</b>
|
||||
Lateral
|
||||
Cyb - Side force due to sideslip
|
||||
Cyr - Side force due to yaw rate
|
||||
|
||||
|
@ -67,7 +67,7 @@ The aerodynamic coefficients used in this model typically are:
|
|||
Cnp - Rudder adverse yaw (yaw moment due to roll rate)
|
||||
Cnr - Yaw damping (yaw moment due to yaw rate)
|
||||
|
||||
<b>Control</b>
|
||||
Control
|
||||
CLDe - Lift due to elevator
|
||||
CDDe - Drag due to elevator
|
||||
CyDr - Side force due to rudder
|
||||
|
@ -78,60 +78,18 @@ The aerodynamic coefficients used in this model typically are:
|
|||
ClDr - Roll moment due to rudder
|
||||
CnDr - Yaw moment due to rudder
|
||||
CnDa - Yaw moment due to aileron
|
||||
</PRE>
|
||||
This class expects to be run in a directory which contains the subdirectory
|
||||
structure shown below (where example aircraft X-15 is shown):
|
||||
|
||||
<PRE>
|
||||
aircraft/
|
||||
X-15/
|
||||
X-15.dat reset00 reset01 reset02 ...
|
||||
CDRAG/
|
||||
a0 a M De
|
||||
CSIDE/
|
||||
b r Dr Da
|
||||
CLIFT/
|
||||
a0 a M adt De
|
||||
CROLL/
|
||||
b p r Da Dr
|
||||
CPITCH/
|
||||
a0 a adt q M De
|
||||
CYAW/
|
||||
b p r Dr Da
|
||||
F-16/
|
||||
F-16.dat reset00 reset01 ...
|
||||
CDRAG/
|
||||
a0 a M De
|
||||
...
|
||||
</PRE>
|
||||
|
||||
The General Idea
|
||||
|
||||
The file structure is arranged so that various modeled aircraft are stored in
|
||||
their own subdirectory. Each aircraft subdirectory is named after the aircraft.
|
||||
There should be a file present in the specific aircraft subdirectory (e.g.
|
||||
aircraft/X-15) with the same name as the directory with a .dat appended. This
|
||||
file contains mass properties information, name of aircraft, etc. for the
|
||||
aircraft. In that same directory are reset files numbered starting from 0 (two
|
||||
digit numbers), e.g. reset03. Within each reset file are values for important
|
||||
state variables for specific flight conditions (altitude, airspeed, etc.). Also
|
||||
within this directory are the directories containing lookup tables for the
|
||||
stability derivatives for the aircraft.
|
||||
@author Jon S. Berndt
|
||||
@memo Encompasses all aircraft functionality and objects
|
||||
@see <ll>
|
||||
<li>[1] Cooke, Zyda, Pratt, and McGhee, "NPSNET: Flight Simulation Dynamic Modeling
|
||||
[1] Cooke, Zyda, Pratt, and McGhee, "NPSNET: Flight Simulation Dynamic Modeling
|
||||
Using Quaternions", Presence, Vol. 1, No. 4, pp. 404-420 Naval Postgraduate
|
||||
School, January 1994</li>
|
||||
<li>[2] D. M. Henderson, "Euler Angles, Quaternions, and Transformation Matrices",
|
||||
JSC 12960, July 1977</li>
|
||||
<li>[3] Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at
|
||||
NASA-Ames", NASA CR-2497, January 1975</li>
|
||||
<li>[4] Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
|
||||
Wiley & Sons, 1979 ISBN 0-471-03032-5</li>
|
||||
<li>[5] Bernard Etkin, "Dynamics of Flight, Stability and Control", Wiley & Sons,
|
||||
1982 ISBN 0-471-08936-2</li>
|
||||
</ll>
|
||||
School, January 1994
|
||||
[2] D. M. Henderson, "Euler Angles, Quaternions, and Transformation Matrices",
|
||||
JSC 12960, July 1977
|
||||
[3] Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at
|
||||
NASA-Ames", NASA CR-2497, January 1975
|
||||
[4] Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
|
||||
Wiley & Sons, 1979 ISBN 0-471-03032-5
|
||||
[5] Bernard Etkin, "Dynamics of Flight, Stability and Control", Wiley & Sons,
|
||||
1982 ISBN 0-471-08936-2
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
|
@ -145,8 +103,6 @@ INCLUDES
|
|||
# else
|
||||
# include <fstream.h>
|
||||
# endif
|
||||
# include STL_STRING
|
||||
FG_USING_STD(string);
|
||||
#else
|
||||
# include <fstream>
|
||||
#endif
|
||||
|
@ -160,9 +116,7 @@ INCLUDES
|
|||
DEFINITIONS
|
||||
*******************************************************************************/
|
||||
|
||||
#ifndef FGFS
|
||||
using namespace std;
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
CLASS DECLARATION
|
||||
|
@ -171,325 +125,69 @@ CLASS DECLARATION
|
|||
class FGAircraft : public FGModel
|
||||
{
|
||||
public:
|
||||
// ***************************************************************************
|
||||
/** @memo Constructor
|
||||
@param FGFDMExec* - a pointer to the "owning" FDM Executive
|
||||
*/
|
||||
FGAircraft(FGFDMExec*);
|
||||
|
||||
// ***************************************************************************
|
||||
/** Destructor */
|
||||
FGAircraft(FGFDMExec*);
|
||||
~FGAircraft(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** This must be called for each dt to execute the model algorithm */
|
||||
bool Run(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** This function must be called with the name of an aircraft which
|
||||
has an associated .dat file in the appropriate subdirectory. The paths
|
||||
to the appropriate subdirectories are given as the first two parameters.
|
||||
@memo Loads the given aircraft.
|
||||
@param string Path to the aircraft files
|
||||
@param string Path to the engine files
|
||||
@param string The name of the aircraft to be loaded, e.g. "X15".
|
||||
@return True - if successful
|
||||
*/
|
||||
bool LoadAircraft(string, string, string);
|
||||
|
||||
// ***************************************************************************
|
||||
/** This function must be called with the name of an aircraft which
|
||||
has an associated .dat file in the appropriate subdirectory. The paths
|
||||
to the appropriate subdirectories are given as the first two parameters.
|
||||
@memo Loads the given aircraft.
|
||||
@param string Path to the aircraft files
|
||||
@param string Path to the engine files
|
||||
@param string The name of the aircraft to be loaded, e.g. "X15".
|
||||
@return True - if successful
|
||||
*/
|
||||
bool LoadAircraftEx(string, string, string);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo Gets the aircraft name as defined in the aircraft config file.
|
||||
@param
|
||||
@return string Aircraft name.
|
||||
*/
|
||||
inline string GetAircraftName(void) {return AircraftName;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo Sets the GearUp flag
|
||||
@param boolean true or false
|
||||
@return
|
||||
*/
|
||||
inline void SetGearUp(bool tt) {GearUp = tt;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo Returns the state of the GearUp flag
|
||||
@param
|
||||
@return boolean true or false
|
||||
*/
|
||||
inline bool GetGearUp(void) {return GearUp;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo Returns the area of the wing
|
||||
@param
|
||||
@return float wing area S, in square feet
|
||||
*/
|
||||
inline float GetWingArea(void) {return WingArea;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo Returns the wing span
|
||||
@param
|
||||
@return float wing span in feet
|
||||
*/
|
||||
inline float GetWingSpan(void) {return WingSpan;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo Returns the average wing chord
|
||||
@param
|
||||
@return float wing chord in feet
|
||||
*/
|
||||
inline float Getcbar(void) {return cbar;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo Returns an engine object
|
||||
@param int The engine number
|
||||
@return FGEengine* The pointer to the requested engine object.
|
||||
*/
|
||||
inline FGEngine* GetEngine(int tt) {return Engine[tt];}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline FGTank* GetTank(int tt) {return Tank[tt];}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetWeight(void) {return Weight;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetMass(void) {return Mass;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetL(void) {return Moments[0];}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetM(void) {return Moments[1];}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetN(void) {return Moments[2];}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetFx(void) {return Forces[0];}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetFy(void) {return Forces[1];}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetFz(void) {return Forces[2];}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetIxx(void) {return Ixx;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetIyy(void) {return Iyy;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetIzz(void) {return Izz;}
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
inline float GetIxz(void) {return Ixz;}
|
||||
|
||||
private:
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void GetState(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void PutState(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void FAero(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void FGear(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void FMass(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void FProp(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void MAero(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void MGear(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void MMass(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void MProp(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
void MassChange(void);
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
float Moments[3];
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
float Forces[3];
|
||||
|
||||
// ***************************************************************************
|
||||
/** @memo
|
||||
@param
|
||||
@return
|
||||
*/
|
||||
string AircraftName;
|
||||
|
||||
// ***************************************************************************
|
||||
///
|
||||
float Ixx, Iyy, Izz, Ixz, EmptyMass, Mass;
|
||||
///
|
||||
float Xcg, Ycg, Zcg;
|
||||
///
|
||||
float Xep, Yep, Zep;
|
||||
///
|
||||
float rho, qbar, Vt;
|
||||
///
|
||||
float alpha, beta;
|
||||
///
|
||||
float WingArea, WingSpan, cbar;
|
||||
///
|
||||
float phi, tht, psi;
|
||||
///
|
||||
float Weight, EmptyWeight;
|
||||
///
|
||||
float dt;
|
||||
|
||||
///
|
||||
int numTanks;
|
||||
///
|
||||
int numEngines;
|
||||
///
|
||||
int numSelectedOxiTanks;
|
||||
///
|
||||
int numSelectedFuelTanks;
|
||||
///
|
||||
FGTank* Tank[MAX_TANKS];
|
||||
///
|
||||
FGEngine *Engine[MAX_ENGINES];
|
||||
|
||||
///
|
||||
FGCoefficient *Coeff[6][10];
|
||||
///
|
||||
int coeff_ctr[6];
|
||||
|
||||
///
|
||||
bool GearUp;
|
||||
|
||||
///
|
||||
enum Param {LiftCoeff,
|
||||
DragCoeff,
|
||||
SideCoeff,
|
||||
|
@ -498,7 +196,6 @@ private:
|
|||
YawCoeff,
|
||||
numCoeffs};
|
||||
|
||||
///
|
||||
string Axis[6];
|
||||
|
||||
protected:
|
||||
|
|
|
@ -76,4 +76,4 @@ private:
|
|||
};
|
||||
|
||||
/******************************************************************************/
|
||||
#endif
|
||||
#endif
|
|
@ -59,8 +59,8 @@ class FGOutput;
|
|||
class FGFDMExec
|
||||
{
|
||||
public:
|
||||
FGFDMExec(void);
|
||||
~FGFDMExec(void);
|
||||
FGFDMExec::FGFDMExec(void);
|
||||
FGFDMExec::~FGFDMExec(void);
|
||||
|
||||
FGModel* FirstModel;
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ FGUtility::~FGUtility()
|
|||
|
||||
float FGUtility::ToGeodetic()
|
||||
{
|
||||
float GeodeticLat, Latitude, Radius, Altitude;
|
||||
float Latitude, Radius, Altitude;
|
||||
float tanLat, xAlpha, muAlpha, sinmuAlpha, denom, rhoAlpha, dMu;
|
||||
float lPoint, lambdaSL, sinlambdaSL, dLambda, rAlpha;
|
||||
|
||||
|
@ -85,8 +85,6 @@ float FGUtility::ToGeodetic()
|
|||
|
||||
if (( M_PI_2 - Latitude < ONESECOND) ||
|
||||
( M_PI_2 + Latitude < ONESECOND)) { // Near a pole
|
||||
GeodeticLat = Latitude;
|
||||
Altitude = Radius - SeaLevelR;
|
||||
} else {
|
||||
tanLat = tan(Latitude);
|
||||
xAlpha = ECCENT*EARTHRAD /
|
||||
|
@ -104,7 +102,7 @@ float FGUtility::ToGeodetic()
|
|||
rhoAlpha = EARTHRAD*(1.0 - EPS) / (denom*denom*denom);
|
||||
dMu = atan2(lPoint*sin(dLambda),rhoAlpha + Altitude);
|
||||
State->SetGeodeticLat(muAlpha - dMu);
|
||||
lambdaSL = atan(ECCENTSQRD*tan(GeodeticLat));
|
||||
lambdaSL = atan(ECCENTSQRD*tan(muAlpha - dMu));
|
||||
sinlambdaSL = sin(lambdaSL);
|
||||
SeaLevelR = sqrt(EARTHRADSQRD / (1 + INVECCENTSQRDM1* sinlambdaSL*sinlambdaSL));
|
||||
}
|
||||
|
@ -115,8 +113,9 @@ float FGUtility::ToGeodetic()
|
|||
float FGUtility:: FromGeodetic()
|
||||
{
|
||||
float lambdaSL, sinlambdaSL, coslambdaSL, sinMu, cosMu, py, px;
|
||||
float Altitude, SeaLevelR;
|
||||
float Altitude, SeaLevelR, Radius;
|
||||
|
||||
Radius = State->Geth() + EARTHRAD;
|
||||
lambdaSL = atan(ECCENTSQRD*tan(State->GetGeodeticLat()));
|
||||
sinlambdaSL = sin(lambdaSL);
|
||||
coslambdaSL = cos(lambdaSL);
|
||||
|
@ -124,6 +123,7 @@ float FGUtility:: FromGeodetic()
|
|||
cosMu = cos(State->GetGeodeticLat());
|
||||
SeaLevelR = sqrt(EARTHRADSQRD /
|
||||
(1 + INVECCENTSQRDM1*sinlambdaSL*sinlambdaSL));
|
||||
Altitude = Radius - SeaLevelR;
|
||||
px = SeaLevelR*coslambdaSL + Altitude*cosMu;
|
||||
py = SeaLevelR*sinlambdaSL + Altitude*sinMu;
|
||||
State->Setlatitude(atan2(py,px));
|
||||
|
|
|
@ -42,7 +42,7 @@ INCLUDES
|
|||
DEFINES
|
||||
*******************************************************************************/
|
||||
|
||||
// FG_USING_STD(std);
|
||||
using namespace std;
|
||||
|
||||
/*******************************************************************************
|
||||
CLASS DECLARATION
|
||||
|
|
Loading…
Add table
Reference in a new issue