1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4 Author: Curtis L. Olson
5 Maintained by: Tony Peden, Curt Olson
6 Date started: 02/01/1999
8 ------ Copyright (C) 1999 - 2000 Curtis L. Olson (curt@flightgear.org) ------
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License as
12 published by the Free Software Foundation; either version 2 of the
13 License, or (at your option) any later version.
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 --------------------------------------------------------------------------------
26 02/01/1999 CLO Created
27 Additional log messages stored in CVS
29 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
31 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
36 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
41 #include <Aircraft/aircraft.hxx>
43 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
45 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
47 #define ID_JSBSIMXX "$Header JSBSim.hxx,v 1.4 2000/10/22 14:02:16 jsb Exp $"
49 #define METERS_TO_FEET 3.2808398950
50 #define RADTODEG 57.2957795
52 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
54 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
56 #include <simgear/props/props.hxx>
58 #include <FDM/JSBSim/FGFDMExec.h>
72 class FGInitialCondition;
75 // Adding it here will cause a namespace clash in FlightGear -EMH-
76 // using namespace JSBSim;
78 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
80 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
82 /** FGFS / JSBSim interface (aka "The Bus").
83 This class provides for an interface between FlightGear and its data
84 structures and JSBSim and its data structures. This is the class which is
85 used to command JSBSim when integrated with FlightGear. See the
86 documentation for main for direction on running JSBSim apart from FlightGear.
87 @author Curtis L. Olson (original)
88 @author Tony Peden (Maintained and refined)
90 @see main in file JSBSim.cpp (use main() wrapper for standalone usage)
93 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
95 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
97 class FGJSBsim: public FGInterface {
101 FGJSBsim( double dt );
105 /// copy FDM state to LaRCsim structures
106 bool copy_to_JSBsim();
108 /// copy FDM state from LaRCsim structures
109 bool copy_from_JSBsim();
111 /// Reset flight params to a specific position
114 /// @name Position Parameter Set
116 /** Set geocentric latitude
117 @param lat latitude in radians measured from the 0 meridian where
118 the westerly direction is positive and east is negative */
119 void set_Latitude(double lat); // geocentric
122 @param lon longitude in radians measured from the equator where
123 the northerly direction is positive and south is negative */
124 void set_Longitude(double lon);
127 Note: this triggers a recalculation of AGL altitude
128 @param alt altitude in feet */
129 void set_Altitude(double alt); // triggers re-calc of AGL altitude
132 //void set_AltitudeAGL(double altagl); // and vice-versa
134 /// @name Velocity Parameter Set
136 /** Sets calibrated airspeed
137 Setting this will trigger a recalc of the other velocity terms.
138 @param vc Calibrated airspeed in ft/sec */
139 void set_V_calibrated_kts(double vc);
141 /** Sets Mach number.
142 Setting this will trigger a recalc of the other velocity terms.
143 @param mach Mach number */
144 void set_Mach_number(double mach);
146 /** Sets velocity in N-E-D coordinates.
147 Setting this will trigger a recalc of the other velocity terms.
148 @param north velocity northward in ft/sec
149 @param east velocity eastward in ft/sec
150 @param down velocity downward in ft/sec */
151 void set_Velocities_Local( double north, double east, double down );
153 /** Sets aircraft velocity in stability frame.
154 Setting this will trigger a recalc of the other velocity terms.
155 @param u X velocity in ft/sec
156 @param v Y velocity in ft/sec
157 @param w Z velocity in ft/sec */
158 void set_Velocities_Wind_Body( double u, double v, double w);
161 /** Euler Angle Parameter Set
162 @param phi roll angle in radians
163 @param theta pitch angle in radians
164 @param psi heading angle in radians */
165 void set_Euler_Angles( double phi, double theta, double psi );
167 /// @name Flight Path Parameter Set
169 /** Sets rate of climb
170 @param roc Rate of climb in ft/sec */
171 void set_Climb_Rate( double roc);
173 /** Sets the flight path angle in radians
174 @param gamma flight path angle in radians. */
175 void set_Gamma_vert_rad( double gamma);
179 /// @name Atmospheric Parameter Set
181 /** Sets the atmospheric static pressure
182 @param p pressure in psf */
183 // void set_Static_pressure(double p);
185 /** Sets the atmospheric temperature
186 @param T temperature in degrees rankine */
187 // void set_Static_temperature(double T);
189 /** Sets the atmospheric density.
190 @param rho air density slugs/cubic foot */
191 // void set_Density(double rho);
193 /** Sets the velocity of the local airmass for wind modeling.
194 @param wnorth velocity north in fps
195 @param weast velocity east in fps
196 @param wdown velocity down in fps*/
197 /// @name Position Parameter Update
201 /** Update the position based on inputs, positions, velocities, etc.
202 @param dt delta time in seconds. */
203 void update(double dt);
204 bool ToggleDataLogging(bool state);
205 bool ToggleDataLogging(void);
207 void update_ic(void);
210 JSBSim::FGFDMExec *fdmex;
211 JSBSim::FGInitialCondition *fgic;
214 JSBSim::FGState* State;
215 JSBSim::FGAtmosphere* Atmosphere;
217 JSBSim::FGPropulsion* Propulsion;
218 JSBSim::FGMassBalance* MassBalance;
219 JSBSim::FGAircraft* Aircraft;
220 JSBSim::FGPropagate* Propagate;
221 JSBSim::FGAuxiliary* Auxiliary;
222 JSBSim::FGAerodynamics* Aerodynamics;
223 JSBSim::FGGroundReactions *GroundReactions;
227 double trim_throttle;
229 SGPropertyNode_ptr startup_trim;
230 SGPropertyNode_ptr trimmed;
231 SGPropertyNode_ptr pitch_trim;
232 SGPropertyNode_ptr throttle_trim;
233 SGPropertyNode_ptr aileron_trim;
234 SGPropertyNode_ptr rudder_trim;
235 SGPropertyNode_ptr stall_warning;
237 /* SGPropertyNode_ptr elevator_pos_deg;
238 SGPropertyNode_ptr left_aileron_pos_deg;
239 SGPropertyNode_ptr right_aileron_pos_deg;
240 SGPropertyNode_ptr rudder_pos_deg;
241 SGPropertyNode_ptr flap_pos_deg; */
244 SGPropertyNode_ptr elevator_pos_pct;
245 SGPropertyNode_ptr left_aileron_pos_pct;
246 SGPropertyNode_ptr right_aileron_pos_pct;
247 SGPropertyNode_ptr rudder_pos_pct;
248 SGPropertyNode_ptr flap_pos_pct;
249 SGPropertyNode_ptr speedbrake_pos_pct;
250 SGPropertyNode_ptr spoilers_pos_pct;
252 SGPropertyNode_ptr gear_pos_pct;
254 SGPropertyNode_ptr temperature;
255 SGPropertyNode_ptr pressure;
256 SGPropertyNode_ptr density;
257 SGPropertyNode_ptr turbulence_gain;
258 SGPropertyNode_ptr turbulence_rate;
260 SGPropertyNode_ptr wind_from_north;
261 SGPropertyNode_ptr wind_from_east;
262 SGPropertyNode_ptr wind_from_down;
264 SGPropertyNode_ptr slaved;
266 void init_gear(void);
267 void update_gear(void);
272 #endif // _JSBSIM_HXX