Branch data Line data Source code
1 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 : :
3 : : Header: FGAircraft.h
4 : : Author: Jon S. Berndt
5 : : Date started: 12/12/98
6 : :
7 : : ------------- Copyright (C) 1999 Jon S. Berndt (jon@jsbsim.org) -------------
8 : :
9 : : This program is free software; you can redistribute it and/or modify it under
10 : : the terms of the GNU Lesser General Public License as published by the Free Software
11 : : Foundation; either version 2 of the License, or (at your option) any later
12 : : version.
13 : :
14 : : This program is distributed in the hope that it will be useful, but WITHOUT
15 : : ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 : : FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
17 : : details.
18 : :
19 : : You should have received a copy of the GNU Lesser General Public License along with
20 : : this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21 : : Place - Suite 330, Boston, MA 02111-1307, USA.
22 : :
23 : : Further information about the GNU Lesser General Public License can also be found on
24 : : the world wide web at http://www.gnu.org.
25 : :
26 : : HISTORY
27 : : --------------------------------------------------------------------------------
28 : : 12/12/98 JSB Created
29 : :
30 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
31 : : SENTRY
32 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
33 : :
34 : : #ifndef FGAIRCRAFT_H
35 : : #define FGAIRCRAFT_H
36 : :
37 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 : : INCLUDES
39 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
40 : :
41 : : #include <string>
42 : : #include <vector>
43 : :
44 : : #include "FGModel.h"
45 : : #include "input_output/FGXMLElement.h"
46 : : #include "math/FGColumnVector3.h"
47 : :
48 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
49 : : DEFINITIONS
50 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
51 : :
52 : : #define ID_AIRCRAFT "$Id: FGAircraft.h,v 1.15 2009/10/24 22:59:30 jberndt Exp $"
53 : :
54 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
55 : : FORWARD DECLARATIONS
56 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
57 : :
58 : : namespace JSBSim {
59 : :
60 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
61 : : CLASS DOCUMENTATION
62 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
63 : :
64 : : /** Encapsulates an Aircraft and its systems.
65 : : <p> Owns all the parts (other classes) which make up this aircraft. This includes
66 : : the Engines, Tanks, Propellers, Nozzles, Aerodynamic and Mass properties,
67 : : landing gear, etc. These constituent parts may actually run as separate
68 : : JSBSim models themselves, but the responsibility for initializing them and
69 : : for retrieving their force and moment contributions falls to FGAircraft.
70 : : <p> The \<metrics> section of the aircraft configuration file is read here, and
71 : : the metrical information is held by this class.
72 : : <h3>Configuration File Format for \<metrics> Section:</h3>
73 : : @code
74 : : <metrics>
75 : : <wingarea unit="{FT2 | M2}"> {number} </wingarea>
76 : : <wingspan unit="{FT | M}"> {number} </wingspan>
77 : : <chord unit="{FT | M}"> {number} </chord>
78 : : <htailarea unit="{FT2 | M2}"> {number} </htailarea>
79 : : <htailarm unit="{FT | M}"> {number} </htailarm>
80 : : <vtailarea unit="{FT2 | M}"> {number} </vtailarea>
81 : : <vtailarm unit="{FT | M}"> {number} </vtailarm>
82 : : <wing_incidence unit="{RAD | DEG}"> {number} </wing_incidence>
83 : : <location name="{AERORP | EYEPOINT | VRP}" unit="{IN | M}">
84 : : <x> {number} </x>
85 : : <y> {number} </y>
86 : : <z> {number} </z>
87 : : </location>
88 : : {other location blocks}
89 : : </metrics>
90 : : @endcode
91 : :
92 : : @author Jon S. Berndt
93 : : @version $Id: FGAircraft.h,v 1.15 2009/10/24 22:59:30 jberndt Exp $
94 : : @see Cooke, Zyda, Pratt, and McGhee, "NPSNET: Flight Simulation Dynamic Modeling
95 : : Using Quaternions", Presence, Vol. 1, No. 4, pp. 404-420 Naval Postgraduate
96 : : School, January 1994
97 : : @see D. M. Henderson, "Euler Angles, Quaternions, and Transformation Matrices",
98 : : JSC 12960, July 1977
99 : : @see Richard E. McFarland, "A Standard Kinematic Model for Flight Simulation at
100 : : NASA-Ames", NASA CR-2497, January 1975
101 : : @see Barnes W. McCormick, "Aerodynamics, Aeronautics, and Flight Mechanics",
102 : : Wiley & Sons, 1979 ISBN 0-471-03032-5
103 : : @see Bernard Etkin, "Dynamics of Flight, Stability and Control", Wiley & Sons,
104 : : 1982 ISBN 0-471-08936-2
105 : : */
106 : :
107 : : /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
108 : : CLASS DECLARATION
109 : : %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
110 : :
111 : : class FGAircraft : public FGModel {
112 : : public:
113 : : /** Constructor
114 : : @param Executive a pointer to the parent executive object */
115 : : FGAircraft(FGFDMExec *Executive);
116 : :
117 : : /// Destructor
118 : : ~FGAircraft();
119 : :
120 : : /** Runs the Aircraft model; called by the Executive
121 : : @see JSBSim.cpp documentation
122 : : @return false if no error */
123 : : bool Run(void);
124 : :
125 : : bool InitModel(void);
126 : :
127 : : /** Loads the aircraft.
128 : : The executive calls this method to load the aircraft into JSBSim.
129 : : @param el a pointer to the element tree
130 : : @return true if successful */
131 : : bool Load(Element* el);
132 : :
133 : : /** Gets the aircraft name
134 : : @return the name of the aircraft as a string type */
135 : 0 : const std::string& GetAircraftName(void) const { return AircraftName; }
136 : :
137 : : /// Gets the wing area
138 : 270027 : double GetWingArea(void) const { return WingArea; }
139 : : /// Gets the wing span
140 : 162014 : double GetWingSpan(void) const { return WingSpan; }
141 : : /// Gets the average wing chord
142 : 108009 : double Getcbar(void) const { return cbar; }
143 : 54006 : inline double GetWingIncidence(void) const { return WingIncidence; }
144 : 1 : inline double GetWingIncidenceDeg(void) const { return WingIncidence*radtodeg; }
145 : 1 : inline double GetHTailArea(void) const { return HTailArea; }
146 : 1 : inline double GetHTailArm(void) const { return HTailArm; }
147 : 1 : inline double GetVTailArea(void) const { return VTailArea; }
148 : 1 : inline double GetVTailArm(void) const { return VTailArm; }
149 : 1 : inline double Getlbarh(void) const { return lbarh; } // HTailArm / cbar
150 : 1 : inline double Getlbarv(void) const { return lbarv; } // VTailArm / cbar
151 : 1 : inline double Getvbarh(void) const { return vbarh; } // H. Tail Volume
152 : 1 : inline double Getvbarv(void) const { return vbarv; } // V. Tail Volume
153 : 58915 : inline FGColumnVector3& GetMoments(void) { return vMoments; }
154 : 3 : inline double GetMoments(int idx) const { return vMoments(idx); }
155 : 58915 : inline FGColumnVector3& GetForces(void) { return vForces; }
156 : 3 : inline double GetForces(int idx) const { return vForces(idx); }
157 : : inline FGColumnVector3& GetBodyAccel(void) { return vBodyAccel; }
158 : : inline double GetBodyAccel(int idx) { return vBodyAccel(idx); }
159 : : inline FGColumnVector3& GetNcg (void) { return vNcg; }
160 : : inline double GetNcg(int idx) { return vNcg(idx); }
161 : 108010 : inline FGColumnVector3& GetXYZrp(void) { return vXYZrp; }
162 : 54005 : inline FGColumnVector3& GetXYZvrp(void) { return vXYZvrp; }
163 : 53103 : inline FGColumnVector3& GetXYZep(void) { return vXYZep; }
164 : 3 : inline double GetXYZrp(int idx) const { return vXYZrp(idx); }
165 : 3 : inline double GetXYZvrp(int idx) const { return vXYZvrp(idx); }
166 : 3 : inline double GetXYZep(int idx) const { return vXYZep(idx); }
167 : 1 : inline void SetAircraftName(const std::string& name) {AircraftName = name;}
168 : 2 : inline void SetHoldDown(int hd) {HoldDown = hd;}
169 : 48 : inline int GetHoldDown(void) const {return HoldDown;}
170 : :
171 : : void SetXYZrp(int idx, double value) {vXYZrp(idx) = value;}
172 : :
173 : 0 : void SetWingArea(double S) {WingArea = S;}
174 : :
175 : : double GetNlf(void) const;
176 : :
177 : : inline FGColumnVector3& GetNwcg(void) { return vNwcg; }
178 : :
179 : : void bind(void);
180 : : void unbind(void);
181 : :
182 : : private:
183 : : FGColumnVector3 vMoments;
184 : : FGColumnVector3 vForces;
185 : : FGColumnVector3 vXYZrp;
186 : : FGColumnVector3 vXYZvrp;
187 : : FGColumnVector3 vXYZep;
188 : : FGColumnVector3 vDXYZcg;
189 : : FGColumnVector3 vBodyAccel;
190 : : FGColumnVector3 vNcg;
191 : : FGColumnVector3 vNwcg;
192 : :
193 : : double WingArea, WingSpan, cbar, WingIncidence;
194 : : double HTailArea, VTailArea, HTailArm, VTailArm;
195 : : double lbarh,lbarv,vbarh,vbarv;
196 : : int HoldDown;
197 : : std::string AircraftName;
198 : :
199 : : void Debug(int from);
200 : : };
201 : :
202 : : } // namespace JSBSim
203 : : //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
204 : : #endif
205 : :
|