2000-11-03 23:02:47 +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
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
Header: FGState.h
|
|
|
|
Author: Jon S. Berndt
|
|
|
|
Date started: 11/17/98
|
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
|
|
|
|
--------------------------------------------------------------------------------
|
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
|
|
|
SENTRY
|
2000-11-03 23:02:47 +00:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
1999-02-05 21:26:01 +00:00
|
|
|
|
|
|
|
#ifndef FGSTATE_H
|
|
|
|
#define FGSTATE_H
|
|
|
|
|
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-06-05 20:58:48 +00:00
|
|
|
# ifdef SG_HAVE_STD_INCLUDES
|
1999-02-26 22:09:10 +00:00
|
|
|
# include <fstream>
|
|
|
|
# else
|
|
|
|
# include <fstream.h>
|
|
|
|
# endif
|
|
|
|
#else
|
2001-10-05 20:19:59 +00:00
|
|
|
# if defined(sgi) && !defined(__GNUC__)
|
|
|
|
# include <fstream.h>
|
|
|
|
# else
|
|
|
|
# include <fstream>
|
|
|
|
# endif
|
1999-02-26 22:09:10 +00:00
|
|
|
#endif
|
|
|
|
|
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
|
|
|
#include <string>
|
2000-04-24 23:49:06 +00:00
|
|
|
#include <map>
|
2001-10-05 20:19:59 +00:00
|
|
|
#include "FGJSBBase.h"
|
1999-08-17 21:18:11 +00:00
|
|
|
#include "FGInitialCondition.h"
|
2001-10-05 20:19:59 +00:00
|
|
|
#include "FGMatrix33.h"
|
|
|
|
#include "FGColumnVector3.h"
|
|
|
|
#include "FGColumnVector4.h"
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2002-09-22 15:31:09 +00:00
|
|
|
#include "FGFDMExec.h"
|
|
|
|
#include "FGAtmosphere.h"
|
|
|
|
#include "FGFCS.h"
|
|
|
|
#include "FGTranslation.h"
|
|
|
|
#include "FGRotation.h"
|
|
|
|
#include "FGPosition.h"
|
|
|
|
#include "FGAerodynamics.h"
|
|
|
|
#include "FGOutput.h"
|
|
|
|
#include "FGAircraft.h"
|
|
|
|
#include "FGGroundReactions.h"
|
|
|
|
#include "FGPropulsion.h"
|
|
|
|
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2001-04-17 21:19:54 +00:00
|
|
|
DEFINITIONS
|
2000-11-03 23:02:47 +00:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2001-03-30 01:04:50 +00:00
|
|
|
#define ID_STATE "$Id$"
|
2000-10-14 02:10:10 +00:00
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
FORWARD DECLARATIONS
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
|
|
|
|
2003-06-03 08:46:15 +00:00
|
|
|
namespace JSBSim {
|
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
|
|
|
|
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
CLASS DOCUMENTATION
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
|
|
|
|
2001-10-05 20:19:59 +00:00
|
|
|
/** Encapsulates the calculation of aircraft state.
|
|
|
|
@author Jon S. Berndt
|
|
|
|
@version $Id$
|
2002-04-06 16:03:16 +00:00
|
|
|
@see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/FGState.h?rev=HEAD&content-type=text/vnd.viewcvs-markup">
|
|
|
|
Header File </a>
|
|
|
|
@see <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jsbsim/JSBSim/FGState.cpp?rev=HEAD&content-type=text/vnd.viewcvs-markup">
|
|
|
|
Source File </a>
|
2001-10-05 20:19:59 +00:00
|
|
|
*/
|
|
|
|
|
2000-11-03 23:02:47 +00:00
|
|
|
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
1999-02-05 21:26:01 +00:00
|
|
|
CLASS DECLARATION
|
2000-11-03 23:02:47 +00:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2001-10-05 20:19:59 +00:00
|
|
|
class FGState : public FGJSBBase
|
|
|
|
{
|
1999-02-05 21:26:01 +00:00
|
|
|
public:
|
2001-10-05 20:19:59 +00:00
|
|
|
/** Constructor
|
|
|
|
@param Executive a pointer to the parent executive object */
|
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
|
|
|
FGState(FGFDMExec*);
|
2001-10-05 20:19:59 +00:00
|
|
|
/// Destructor
|
2001-03-30 01:04:50 +00:00
|
|
|
~FGState();
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2002-09-22 15:31:09 +00:00
|
|
|
/** Initializes the simulation state based on the passed-in parameters.
|
2001-10-05 20:19:59 +00:00
|
|
|
@param U the body X-Axis velocity in fps.
|
|
|
|
@param V the body Y-Axis velocity in fps.
|
|
|
|
@param W the body Z-Axis velocity in fps.
|
|
|
|
@param lat latitude measured in radians from the equator, negative values are south.
|
|
|
|
@param lon longitude, measured in radians from the Greenwich meridian, negative values are west.
|
|
|
|
@param phi the roll angle in radians.
|
|
|
|
@param tht the pitch angle in radians.
|
|
|
|
@param psi the heading angle in radians measured clockwise from north.
|
|
|
|
@param h altitude in feet.
|
|
|
|
@param wnorth north velocity in feet per second
|
|
|
|
@param weast eastward velocity in feet per second
|
|
|
|
@param wdown downward velocity in feet per second
|
|
|
|
*/
|
2001-11-20 22:34:24 +00:00
|
|
|
void Initialize(double U,
|
|
|
|
double V,
|
|
|
|
double W,
|
|
|
|
double lat,
|
|
|
|
double lon,
|
|
|
|
double phi,
|
|
|
|
double tht,
|
|
|
|
double psi,
|
|
|
|
double h,
|
|
|
|
double wnorth,
|
|
|
|
double weast,
|
|
|
|
double wdown);
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Initializes the simulation state based on parameters from an Initial Conditions object.
|
|
|
|
@param FGIC pointer to an initial conditions object.
|
|
|
|
@see FGInitialConditions.
|
|
|
|
*/
|
1999-08-17 21:18:11 +00:00
|
|
|
void Initialize(FGInitialCondition *FGIC);
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2001-10-05 20:19:59 +00:00
|
|
|
/// returns the speed of sound in feet per second.
|
2001-11-20 22:34:24 +00:00
|
|
|
inline double Geta(void) { return a; }
|
1999-02-11 21:05:34 +00:00
|
|
|
|
2001-10-05 20:19:59 +00:00
|
|
|
/// Returns the simulation time in seconds.
|
2002-03-20 12:45:02 +00:00
|
|
|
inline double Getsim_time(void) const { return sim_time; }
|
2001-10-05 20:19:59 +00:00
|
|
|
/// Returns the simulation delta T.
|
2001-11-20 22:34:24 +00:00
|
|
|
inline double Getdt(void) { return dt; }
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2001-10-05 20:19:59 +00:00
|
|
|
/// Suspends the simulation and sets the delta T to zero.
|
2000-10-02 23:07:30 +00:00
|
|
|
inline void Suspend(void) {saved_dt = dt; dt = 0.0;}
|
2001-10-05 20:19:59 +00:00
|
|
|
/// Resumes the simulation by resetting delta T to the correct value.
|
2000-10-02 23:07:30 +00:00
|
|
|
inline void Resume(void) {dt = saved_dt;}
|
|
|
|
|
2001-10-05 20:19:59 +00:00
|
|
|
/** Sets the speed of sound.
|
|
|
|
@param speed the speed of sound in feet per second.
|
|
|
|
*/
|
2001-11-20 22:34:24 +00:00
|
|
|
inline void Seta(double speed) { a = speed; }
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Sets the current sim time.
|
|
|
|
@param cur_time the current time
|
|
|
|
@return the current time.
|
|
|
|
*/
|
2001-11-20 22:34:24 +00:00
|
|
|
inline double Setsim_time(double cur_time) {
|
2001-10-05 20:19:59 +00:00
|
|
|
sim_time = cur_time;
|
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
|
|
|
return sim_time;
|
|
|
|
}
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Sets the integration time step for the simulation executive.
|
|
|
|
@param delta_t the time step in seconds.
|
|
|
|
*/
|
2001-11-20 22:34:24 +00:00
|
|
|
inline void Setdt(double delta_t) { dt = delta_t; }
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Increments the simulation time.
|
|
|
|
@return the new simulation time.
|
|
|
|
*/
|
2001-11-20 22:34:24 +00:00
|
|
|
inline double IncrTime(void) {
|
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
|
|
|
sim_time+=dt;
|
|
|
|
return sim_time;
|
|
|
|
}
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Initializes the transformation matrices.
|
|
|
|
@param phi the roll angle in radians.
|
|
|
|
@param tht the pitch angle in radians.
|
|
|
|
@param psi the heading angle in radians
|
|
|
|
*/
|
2001-11-20 22:34:24 +00:00
|
|
|
void InitMatrices(double phi, double tht, double psi);
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Calculates the local-to-body and body-to-local conversion matrices.
|
|
|
|
*/
|
2000-04-24 23:49:06 +00:00
|
|
|
void CalcMatrices(void);
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Integrates the quaternion.
|
|
|
|
Given the supplied rotational rate vector and integration rate, the quaternion
|
|
|
|
is integrated. The quaternion is later used to update the transformation
|
|
|
|
matrices.
|
|
|
|
@param vPQR the body rotational rate column vector.
|
|
|
|
@param rate the integration rate in seconds.
|
|
|
|
*/
|
|
|
|
void IntegrateQuat(FGColumnVector3 vPQR, int rate);
|
2002-08-05 20:13:34 +00:00
|
|
|
|
|
|
|
// ======================================= General Purpose INTEGRATOR
|
|
|
|
|
|
|
|
enum iType {AB4, AB3, AB2, AM3, EULER, TRAPZ};
|
|
|
|
|
|
|
|
/** Multi-method integrator.
|
|
|
|
@param type Type of intergation scheme to use. Can be one of:
|
|
|
|
<ul>
|
|
|
|
<li>AB4 - Adams-Bashforth, fourth order</li>
|
|
|
|
<li>AB3 - Adams-Bashforth, third order</li>
|
|
|
|
<li>AB2 - Adams-Bashforth, second order</li>
|
|
|
|
<li>AM3 - Adams Moulton, third order</li>
|
|
|
|
<li>EULER - Euler</li>
|
|
|
|
<li>TRAPZ - Trapezoidal</li>
|
|
|
|
</ul>
|
|
|
|
@param delta_t the integration time step in seconds
|
|
|
|
@param vTDeriv a reference to the current value of the time derivative of
|
|
|
|
the quantity being integrated (i.e. if vUVW is being integrated
|
|
|
|
vTDeriv is the current value of vUVWdot)
|
|
|
|
@param vLastArray an array of previously calculated and saved values of
|
|
|
|
the quantity being integrated (i.e. if vUVW is being integrated
|
|
|
|
vLastArray[0] is the past value of vUVWdot, vLastArray[1] is the value of
|
|
|
|
vUVWdot prior to that, etc.)
|
|
|
|
@return the current, incremental value of the item integrated to add to the
|
|
|
|
previous value. */
|
|
|
|
|
|
|
|
template <class T> T Integrate(iType type, double delta_t, T& vTDeriv, T *vLastArray)
|
|
|
|
{
|
|
|
|
T vResult;
|
|
|
|
|
|
|
|
switch (type) {
|
|
|
|
case AB4:
|
|
|
|
vResult = (delta_t/24.0)*( 55.0 * vTDeriv
|
|
|
|
- 59.0 * vLastArray[0]
|
|
|
|
+ 37.0 * vLastArray[1]
|
|
|
|
- 9.0 * vLastArray[2] );
|
|
|
|
vLastArray[2] = vLastArray[1];
|
|
|
|
vLastArray[1] = vLastArray[0];
|
|
|
|
vLastArray[0] = vTDeriv;
|
|
|
|
break;
|
|
|
|
case AB3:
|
|
|
|
vResult = (delta_t/12.0)*( 23.0 * vTDeriv
|
|
|
|
- 16.0 * vLastArray[0]
|
|
|
|
+ 5.0 * vLastArray[1] );
|
|
|
|
vLastArray[1] = vLastArray[0];
|
|
|
|
vLastArray[0] = vTDeriv;
|
|
|
|
break;
|
|
|
|
case AB2:
|
|
|
|
vResult = (delta_t/2.0)*( 3.0 * vTDeriv - vLastArray[0] );
|
|
|
|
vLastArray[0] = vTDeriv;
|
|
|
|
break;
|
|
|
|
case AM3:
|
|
|
|
vResult = (delta_t/12.0)*( 5.0 * vTDeriv
|
|
|
|
+ 8.0 * vLastArray[0]
|
|
|
|
- 1.0 * vLastArray[1] );
|
|
|
|
vLastArray[1] = vLastArray[0];
|
|
|
|
vLastArray[0] = vTDeriv;
|
|
|
|
break;
|
|
|
|
case EULER:
|
|
|
|
vResult = delta_t * vTDeriv;
|
|
|
|
break;
|
|
|
|
case TRAPZ:
|
|
|
|
vResult = (delta_t*0.5) * (vTDeriv + vLastArray[0]);
|
|
|
|
vLastArray[0] = vTDeriv;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return vResult;
|
|
|
|
}
|
|
|
|
|
|
|
|
// =======================================
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Calculates Euler angles from the local-to-body matrix.
|
|
|
|
@return a reference to the vEuler column vector.
|
|
|
|
*/
|
|
|
|
FGColumnVector3& CalcEuler(void);
|
|
|
|
|
|
|
|
/** Calculates and returns the stability-to-body axis transformation matrix.
|
|
|
|
@return a reference to the stability-to-body transformation matrix.
|
|
|
|
*/
|
2001-11-20 22:34:24 +00:00
|
|
|
FGMatrix33& GetTs2b(void);
|
2001-11-30 17:49:37 +00:00
|
|
|
|
|
|
|
/** Calculates and returns the body-to-stability axis transformation matrix.
|
|
|
|
@return a reference to the stability-to-body transformation matrix.
|
|
|
|
*/
|
|
|
|
FGMatrix33& GetTb2s(void);
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Retrieves the local-to-body transformation matrix.
|
|
|
|
@return a reference to the local-to-body transformation matrix.
|
|
|
|
*/
|
|
|
|
FGMatrix33& GetTl2b(void) { return mTl2b; }
|
|
|
|
|
|
|
|
/** Retrieves a specific local-to-body matrix element.
|
|
|
|
@param r matrix row index.
|
|
|
|
@param c matrix column index.
|
|
|
|
@return the matrix element described by the row and column supplied.
|
|
|
|
*/
|
2001-11-20 22:34:24 +00:00
|
|
|
double GetTl2b(int r, int c) { return mTl2b(r,c);}
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Retrieves the body-to-local transformation matrix.
|
|
|
|
@return a reference to the body-to-local matrix.
|
|
|
|
*/
|
|
|
|
FGMatrix33& GetTb2l(void) { return mTb2l; }
|
|
|
|
|
|
|
|
/** Retrieves a specific body-to-local matrix element.
|
|
|
|
@param r matrix row index.
|
|
|
|
@param c matrix column index.
|
|
|
|
@return the matrix element described by the row and column supplied.
|
|
|
|
*/
|
2001-11-20 22:34:24 +00:00
|
|
|
double GetTb2l(int i, int j) { return mTb2l(i,j);}
|
2001-10-05 20:19:59 +00:00
|
|
|
|
|
|
|
/** Prints a summary of simulator state (speed, altitude,
|
|
|
|
configuration, etc.)
|
|
|
|
*/
|
|
|
|
void ReportState(void);
|
2002-03-20 12:45:02 +00:00
|
|
|
|
|
|
|
void bind();
|
|
|
|
void unbind();
|
2001-10-05 20:19:59 +00:00
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
private:
|
2001-11-20 22:34:24 +00:00
|
|
|
double a; // speed of sound
|
|
|
|
double sim_time, dt;
|
|
|
|
double saved_dt;
|
1999-02-05 21:26:01 +00:00
|
|
|
|
1999-02-11 21:05:34 +00:00
|
|
|
FGFDMExec* FDMExec;
|
2001-10-05 20:19:59 +00:00
|
|
|
FGMatrix33 mTb2l;
|
|
|
|
FGMatrix33 mTl2b;
|
|
|
|
FGMatrix33 mTs2b;
|
2001-11-30 17:49:37 +00:00
|
|
|
FGMatrix33 mTb2s;
|
2001-10-05 20:19:59 +00:00
|
|
|
FGColumnVector4 vQtrn;
|
2002-08-05 20:13:34 +00:00
|
|
|
FGColumnVector4 vQdot_prev[3];
|
2001-12-03 22:24:40 +00:00
|
|
|
FGColumnVector4 vQdot;
|
2001-10-05 20:19:59 +00:00
|
|
|
FGColumnVector3 vUVW;
|
|
|
|
FGColumnVector3 vLocalVelNED;
|
|
|
|
FGColumnVector3 vLocalEuler;
|
2001-12-03 22:24:40 +00:00
|
|
|
|
2001-10-05 20:19:59 +00:00
|
|
|
FGColumnVector4 vTmp;
|
|
|
|
FGColumnVector3 vEuler;
|
1999-02-05 21:26:01 +00:00
|
|
|
|
2001-04-17 21:19:54 +00:00
|
|
|
FGAircraft* Aircraft;
|
|
|
|
FGPosition* Position;
|
|
|
|
FGTranslation* Translation;
|
|
|
|
FGRotation* Rotation;
|
|
|
|
FGOutput* Output;
|
|
|
|
FGAtmosphere* Atmosphere;
|
|
|
|
FGFCS* FCS;
|
2001-06-05 20:58:48 +00:00
|
|
|
FGAerodynamics* Aerodynamics;
|
2001-10-29 19:00:24 +00:00
|
|
|
FGGroundReactions* GroundReactions;
|
2001-10-30 02:51:13 +00:00
|
|
|
FGPropulsion* Propulsion;
|
2002-03-20 12:45:02 +00:00
|
|
|
FGPropertyManager* PropertyManager;
|
2001-04-17 21:19:54 +00:00
|
|
|
|
2001-12-13 04:48:34 +00:00
|
|
|
void Debug(int from);
|
1999-02-05 21:26:01 +00:00
|
|
|
};
|
2003-01-24 12:55:28 +00:00
|
|
|
}
|
2000-11-03 23:02:47 +00:00
|
|
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2001-04-17 21:19:54 +00:00
|
|
|
|
|
|
|
|
1999-02-05 21:26:01 +00:00
|
|
|
#endif
|
2001-03-30 01:04:50 +00:00
|
|
|
|