2000-11-03 23:02:47 +00:00
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1999-02-11 21:05:34 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
Module: FGState.cpp
|
|
|
|
Author: Jon Berndt
|
|
|
|
Date started: 11/17/98
|
|
|
|
Called by: FGFDMExec and accessed by all models.
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) -------------
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
This program is free software; you can redistribute it and/or modify it under
|
|
|
|
the terms of the GNU General Public License as published by the Free Software
|
|
|
|
Foundation; either version 2 of the License, or (at your option) any later
|
|
|
|
version.
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
|
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
|
|
|
details.
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
|
|
this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|
|
|
Place - Suite 330, Boston, MA 02111-1307, USA.
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
Further information about the GNU General Public License can also be found on
|
|
|
|
the world wide web at http://www.gnu.org.
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
FUNCTIONAL DESCRIPTION
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
See header file.
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
HISTORY
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
11/17/98 JSB Created
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1999-02-05 21:26:01 +00:00
|
|
|
INCLUDES
|
2000-11-03 23:02:47 +00:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
1999-02-05 21:26:01 +00:00
|
|
|
|
1999-02-26 22:09:10 +00:00
|
|
|
#ifdef FGFS
|
2000-02-15 03:30:01 +00:00
|
|
|
# include <simgear/compiler.h>
|
2001-03-30 01:04:50 +00:00
|
|
|
# ifdef FG_HAVE_STD_INCLUDES
|
1999-02-26 22:09:10 +00:00
|
|
|
# include <cmath>
|
|
|
|
# else
|
|
|
|
# include <math.h>
|
|
|
|
# endif
|
|
|
|
#else
|
|
|
|
# include <cmath>
|
|
|
|
#endif
|
1999-02-13 01:12:03 +00:00
|
|
|
|
2000-10-02 23:07:30 +00:00
|
|
|
#ifndef M_PI
|
2000-07-06 21:02:46 +00:00
|
|
|
# include <simgear/constants.h>
|
2001-03-30 01:04:50 +00:00
|
|
|
# define M_PI FG_PI
|
2000-10-02 23:07:30 +00:00
|
|
|
#endif
|
2000-07-06 21:02:46 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
#include "FGState.h"
|
|
|
|
|
2001-03-30 01:04:50 +00:00
|
|
|
static const char *IdSrc = "$Id$";
|
2000-10-14 02:10:10 +00:00
|
|
|
static const char *IdHdr = ID_STATE;
|
|
|
|
|
2001-03-30 01:04:50 +00:00
|
|
|
extern short debug_lvl;
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-10-02 23:07:30 +00:00
|
|
|
MACROS
|
2000-11-03 23:02:47 +00:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
2000-10-02 23:07:30 +00:00
|
|
|
|
|
|
|
#define RegisterVariable(ID,DEF) coeffdef[#ID] = ID; paramdef[ID] = DEF
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
CLASS IMPLEMENTATION
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-10-02 23:07:30 +00:00
|
|
|
//
|
|
|
|
// For every term registered here there must be a corresponding handler in
|
|
|
|
// GetParameter() below that retrieves that parameter. Also, there must be an
|
|
|
|
// entry in the enum eParam definition in FGDefs.h. The ID is what must be used
|
|
|
|
// in any config file entry which references that item.
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2000-04-24 23:49:06 +00:00
|
|
|
FGState::FGState(FGFDMExec* fdex) : mTb2l(3,3),
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
mTl2b(3,3),
|
|
|
|
mTs2b(3,3),
|
2001-03-30 01:04:50 +00:00
|
|
|
vQtrn(4),
|
2001-04-17 21:19:54 +00:00
|
|
|
vlastQdot(4),
|
|
|
|
vQdot(4),
|
|
|
|
vTmp(4),
|
|
|
|
vEuler(3)
|
2000-05-27 05:48:14 +00:00
|
|
|
{
|
1999-02-11 21:05:34 +00:00
|
|
|
FDMExec = fdex;
|
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
a = 1000.0;
|
2000-01-10 21:07:00 +00:00
|
|
|
sim_time = 0.0;
|
|
|
|
dt = 1.0/120.0;
|
2001-03-30 01:04:50 +00:00
|
|
|
ActiveEngine = -1;
|
2001-04-17 21:19:54 +00:00
|
|
|
|
|
|
|
Aircraft = FDMExec->GetAircraft();
|
|
|
|
Translation = FDMExec->GetTranslation();
|
|
|
|
Rotation = FDMExec->GetRotation();
|
|
|
|
Position = FDMExec->GetPosition();
|
|
|
|
FCS = FDMExec->GetFCS();
|
|
|
|
Output = FDMExec->GetOutput();
|
|
|
|
Atmosphere = FDMExec->GetAtmosphere();
|
|
|
|
|
2001-03-30 01:04:50 +00:00
|
|
|
RegisterVariable(FG_TIME, " time " );
|
2000-10-02 23:07:30 +00:00
|
|
|
RegisterVariable(FG_QBAR, " qbar " );
|
|
|
|
RegisterVariable(FG_WINGAREA, " wing_area " );
|
|
|
|
RegisterVariable(FG_WINGSPAN, " wingspan " );
|
|
|
|
RegisterVariable(FG_CBAR, " cbar " );
|
|
|
|
RegisterVariable(FG_ALPHA, " alpha " );
|
|
|
|
RegisterVariable(FG_ALPHADOT, " alphadot " );
|
|
|
|
RegisterVariable(FG_BETA, " beta " );
|
|
|
|
RegisterVariable(FG_BETADOT, " betadot " );
|
2001-04-17 21:19:54 +00:00
|
|
|
RegisterVariable(FG_PHI, " roll_angle " );
|
|
|
|
RegisterVariable(FG_THT, " pitch_angle " );
|
|
|
|
RegisterVariable(FG_PSI, " heading_angle " );
|
2001-03-30 01:04:50 +00:00
|
|
|
RegisterVariable(FG_PITCHRATE, " pitch_rate " );
|
2000-10-02 23:07:30 +00:00
|
|
|
RegisterVariable(FG_ROLLRATE, " roll_rate " );
|
|
|
|
RegisterVariable(FG_YAWRATE, " yaw_rate " );
|
2001-04-17 21:19:54 +00:00
|
|
|
RegisterVariable(FG_CL_SQRD, " Clift_sqrd " );
|
2000-10-02 23:07:30 +00:00
|
|
|
RegisterVariable(FG_MACH, " mach " );
|
|
|
|
RegisterVariable(FG_ALTITUDE, " altitude " );
|
|
|
|
RegisterVariable(FG_BI2VEL, " BI2Vel " );
|
|
|
|
RegisterVariable(FG_CI2VEL, " CI2Vel " );
|
|
|
|
RegisterVariable(FG_ELEVATOR_POS, " elevator_pos " );
|
|
|
|
RegisterVariable(FG_AILERON_POS, " aileron_pos " );
|
|
|
|
RegisterVariable(FG_RUDDER_POS, " rudder_pos " );
|
|
|
|
RegisterVariable(FG_SPDBRAKE_POS, " speedbrake_pos " );
|
|
|
|
RegisterVariable(FG_SPOILERS_POS, " spoiler_pos " );
|
|
|
|
RegisterVariable(FG_FLAPS_POS, " flaps_pos " );
|
|
|
|
RegisterVariable(FG_ELEVATOR_CMD, " elevator_cmd " );
|
|
|
|
RegisterVariable(FG_AILERON_CMD, " aileron_cmd " );
|
|
|
|
RegisterVariable(FG_RUDDER_CMD, " rudder_cmd " );
|
|
|
|
RegisterVariable(FG_SPDBRAKE_CMD, " speedbrake_cmd " );
|
|
|
|
RegisterVariable(FG_SPOILERS_CMD, " spoiler_cmd " );
|
|
|
|
RegisterVariable(FG_FLAPS_CMD, " flaps_cmd " );
|
|
|
|
RegisterVariable(FG_THROTTLE_CMD, " throttle_cmd " );
|
|
|
|
RegisterVariable(FG_THROTTLE_POS, " throttle_pos " );
|
2001-03-30 01:04:50 +00:00
|
|
|
RegisterVariable(FG_ACTIVE_ENGINE, " active_engine " );
|
2000-10-02 23:07:30 +00:00
|
|
|
RegisterVariable(FG_HOVERB, " height/span " );
|
2001-03-30 01:04:50 +00:00
|
|
|
RegisterVariable(FG_PITCH_TRIM_CMD, " pitch_trim_cmd " );
|
2001-04-05 21:14:37 +00:00
|
|
|
RegisterVariable(FG_LEFT_BRAKE_CMD, " left_brake_cmd " );
|
|
|
|
RegisterVariable(FG_RIGHT_BRAKE_CMD," right_brake_cmd ");
|
|
|
|
RegisterVariable(FG_CENTER_BRAKE_CMD," center_brake_cmd ");
|
2001-04-06 22:59:31 +00:00
|
|
|
RegisterVariable(FG_SET_LOGGING, " data_logging " );
|
2001-03-30 01:04:50 +00:00
|
|
|
|
|
|
|
if (debug_lvl & 2) cout << "Instantiated: FGState" << endl;
|
1999-02-05 21:26:01 +00:00
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2001-03-30 01:04:50 +00:00
|
|
|
FGState::~FGState()
|
|
|
|
{
|
|
|
|
if (debug_lvl & 2) cout << "Destroyed: FGState" << endl;
|
|
|
|
}
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-10-02 23:07:30 +00:00
|
|
|
|
|
|
|
float FGState::GetParameter(eParam val_idx) {
|
2001-04-17 21:19:54 +00:00
|
|
|
float scratch;
|
|
|
|
|
2000-10-02 23:07:30 +00:00
|
|
|
switch(val_idx) {
|
2001-03-30 01:04:50 +00:00
|
|
|
case FG_TIME:
|
|
|
|
return sim_time;
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_QBAR:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Translation->Getqbar();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_WINGAREA:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Aircraft->GetWingArea();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_WINGSPAN:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Aircraft->GetWingSpan();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_CBAR:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Aircraft->Getcbar();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_ALPHA:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Translation->Getalpha();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_ALPHADOT:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Translation->Getadot();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_BETA:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Translation->Getbeta();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_BETADOT:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Translation->Getbdot();
|
|
|
|
case FG_PHI:
|
|
|
|
return Rotation->Getphi();
|
|
|
|
case FG_THT:
|
|
|
|
return Rotation->Gettht();
|
|
|
|
case FG_PSI:
|
|
|
|
return Rotation->Getpsi();
|
2001-03-30 01:04:50 +00:00
|
|
|
case FG_PITCHRATE:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Rotation->GetPQR(eQ);
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_ROLLRATE:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Rotation->GetPQR(eP);
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_YAWRATE:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Rotation->GetPQR(eR);
|
|
|
|
case FG_CL_SQRD:
|
|
|
|
if (Translation->Getqbar() > 0.00)
|
|
|
|
scratch = Aircraft->GetvLastFs(eLift)/(Aircraft->GetWingArea()*Translation->Getqbar());
|
|
|
|
else
|
|
|
|
scratch = 0.0;
|
|
|
|
return scratch*scratch;
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_ELEVATOR_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDePos();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_AILERON_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDaPos();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_RUDDER_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDrPos();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_SPDBRAKE_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDsbPos();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_SPOILERS_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDspPos();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_FLAPS_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDfPos();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_ELEVATOR_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDeCmd();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_AILERON_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDaCmd();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_RUDDER_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDrCmd();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_SPDBRAKE_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDsbCmd();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_SPOILERS_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDspCmd();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_FLAPS_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetDfCmd();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_MACH:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Translation->GetMach();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_ALTITUDE:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Position->Geth();
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_BI2VEL:
|
2001-04-17 21:19:54 +00:00
|
|
|
if(Translation->GetVt() > 0)
|
|
|
|
return Aircraft->GetWingSpan()/(2.0 * Translation->GetVt());
|
2000-10-02 23:07:30 +00:00
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
case FG_CI2VEL:
|
2001-04-17 21:19:54 +00:00
|
|
|
if(Translation->GetVt() > 0)
|
|
|
|
return Aircraft->Getcbar()/(2.0 * Translation->GetVt());
|
2000-10-02 23:07:30 +00:00
|
|
|
else
|
|
|
|
return 0;
|
|
|
|
case FG_THROTTLE_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
if (ActiveEngine < 0) return FCS->GetThrottleCmd(0);
|
|
|
|
else return FCS->GetThrottleCmd(ActiveEngine);
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_THROTTLE_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
if (ActiveEngine < 0) return FCS->GetThrottlePos(0);
|
|
|
|
else return FCS->GetThrottlePos(ActiveEngine);
|
2000-10-02 23:07:30 +00:00
|
|
|
case FG_HOVERB:
|
2001-04-17 21:19:54 +00:00
|
|
|
return Position->GetHOverB();
|
2001-03-30 01:04:50 +00:00
|
|
|
case FG_PITCH_TRIM_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
return FCS->GetPitchTrimCmd();
|
2000-10-02 23:07:30 +00:00
|
|
|
default:
|
|
|
|
cerr << "FGState::GetParameter() - No handler for parameter " << val_idx << endl;
|
|
|
|
return 0.0;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-10-02 23:07:30 +00:00
|
|
|
|
|
|
|
float FGState::GetParameter(string val_string) {
|
|
|
|
return GetParameter(coeffdef[val_string]);
|
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-10-02 23:07:30 +00:00
|
|
|
|
|
|
|
eParam FGState::GetParameterIndex(string val_string) {
|
|
|
|
return coeffdef[val_string];
|
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-10-02 23:07:30 +00:00
|
|
|
|
|
|
|
void FGState::SetParameter(eParam val_idx, float val) {
|
|
|
|
switch(val_idx) {
|
|
|
|
case FG_ELEVATOR_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDePos(val);
|
2000-10-02 23:07:30 +00:00
|
|
|
break;
|
|
|
|
case FG_AILERON_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDaPos(val);
|
2000-10-02 23:07:30 +00:00
|
|
|
break;
|
|
|
|
case FG_RUDDER_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDrPos(val);
|
2000-10-02 23:07:30 +00:00
|
|
|
break;
|
|
|
|
case FG_SPDBRAKE_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDsbPos(val);
|
2000-10-02 23:07:30 +00:00
|
|
|
break;
|
|
|
|
case FG_SPOILERS_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDspPos(val);
|
2000-10-02 23:07:30 +00:00
|
|
|
break;
|
|
|
|
case FG_FLAPS_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDfPos(val);
|
2000-10-02 23:07:30 +00:00
|
|
|
break;
|
|
|
|
case FG_THROTTLE_POS:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetThrottlePos(ActiveEngine,val);
|
2001-03-30 01:04:50 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case FG_ELEVATOR_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDeCmd(val);
|
2001-03-30 01:04:50 +00:00
|
|
|
break;
|
|
|
|
case FG_AILERON_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDaCmd(val);
|
2001-03-30 01:04:50 +00:00
|
|
|
break;
|
|
|
|
case FG_RUDDER_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDrCmd(val);
|
2001-03-30 01:04:50 +00:00
|
|
|
break;
|
|
|
|
case FG_SPDBRAKE_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDsbCmd(val);
|
2001-03-30 01:04:50 +00:00
|
|
|
break;
|
|
|
|
case FG_SPOILERS_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDspCmd(val);
|
2001-03-30 01:04:50 +00:00
|
|
|
break;
|
|
|
|
case FG_FLAPS_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetDfCmd(val);
|
2001-03-30 01:04:50 +00:00
|
|
|
break;
|
|
|
|
case FG_THROTTLE_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetThrottleCmd(ActiveEngine,val);
|
2001-03-30 01:04:50 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case FG_ACTIVE_ENGINE:
|
|
|
|
ActiveEngine = (int)val;
|
|
|
|
break;
|
|
|
|
|
2001-04-05 21:14:37 +00:00
|
|
|
case FG_LEFT_BRAKE_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetLBrake(val);
|
2001-04-05 21:14:37 +00:00
|
|
|
break;
|
|
|
|
case FG_CENTER_BRAKE_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetCBrake(val);
|
2001-04-05 21:14:37 +00:00
|
|
|
break;
|
|
|
|
case FG_RIGHT_BRAKE_CMD:
|
2001-04-17 21:19:54 +00:00
|
|
|
FCS->SetRBrake(val);
|
2001-04-05 21:14:37 +00:00
|
|
|
break;
|
|
|
|
|
2001-04-06 22:59:31 +00:00
|
|
|
case FG_SET_LOGGING:
|
2001-04-17 21:19:54 +00:00
|
|
|
if (val < -0.01) Output->Disable();
|
|
|
|
else if (val > 0.01) Output->Enable();
|
|
|
|
else Output->Toggle();
|
2001-04-06 22:59:31 +00:00
|
|
|
break;
|
|
|
|
|
2001-03-30 01:04:50 +00:00
|
|
|
default:
|
|
|
|
cerr << "Parameter '" << val_idx << "' (" << paramdef[val_idx] << ") not handled" << endl;
|
2000-10-02 23:07:30 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-08-17 21:18:11 +00:00
|
|
|
//***************************************************************************
|
|
|
|
//
|
|
|
|
// Reset: Assume all angles READ FROM FILE IN DEGREES !!
|
|
|
|
//
|
|
|
|
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
bool FGState::Reset(string path, string acname, string fname) {
|
1999-02-13 01:12:03 +00:00
|
|
|
string resetDef;
|
1999-02-11 21:05:34 +00:00
|
|
|
float U, V, W;
|
|
|
|
float phi, tht, psi;
|
2000-04-28 19:59:46 +00:00
|
|
|
float latitude, longitude, h;
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2000-11-14 20:31:58 +00:00
|
|
|
resetDef = path + "/" + acname + "/" + fname + ".xml";
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
ifstream resetfile(resetDef.c_str(), ios::in | ios::binary );
|
1999-02-05 21:26:01 +00:00
|
|
|
|
|
|
|
if (resetfile) {
|
|
|
|
resetfile >> U;
|
|
|
|
resetfile >> V;
|
|
|
|
resetfile >> W;
|
|
|
|
resetfile >> latitude;
|
|
|
|
resetfile >> longitude;
|
|
|
|
resetfile >> phi;
|
|
|
|
resetfile >> tht;
|
|
|
|
resetfile >> psi;
|
|
|
|
resetfile >> h;
|
|
|
|
resetfile.close();
|
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
Position->SetLatitude(latitude*DEGTORAD);
|
|
|
|
Position->SetLongitude(longitude*DEGTORAD);
|
|
|
|
Position->Seth(h);
|
2000-04-28 19:59:46 +00:00
|
|
|
|
1999-08-17 21:18:11 +00:00
|
|
|
Initialize(U, V, W, phi*DEGTORAD, tht*DEGTORAD, psi*DEGTORAD,
|
1999-12-20 20:24:49 +00:00
|
|
|
latitude*DEGTORAD, longitude*DEGTORAD, h);
|
1999-02-11 21:05:34 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
cerr << "Unable to load reset file " << fname << endl;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-08-17 21:18:11 +00:00
|
|
|
//***************************************************************************
|
|
|
|
//
|
|
|
|
// Initialize: Assume all angles GIVEN IN RADIANS !!
|
|
|
|
//
|
1999-02-05 21:26:01 +00:00
|
|
|
|
1999-07-31 04:55:23 +00:00
|
|
|
void FGState::Initialize(float U, float V, float W,
|
|
|
|
float phi, float tht, float psi,
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
float Latitude, float Longitude, float H) {
|
2000-04-24 23:49:06 +00:00
|
|
|
FGColumnVector vUVW(3);
|
2000-04-28 19:59:46 +00:00
|
|
|
FGColumnVector vLocalVelNED(3);
|
2001-04-17 21:19:54 +00:00
|
|
|
FGColumnVector vLocalEuler(3);
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
float alpha, beta;
|
2000-04-28 19:59:46 +00:00
|
|
|
float qbar, Vt;
|
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
Position->SetLatitude(Latitude);
|
|
|
|
Position->SetLongitude(Longitude);
|
|
|
|
Position->Seth(H);
|
1999-07-31 04:55:23 +00:00
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
Atmosphere->Run();
|
1999-07-31 04:55:23 +00:00
|
|
|
|
|
|
|
if (W != 0.0)
|
|
|
|
alpha = U*U > 0.0 ? atan2(W, U) : 0.0;
|
|
|
|
else
|
|
|
|
alpha = 0.0;
|
|
|
|
if (V != 0.0)
|
|
|
|
beta = U*U+W*W > 0.0 ? atan2(V, (fabs(U)/U)*sqrt(U*U + W*W)) : 0.0;
|
|
|
|
else
|
|
|
|
beta = 0.0;
|
|
|
|
|
2000-04-24 23:49:06 +00:00
|
|
|
vUVW << U << V << W;
|
2001-04-17 21:19:54 +00:00
|
|
|
Translation->SetUVW(vUVW);
|
2000-04-28 19:59:46 +00:00
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
vLocalEuler << phi << tht << psi;
|
|
|
|
Rotation->SetEuler(vLocalEuler);
|
2000-04-28 19:59:46 +00:00
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
Translation->SetAB(alpha, beta);
|
1999-07-31 04:55:23 +00:00
|
|
|
|
|
|
|
Vt = sqrt(U*U + V*V + W*W);
|
2001-04-17 21:19:54 +00:00
|
|
|
Translation->SetVt(Vt);
|
2000-04-28 19:59:46 +00:00
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
Translation->SetMach(Vt/Atmosphere->GetSoundSpeed());
|
2000-10-02 23:07:30 +00:00
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
qbar = 0.5*(U*U + V*V + W*W)*Atmosphere->GetDensity();
|
|
|
|
Translation->Setqbar(qbar);
|
2000-04-24 23:49:06 +00:00
|
|
|
|
|
|
|
InitMatrices(phi, tht, psi);
|
2000-04-28 19:59:46 +00:00
|
|
|
|
|
|
|
vLocalVelNED = mTb2l*vUVW;
|
2001-04-17 21:19:54 +00:00
|
|
|
Position->SetvVel(vLocalVelNED);
|
1999-07-31 04:55:23 +00:00
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1999-07-31 04:55:23 +00:00
|
|
|
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
void FGState::Initialize(FGInitialCondition *FGIC) {
|
1999-12-20 20:24:49 +00:00
|
|
|
|
1999-08-17 21:18:11 +00:00
|
|
|
float tht,psi,phi;
|
2000-04-28 19:59:46 +00:00
|
|
|
float U, V, W, h;
|
|
|
|
float latitude, longitude;
|
1999-08-17 21:18:11 +00:00
|
|
|
|
|
|
|
latitude = FGIC->GetLatitudeRadIC();
|
|
|
|
longitude = FGIC->GetLongitudeRadIC();
|
|
|
|
h = FGIC->GetAltitudeFtIC();
|
|
|
|
U = FGIC->GetUBodyFpsIC();
|
|
|
|
V = FGIC->GetVBodyFpsIC();
|
|
|
|
W = FGIC->GetWBodyFpsIC();
|
|
|
|
tht = FGIC->GetThetaRadIC();
|
|
|
|
phi = FGIC->GetPhiRadIC();
|
|
|
|
psi = FGIC->GetPsiRadIC();
|
|
|
|
|
2000-04-24 23:49:06 +00:00
|
|
|
Initialize(U, V, W, phi, tht, psi, latitude, longitude, h);
|
2000-10-28 16:30:30 +00:00
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
Position->SetSeaLevelRadius( FGIC->GetSeaLevelRadiusFtIC() );
|
|
|
|
Position->SetRunwayRadius( FGIC->GetSeaLevelRadiusFtIC() +
|
2000-10-28 16:30:30 +00:00
|
|
|
FGIC->GetTerrainAltitudeFtIC() );
|
2000-11-03 23:02:47 +00:00
|
|
|
|
1999-08-17 21:18:11 +00:00
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1999-08-17 21:18:11 +00:00
|
|
|
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
bool FGState::StoreData(string fname) {
|
1999-02-26 22:09:10 +00:00
|
|
|
ofstream datafile(fname.c_str());
|
1999-02-05 21:26:01 +00:00
|
|
|
|
|
|
|
if (datafile) {
|
2001-04-17 21:19:54 +00:00
|
|
|
datafile << Translation->GetUVW(eU);
|
|
|
|
datafile << Translation->GetUVW(eV);
|
|
|
|
datafile << Translation->GetUVW(eW);
|
|
|
|
datafile << Position->GetLatitude();
|
|
|
|
datafile << Position->GetLongitude();
|
|
|
|
datafile << Rotation->GetEuler(ePhi);
|
|
|
|
datafile << Rotation->GetEuler(eTht);
|
|
|
|
datafile << Rotation->GetEuler(ePsi);
|
|
|
|
datafile << Position->Geth();
|
1999-02-05 21:26:01 +00:00
|
|
|
datafile.close();
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
cerr << "Could not open dump file " << fname << endl;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1999-02-05 21:26:01 +00:00
|
|
|
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
void FGState::InitMatrices(float phi, float tht, float psi) {
|
2000-04-24 23:49:06 +00:00
|
|
|
float thtd2, psid2, phid2;
|
|
|
|
float Sthtd2, Spsid2, Sphid2;
|
|
|
|
float Cthtd2, Cpsid2, Cphid2;
|
|
|
|
float Cphid2Cthtd2;
|
|
|
|
float Cphid2Sthtd2;
|
|
|
|
float Sphid2Sthtd2;
|
|
|
|
float Sphid2Cthtd2;
|
|
|
|
|
|
|
|
thtd2 = tht/2.0;
|
|
|
|
psid2 = psi/2.0;
|
|
|
|
phid2 = phi/2.0;
|
|
|
|
|
|
|
|
Sthtd2 = sin(thtd2);
|
|
|
|
Spsid2 = sin(psid2);
|
|
|
|
Sphid2 = sin(phid2);
|
|
|
|
|
|
|
|
Cthtd2 = cos(thtd2);
|
|
|
|
Cpsid2 = cos(psid2);
|
|
|
|
Cphid2 = cos(phid2);
|
|
|
|
|
|
|
|
Cphid2Cthtd2 = Cphid2*Cthtd2;
|
|
|
|
Cphid2Sthtd2 = Cphid2*Sthtd2;
|
|
|
|
Sphid2Sthtd2 = Sphid2*Sthtd2;
|
|
|
|
Sphid2Cthtd2 = Sphid2*Cthtd2;
|
|
|
|
|
|
|
|
vQtrn(1) = Cphid2Cthtd2*Cpsid2 + Sphid2Sthtd2*Spsid2;
|
|
|
|
vQtrn(2) = Sphid2Cthtd2*Cpsid2 - Cphid2Sthtd2*Spsid2;
|
|
|
|
vQtrn(3) = Cphid2Sthtd2*Cpsid2 + Sphid2Cthtd2*Spsid2;
|
|
|
|
vQtrn(4) = Cphid2Cthtd2*Spsid2 - Sphid2Sthtd2*Cpsid2;
|
|
|
|
|
|
|
|
CalcMatrices();
|
1999-02-05 21:26:01 +00:00
|
|
|
}
|
2000-04-24 23:49:06 +00:00
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-04-24 23:49:06 +00:00
|
|
|
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
void FGState::CalcMatrices(void) {
|
2000-04-24 23:49:06 +00:00
|
|
|
float Q0Q0, Q1Q1, Q2Q2, Q3Q3;
|
|
|
|
float Q0Q1, Q0Q2, Q0Q3, Q1Q2;
|
|
|
|
float Q1Q3, Q2Q3;
|
|
|
|
|
|
|
|
Q0Q0 = vQtrn(1)*vQtrn(1);
|
|
|
|
Q1Q1 = vQtrn(2)*vQtrn(2);
|
|
|
|
Q2Q2 = vQtrn(3)*vQtrn(3);
|
|
|
|
Q3Q3 = vQtrn(4)*vQtrn(4);
|
|
|
|
Q0Q1 = vQtrn(1)*vQtrn(2);
|
|
|
|
Q0Q2 = vQtrn(1)*vQtrn(3);
|
|
|
|
Q0Q3 = vQtrn(1)*vQtrn(4);
|
|
|
|
Q1Q2 = vQtrn(2)*vQtrn(3);
|
|
|
|
Q1Q3 = vQtrn(2)*vQtrn(4);
|
|
|
|
Q2Q3 = vQtrn(3)*vQtrn(4);
|
|
|
|
|
2000-05-27 05:48:14 +00:00
|
|
|
mTl2b(1,1) = Q0Q0 + Q1Q1 - Q2Q2 - Q3Q3;
|
|
|
|
mTl2b(1,2) = 2*(Q1Q2 + Q0Q3);
|
|
|
|
mTl2b(1,3) = 2*(Q1Q3 - Q0Q2);
|
|
|
|
mTl2b(2,1) = 2*(Q1Q2 - Q0Q3);
|
|
|
|
mTl2b(2,2) = Q0Q0 - Q1Q1 + Q2Q2 - Q3Q3;
|
|
|
|
mTl2b(2,3) = 2*(Q2Q3 + Q0Q1);
|
|
|
|
mTl2b(3,1) = 2*(Q1Q3 + Q0Q2);
|
|
|
|
mTl2b(3,2) = 2*(Q2Q3 - Q0Q1);
|
|
|
|
mTl2b(3,3) = Q0Q0 - Q1Q1 - Q2Q2 + Q3Q3;
|
|
|
|
|
|
|
|
mTb2l = mTl2b;
|
|
|
|
mTb2l.T();
|
2000-04-24 23:49:06 +00:00
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-04-24 23:49:06 +00:00
|
|
|
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
void FGState::IntegrateQuat(FGColumnVector vPQR, int rate) {
|
2000-04-24 23:49:06 +00:00
|
|
|
vQdot(1) = -0.5*(vQtrn(2)*vPQR(eP) + vQtrn(3)*vPQR(eQ) + vQtrn(4)*vPQR(eR));
|
|
|
|
vQdot(2) = 0.5*(vQtrn(1)*vPQR(eP) + vQtrn(3)*vPQR(eR) - vQtrn(4)*vPQR(eQ));
|
|
|
|
vQdot(3) = 0.5*(vQtrn(1)*vPQR(eQ) + vQtrn(4)*vPQR(eP) - vQtrn(2)*vPQR(eR));
|
|
|
|
vQdot(4) = 0.5*(vQtrn(1)*vPQR(eR) + vQtrn(2)*vPQR(eQ) - vQtrn(3)*vPQR(eP));
|
|
|
|
vQtrn += 0.5*dt*rate*(vlastQdot + vQdot);
|
|
|
|
|
|
|
|
vQtrn.Normalize();
|
|
|
|
|
|
|
|
vlastQdot = vQdot;
|
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-04-24 23:49:06 +00:00
|
|
|
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
FGColumnVector FGState::CalcEuler(void) {
|
2000-07-06 21:02:46 +00:00
|
|
|
if (mTl2b(3,3) == 0.0) mTl2b(3,3) = 0.0000001;
|
|
|
|
if (mTl2b(1,1) == 0.0) mTl2b(1,1) = 0.0000001;
|
2000-04-24 23:49:06 +00:00
|
|
|
|
2000-07-06 21:02:46 +00:00
|
|
|
vEuler(ePhi) = atan2(mTl2b(2,3), mTl2b(3,3));
|
2000-05-27 05:48:14 +00:00
|
|
|
vEuler(eTht) = asin(-mTl2b(1,3));
|
2000-07-06 21:02:46 +00:00
|
|
|
vEuler(ePsi) = atan2(mTl2b(1,2), mTl2b(1,1));
|
2000-04-24 23:49:06 +00:00
|
|
|
|
|
|
|
if (vEuler(ePsi) < 0.0) vEuler(ePsi) += 2*M_PI;
|
|
|
|
|
|
|
|
return vEuler;
|
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-04-24 23:49:06 +00:00
|
|
|
|
Updates from the Jon and Tony show.
Tony submitted:
JSBsim:
Added trimming routine, it is longitudinal & in-air only at this point
Added support for taking wind & weather data from external source
Added support for flaps.
Added independently settable pitch trim
Added alphamin and max to config file, stall modeling and warning to
follow
c172.cfg:
Flaps!
Adjusted Cmo, model should be speed stable now
FG:
Hooked up Christian's weather code, should be using it soon.
Hooked up the trimming routine. Note that the X-15 will not trim.
This is not a model or trimming routine deficiency, just the
nature of the X-15
The trimming routine sets the pitch trim and and throttle at startup.
The throttle is set using Norman's code for the autothrottle so the
autothrottle is on by default. --notrim will turn it off.
Added --vc, --mach, and --notrim switches
(vc is airspeed in knots)
uBody, vBody, and wBody are still supported, last one entered
on the command line counts, i.e. you can set vc or mach or u,v,
and w but any combination will be ignored.
2000-05-16 21:35:11 +00:00
|
|
|
FGMatrix FGState::GetTs2b(float alpha, float beta) {
|
2000-04-24 23:49:06 +00:00
|
|
|
float ca, cb, sa, sb;
|
|
|
|
|
|
|
|
ca = cos(alpha);
|
|
|
|
sa = sin(alpha);
|
|
|
|
cb = cos(beta);
|
|
|
|
sb = sin(beta);
|
|
|
|
|
|
|
|
mTs2b(1,1) = -ca*cb;
|
|
|
|
mTs2b(1,2) = -ca*sb;
|
|
|
|
mTs2b(1,3) = sa;
|
2000-05-02 18:25:30 +00:00
|
|
|
mTs2b(2,1) = -sb;
|
2000-04-24 23:49:06 +00:00
|
|
|
mTs2b(2,2) = cb;
|
|
|
|
mTs2b(2,3) = 0.0;
|
|
|
|
mTs2b(3,1) = -sa*cb;
|
|
|
|
mTs2b(3,2) = -sa*sb;
|
|
|
|
mTs2b(3,3) = -ca;
|
|
|
|
|
|
|
|
return mTs2b;
|
|
|
|
}
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2000-04-24 23:49:06 +00:00
|
|
|
|
2001-03-30 01:04:50 +00:00
|
|
|
void FGState::Debug(void)
|
|
|
|
{
|
|
|
|
//TODO: Add your source code here
|
|
|
|
}
|
|
|
|
|