X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=src%2FFDM%2FJSBSim.hxx;h=bb6cdccbb9821770bb6c0a9c65660dffda3d5bfb;hb=bb785797b9dd171f21c2577e0ba1a9c84e107583;hp=7b34a1a476ea795eb5a5dcf3b7eec8a8e4bf40e0;hpb=b86e6ddc11afe0578fff207e74a20abe8a053c23;p=flightgear.git diff --git a/src/FDM/JSBSim.hxx b/src/FDM/JSBSim.hxx index 7b34a1a47..bb6cdccbb 100644 --- a/src/FDM/JSBSim.hxx +++ b/src/FDM/JSBSim.hxx @@ -1,53 +1,248 @@ -// JSBsim.hxx -- interface to the "JSBsim" flight model -// -// Written by Curtis Olson, started February 1999. -// -// Copyright (C) 1999 Curtis L. Olson - curt@flightgear.org -// -// 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. -// -// 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. -// -// 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., 675 Mass Ave, Cambridge, MA 02139, USA. -// -// $Id$ +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + Header: JSBSim.hxx + Author: Curtis L. Olson + Maintained by: Tony Peden, Curt Olson + Date started: 02/01/1999 -#ifndef _JSBSIM_HXX -#define _JSBSIM_HXX +------ Copyright (C) 1999 - 2000 Curtis L. Olson (curt@flightgear.org) ------ -#include -#undef MAX_ENGINES + 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. -#include + 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. + 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., 675 Mass Ave, Cambridge, MA 02139, USA. -class FGJSBsim: public FGInterface { +HISTORY +-------------------------------------------------------------------------------- +02/01/1999 CLO Created +Additional log messages stored in CVS - // The aircraft for this instance - FGFDMExec FDMExec; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +SENTRY +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -public: +#ifndef _JSBSIM_HXX +#define _JSBSIM_HXX + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +INCLUDES +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - // copy FDM state to LaRCsim structures - int copy_to_JSBsim(); +#undef MAX_ENGINES +#include - // copy FDM state from LaRCsim structures - int copy_from_JSBsim(); +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +DEFINITIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#define ID_JSBSIMXX "$Header JSBSim.hxx,v 1.4 2000/10/22 14:02:16 jsb Exp $" + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +FORWARD DECLARATIONS +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +#include + +#include + +class FGState; +class FGAtmosphere; +class FGFCS; +class FGPropulsion; +class FGMassBalance; +class FGAerodynamics; +class FGInertial; +class FGAircraft; +class FGTranslation; +class FGRotation; +class FGPosition; +class FGAuxiliary; +class FGOutput; +class FGInitialCondition; + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs] +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CLASS DOCUMENTATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ + +/** FGFS / JSBSim interface (aka "The Bus"). + This class provides for an interface between FlightGear and its data + structures and JSBSim and its data structures. This is the class which is + used to command JSBSim when integrated with FlightGear. See the + documentation for main for direction on running JSBSim apart from FlightGear. + @author Curtis L. Olson (original) + @author Tony Peden (Maintained and refined) + @version $Id$ + @see main in file JSBSim.cpp (use main() wrapper for standalone usage) +*/ + +/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CLASS DECLARATION +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - // reset flight params to a specific position - int init( double dt ); +class FGJSBsim: public FGInterface { - // update position based on inputs, positions, velocities, etc. - int update( int multiloop ); +public: + /// Constructor + FGJSBsim::FGJSBsim( double dt ); + /// Destructor + FGJSBsim::~FGJSBsim(); + + /// copy FDM state to LaRCsim structures + bool copy_to_JSBsim(); + + /// copy FDM state from LaRCsim structures + bool copy_from_JSBsim(); + + /// Reset flight params to a specific position + void init(); + + /// @name Position Parameter Set + //@{ + /** Set geocentric latitude + @param lat latitude in radians measured from the 0 meridian where + the westerly direction is positive and east is negative */ + void set_Latitude(double lat); // geocentric + + /** Set longitude + @param lon longitude in radians measured from the equator where + the northerly direction is positive and south is negative */ + void set_Longitude(double lon); + + /** Set altitude + Note: this triggers a recalculation of AGL altitude + @param alt altitude in feet */ + void set_Altitude(double alt); // triggers re-calc of AGL altitude + //@} + + //void set_AltitudeAGL(double altagl); // and vice-versa + + /// @name Velocity Parameter Set + //@{ + /** Sets calibrated airspeed + Setting this will trigger a recalc of the other velocity terms. + @param vc Calibrated airspeed in ft/sec */ + void set_V_calibrated_kts(double vc); + + /** Sets Mach number. + Setting this will trigger a recalc of the other velocity terms. + @param mach Mach number */ + void set_Mach_number(double mach); + + /** Sets velocity in N-E-D coordinates. + Setting this will trigger a recalc of the other velocity terms. + @param north velocity northward in ft/sec + @param east velocity eastward in ft/sec + @param down velocity downward in ft/sec */ + void set_Velocities_Local( double north, double east, double down ); + + /** Sets aircraft velocity in stability frame. + Setting this will trigger a recalc of the other velocity terms. + @param u X velocity in ft/sec + @param v Y velocity in ft/sec + @param w Z velocity in ft/sec */ + void set_Velocities_Wind_Body( double u, double v, double w); + //@} + + /** Euler Angle Parameter Set + @param phi roll angle in radians + @param theta pitch angle in radians + @param psi heading angle in radians */ + void set_Euler_Angles( double phi, double theta, double psi ); + + /// @name Flight Path Parameter Set + //@{ + /** Sets rate of climb + @param roc Rate of climb in ft/sec */ + void set_Climb_Rate( double roc); + + /** Sets the flight path angle in radians + @param gamma flight path angle in radians. */ + void set_Gamma_vert_rad( double gamma); + //@} + + /// @name Earth Parameter Set + //@{ + /** Sets the sea level radius in feet. + @param slr Sea Level Radius in feet */ + void set_Sea_level_radius(double slr); + + /** Sets the runway altitude in feet above sea level. + @param ralt Runway altitude in feet above sea level. */ + void set_Runway_altitude(double ralt); + //@} + + /// @name Atmospheric Parameter Set + //@{ + /** Sets the atmospheric static pressure + @param p pressure in psf */ + void set_Static_pressure(double p); + + /** Sets the atmospheric temperature + @param T temperature in degrees rankine */ + void set_Static_temperature(double T); + + /** Sets the atmospheric density. + @param rho air density slugs/cubic foot */ + void set_Density(double rho); + + /** Sets the velocity of the local airmass for wind modeling. + @param wnorth velocity north in fps + @param weast velocity east in fps + @param wdown velocity down in fps*/ + void set_Velocities_Local_Airmass (double wnorth, + double weast, + double wdown ); + //@} + + /** Update the position based on inputs, positions, velocities, etc. + @param multiloop number of times to loop through the FDM + @return true if successful */ + bool update( int multiloop ); + bool ToggleDataLogging(bool state); + bool ToggleDataLogging(void); + +private: + FGFDMExec *fdmex; + FGInitialCondition *fgic; + bool needTrim; + + FGState* State; + FGAtmosphere* Atmosphere; + FGFCS* FCS; + FGPropulsion* Propulsion; + FGMassBalance* MassBalance; + FGAircraft* Aircraft; + FGTranslation* Translation; + FGRotation* Rotation; + FGPosition* Position; + FGAuxiliary* Auxiliary; + FGAerodynamics* Aerodynamics; + + int runcount; + float trim_elev; + float trim_throttle; + + SGPropertyNode *startup_trim; + SGPropertyNode *trimmed; + SGPropertyNode *pitch_trim; + SGPropertyNode *throttle_trim; + SGPropertyNode *aileron_trim; + SGPropertyNode *rudder_trim; + + void snap_shot(void); };