1998-12-03 04:25:02 +00:00
|
|
|
// flight.hxx -- define shared flight model parameters
|
1998-09-29 14:56:30 +00:00
|
|
|
//
|
|
|
|
// Written by Curtis Olson, started May 1997.
|
|
|
|
//
|
2004-11-19 22:10:41 +00:00
|
|
|
// Copyright (C) 1997 Curtis L. Olson - http://www.flightgear.org/~curt
|
1998-09-29 14:56:30 +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.
|
|
|
|
//
|
|
|
|
// 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
|
2006-02-21 01:16:04 +00:00
|
|
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
1998-09-29 14:56:30 +00:00
|
|
|
//
|
|
|
|
// $Id$
|
1997-05-16 15:58:23 +00:00
|
|
|
|
|
|
|
|
1998-12-03 04:25:02 +00:00
|
|
|
#ifndef _FLIGHT_HXX
|
|
|
|
#define _FLIGHT_HXX
|
1997-05-16 15:58:23 +00:00
|
|
|
|
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
#ifndef __cplusplus
|
1999-01-19 17:52:06 +00:00
|
|
|
# error This library requires C++
|
2000-08-14 20:12:17 +00:00
|
|
|
#endif
|
1999-01-19 17:52:06 +00:00
|
|
|
|
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
/* Required get_()
|
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
`FGInterface::get_Longitude ()'
|
|
|
|
`FGInterface::get_Latitude ()'
|
|
|
|
`FGInterface::get_Altitude ()'
|
|
|
|
`FGInterface::get_Phi ()'
|
|
|
|
`FGInterface::get_Theta ()'
|
|
|
|
`FGInterface::get_Psi ()'
|
|
|
|
`FGInterface::get_V_equiv_kts ()'
|
|
|
|
|
|
|
|
`FGInterface::get_Mass ()'
|
|
|
|
`FGInterface::get_I_xx ()'
|
|
|
|
`FGInterface::get_I_yy ()'
|
|
|
|
`FGInterface::get_I_zz ()'
|
|
|
|
`FGInterface::get_I_xz ()'
|
1998-12-18 23:37:06 +00:00
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
`FGInterface::get_V_north ()'
|
|
|
|
`FGInterface::get_V_east ()'
|
|
|
|
`FGInterface::get_V_down ()'
|
1998-12-18 23:37:06 +00:00
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
`FGInterface::get_P_Body ()'
|
|
|
|
`FGInterface::get_Q_Body ()'
|
|
|
|
`FGInterface::get_R_Body ()'
|
1998-12-18 23:37:06 +00:00
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
`FGInterface::get_Gamma_vert_rad ()'
|
|
|
|
`FGInterface::get_Climb_Rate ()'
|
|
|
|
`FGInterface::get_Alpha ()'
|
|
|
|
`FGInterface::get_Beta ()'
|
1998-12-18 23:37:06 +00:00
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
`FGInterface::get_Runway_altitude ()'
|
1998-12-18 23:37:06 +00:00
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
`FGInterface::get_Lon_geocentric ()'
|
|
|
|
`FGInterface::get_Lat_geocentric ()'
|
|
|
|
`FGInterface::get_Sea_level_radius ()'
|
|
|
|
`FGInterface::get_Earth_position_angle ()'
|
1998-12-18 23:37:06 +00:00
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
`FGInterface::get_Latitude_dot()'
|
|
|
|
`FGInterface::get_Longitude_dot()'
|
|
|
|
`FGInterface::get_Radius_dot()'
|
1999-01-08 19:27:34 +00:00
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
`FGInterface::get_Dx_cg ()'
|
|
|
|
`FGInterface::get_Dy_cg ()'
|
|
|
|
`FGInterface::get_Dz_cg ()'
|
1998-12-18 23:37:06 +00:00
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
`FGInterface::get_T_local_to_body_11 ()' ... `FGInterface::get_T_local_to_body_33 ()'
|
1998-12-18 23:37:06 +00:00
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
`FGInterface::get_Radius_to_vehicle ()'
|
1998-12-18 23:37:06 +00:00
|
|
|
|
|
|
|
*/
|
|
|
|
|
1998-04-21 16:59:33 +00:00
|
|
|
|
1999-04-07 20:58:02 +00:00
|
|
|
#include <math.h>
|
|
|
|
|
1999-09-09 00:16:28 +00:00
|
|
|
#include <list>
|
2000-09-29 03:27:21 +00:00
|
|
|
#include <vector>
|
2001-01-13 22:06:39 +00:00
|
|
|
#include <string>
|
1999-09-09 00:16:28 +00:00
|
|
|
|
2003-09-24 17:20:55 +00:00
|
|
|
#include <simgear/compiler.h>
|
2001-01-16 20:21:03 +00:00
|
|
|
#include <simgear/constants.h>
|
2003-09-24 17:20:55 +00:00
|
|
|
#include <simgear/structure/subsystem_mgr.hxx>
|
2004-11-22 10:10:33 +00:00
|
|
|
#include <FDM/groundcache.hxx>
|
2001-01-16 20:21:03 +00:00
|
|
|
|
2001-03-23 22:59:18 +00:00
|
|
|
SG_USING_STD(list);
|
|
|
|
SG_USING_STD(vector);
|
|
|
|
SG_USING_STD(string);
|
1999-09-09 00:16:28 +00:00
|
|
|
|
1997-05-29 22:39:49 +00:00
|
|
|
typedef double FG_VECTOR_3[3];
|
|
|
|
|
1998-12-03 01:14:58 +00:00
|
|
|
// This is based heavily on LaRCsim/ls_generic.h
|
2003-09-24 17:20:55 +00:00
|
|
|
class FGInterface : public SGSubsystem {
|
1998-12-03 01:14:58 +00:00
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
private:
|
|
|
|
|
2001-10-28 16:16:30 +00:00
|
|
|
// Has the init() method been called. This is used to delay
|
|
|
|
// initialization until scenery can be loaded and we know the true
|
|
|
|
// ground elevation.
|
|
|
|
bool inited;
|
|
|
|
|
|
|
|
// Have we bound to the property system
|
|
|
|
bool bound;
|
|
|
|
|
2001-01-16 21:41:28 +00:00
|
|
|
// periodic update management variable. This is a scheme to run
|
|
|
|
// the fdm with a fixed delta-t. We control how many iteration of
|
|
|
|
// the fdm to run with the fixed dt based on the elapsed time from
|
|
|
|
// the last update. This allows us to maintain sync with the real
|
|
|
|
// time clock, even though each frame could take a random amount
|
|
|
|
// of time. Since "dt" is unlikely to divide evenly into the
|
|
|
|
// elapse time, we keep track of the remainder and add it into the
|
|
|
|
// next elapsed time. This yields a small amount of temporal
|
|
|
|
// jitter ( < dt ) but in practice seems to work well.
|
|
|
|
|
2002-05-11 16:28:50 +00:00
|
|
|
// double delta_t; // delta "t"
|
|
|
|
// SGTimeStamp time_stamp; // time stamp of last run
|
|
|
|
// long elapsed; // time elapsed since last run
|
|
|
|
double remainder; // remainder time from last run
|
|
|
|
// int multi_loop; // number of iterations of "delta_t" to run
|
2001-01-16 21:41:28 +00:00
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
// Pilot location rel to ref pt
|
|
|
|
FG_VECTOR_3 d_pilot_rp_body_v;
|
|
|
|
|
|
|
|
// CG position w.r.t. ref. point
|
|
|
|
FG_VECTOR_3 d_cg_rp_body_v;
|
|
|
|
|
|
|
|
// Forces
|
|
|
|
FG_VECTOR_3 f_body_total_v;
|
|
|
|
FG_VECTOR_3 f_local_total_v;
|
|
|
|
FG_VECTOR_3 f_aero_v;
|
|
|
|
FG_VECTOR_3 f_engine_v;
|
|
|
|
FG_VECTOR_3 f_gear_v;
|
|
|
|
|
|
|
|
// Moments
|
|
|
|
FG_VECTOR_3 m_total_rp_v;
|
|
|
|
FG_VECTOR_3 m_total_cg_v;
|
|
|
|
FG_VECTOR_3 m_aero_v;
|
|
|
|
FG_VECTOR_3 m_engine_v;
|
|
|
|
FG_VECTOR_3 m_gear_v;
|
|
|
|
|
|
|
|
// Accelerations
|
|
|
|
FG_VECTOR_3 v_dot_local_v;
|
|
|
|
FG_VECTOR_3 v_dot_body_v;
|
|
|
|
FG_VECTOR_3 a_cg_body_v;
|
|
|
|
FG_VECTOR_3 a_pilot_body_v;
|
|
|
|
FG_VECTOR_3 n_cg_body_v;
|
|
|
|
FG_VECTOR_3 n_pilot_body_v;
|
|
|
|
FG_VECTOR_3 omega_dot_body_v;
|
|
|
|
|
|
|
|
// Velocities
|
|
|
|
FG_VECTOR_3 v_local_v;
|
|
|
|
FG_VECTOR_3 v_local_rel_ground_v; // V rel w.r.t. earth surface
|
|
|
|
FG_VECTOR_3 v_local_airmass_v; // velocity of airmass (steady winds)
|
|
|
|
FG_VECTOR_3 v_local_rel_airmass_v; // velocity of veh. relative to airmass
|
|
|
|
FG_VECTOR_3 v_local_gust_v; // linear turbulence components, L frame
|
|
|
|
FG_VECTOR_3 v_wind_body_v; // Wind-relative velocities in body axis
|
|
|
|
|
|
|
|
FG_VECTOR_3 omega_body_v; // Angular B rates
|
|
|
|
FG_VECTOR_3 omega_local_v; // Angular L rates
|
|
|
|
FG_VECTOR_3 omega_total_v; // Diff btw B & L
|
|
|
|
FG_VECTOR_3 euler_rates_v;
|
|
|
|
FG_VECTOR_3 geocentric_rates_v; // Geocentric linear velocities
|
|
|
|
|
|
|
|
// Positions
|
|
|
|
FG_VECTOR_3 geocentric_position_v;
|
|
|
|
FG_VECTOR_3 geodetic_position_v;
|
|
|
|
FG_VECTOR_3 euler_angles_v;
|
|
|
|
|
|
|
|
// Miscellaneous Quantities
|
|
|
|
FG_VECTOR_3 d_cg_rwy_local_v; // CG rel. to rwy in local coords
|
|
|
|
FG_VECTOR_3 d_cg_rwy_rwy_v; // CG relative to rwy, in rwy coordinates
|
|
|
|
FG_VECTOR_3 d_pilot_rwy_local_v; // pilot rel. to rwy in local coords
|
|
|
|
FG_VECTOR_3 d_pilot_rwy_rwy_v; // pilot rel. to rwy, in rwy coords.
|
|
|
|
|
|
|
|
// Inertias
|
|
|
|
double mass, i_xx, i_yy, i_zz, i_xz;
|
|
|
|
|
|
|
|
// Normal Load Factor
|
|
|
|
double nlf;
|
|
|
|
|
|
|
|
// Velocities
|
|
|
|
double v_rel_wind, v_true_kts, v_rel_ground, v_inertial;
|
|
|
|
double v_ground_speed, v_equiv, v_equiv_kts;
|
|
|
|
double v_calibrated, v_calibrated_kts;
|
|
|
|
|
|
|
|
// Miscellaneious Quantities
|
|
|
|
double t_local_to_body_m[3][3]; // Transformation matrix L to B
|
|
|
|
double gravity; // Local acceleration due to G
|
|
|
|
double centrifugal_relief; // load factor reduction due to speed
|
|
|
|
double alpha, beta, alpha_dot, beta_dot; // in radians
|
|
|
|
double cos_alpha, sin_alpha, cos_beta, sin_beta;
|
|
|
|
double cos_phi, sin_phi, cos_theta, sin_theta, cos_psi, sin_psi;
|
|
|
|
double gamma_vert_rad, gamma_horiz_rad; // Flight path angles
|
|
|
|
double sigma, density, v_sound, mach_number;
|
|
|
|
double static_pressure, total_pressure, impact_pressure;
|
|
|
|
double dynamic_pressure;
|
|
|
|
double static_temperature, total_temperature;
|
|
|
|
double sea_level_radius, earth_position_angle;
|
|
|
|
double runway_altitude, runway_latitude, runway_longitude;
|
|
|
|
double runway_heading;
|
|
|
|
double radius_to_rwy;
|
|
|
|
double climb_rate; // in feet per second
|
|
|
|
double sin_lat_geocentric, cos_lat_geocentric;
|
|
|
|
double sin_longitude, cos_longitude;
|
|
|
|
double sin_latitude, cos_latitude;
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
double altitude_agl;
|
2001-07-16 04:34:46 +00:00
|
|
|
|
|
|
|
double daux[16]; // auxilliary doubles
|
|
|
|
float faux[16]; // auxilliary floats
|
|
|
|
int iaux[16]; // auxilliary ints
|
|
|
|
|
2001-01-17 02:37:12 +00:00
|
|
|
// SGTimeStamp valid_stamp; // time this record is valid
|
|
|
|
// SGTimeStamp next_stamp; // time this record is valid
|
2000-08-14 20:12:17 +00:00
|
|
|
|
2004-11-22 10:10:33 +00:00
|
|
|
// the ground cache object itself.
|
|
|
|
FGGroundCache ground_cache;
|
|
|
|
|
2002-05-11 16:28:50 +00:00
|
|
|
protected:
|
|
|
|
|
|
|
|
int _calc_multiloop (double dt);
|
|
|
|
|
2001-09-04 14:38:15 +00:00
|
|
|
public:
|
2001-04-05 20:20:44 +00:00
|
|
|
|
|
|
|
// deliberately not virtual so that
|
|
|
|
// FGInterface constructor will call
|
|
|
|
// the right version
|
|
|
|
void _setup();
|
|
|
|
|
2001-01-17 02:37:12 +00:00
|
|
|
void _busdump(void);
|
2001-12-12 05:18:46 +00:00
|
|
|
void _updateGeodeticPosition( double lat, double lon, double alt );
|
|
|
|
void _updateGeocentricPosition( double lat_geoc, double lon, double alt );
|
2005-10-08 12:33:06 +00:00
|
|
|
void _update_ground_elev_at_pos( void );
|
2000-10-28 16:30:30 +00:00
|
|
|
void _updateWeather( void );
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
|
|
|
|
inline void _set_Inertias( double m, double xx, double yy,
|
|
|
|
double zz, double xz)
|
|
|
|
{
|
|
|
|
mass = m;
|
|
|
|
i_xx = xx;
|
|
|
|
i_yy = yy;
|
|
|
|
i_zz = zz;
|
|
|
|
i_xz = xz;
|
|
|
|
}
|
|
|
|
inline void _set_CG_Position( double dx, double dy, double dz ) {
|
|
|
|
d_cg_rp_body_v[0] = dx;
|
|
|
|
d_cg_rp_body_v[1] = dy;
|
|
|
|
d_cg_rp_body_v[2] = dz;
|
|
|
|
}
|
|
|
|
inline void _set_Accels_Local( double north, double east, double down ) {
|
|
|
|
v_dot_local_v[0] = north;
|
|
|
|
v_dot_local_v[1] = east;
|
|
|
|
v_dot_local_v[2] = down;
|
|
|
|
}
|
|
|
|
inline void _set_Accels_Body( double u, double v, double w ) {
|
|
|
|
v_dot_body_v[0] = u;
|
|
|
|
v_dot_body_v[1] = v;
|
|
|
|
v_dot_body_v[2] = w;
|
|
|
|
}
|
|
|
|
inline void _set_Accels_CG_Body( double x, double y, double z ) {
|
|
|
|
a_cg_body_v[0] = x;
|
|
|
|
a_cg_body_v[1] = y;
|
|
|
|
a_cg_body_v[2] = z;
|
|
|
|
}
|
|
|
|
inline void _set_Accels_Pilot_Body( double x, double y, double z ) {
|
|
|
|
a_pilot_body_v[0] = x;
|
|
|
|
a_pilot_body_v[1] = y;
|
|
|
|
a_pilot_body_v[2] = z;
|
|
|
|
}
|
|
|
|
inline void _set_Accels_CG_Body_N( double x, double y, double z ) {
|
|
|
|
n_cg_body_v[0] = x;
|
|
|
|
n_cg_body_v[1] = y;
|
|
|
|
n_cg_body_v[2] = z;
|
|
|
|
}
|
|
|
|
void _set_Nlf(double n) { nlf=n; }
|
|
|
|
inline void _set_Velocities_Local( double north, double east, double down ){
|
|
|
|
v_local_v[0] = north;
|
|
|
|
v_local_v[1] = east;
|
|
|
|
v_local_v[2] = down;
|
|
|
|
}
|
|
|
|
inline void _set_Velocities_Ground(double north, double east, double down) {
|
|
|
|
v_local_rel_ground_v[0] = north;
|
|
|
|
v_local_rel_ground_v[1] = east;
|
|
|
|
v_local_rel_ground_v[2] = down;
|
|
|
|
}
|
|
|
|
inline void _set_Velocities_Local_Airmass( double north, double east,
|
|
|
|
double down)
|
|
|
|
{
|
|
|
|
v_local_airmass_v[0] = north;
|
|
|
|
v_local_airmass_v[1] = east;
|
|
|
|
v_local_airmass_v[2] = down;
|
|
|
|
}
|
|
|
|
inline void _set_Velocities_Wind_Body( double u, double v, double w) {
|
|
|
|
v_wind_body_v[0] = u;
|
|
|
|
v_wind_body_v[1] = v;
|
|
|
|
v_wind_body_v[2] = w;
|
|
|
|
}
|
2000-10-28 16:30:30 +00:00
|
|
|
inline void _set_V_rel_wind(double vt) { v_rel_wind = vt; }
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
inline void _set_V_ground_speed( double v) { v_ground_speed = v; }
|
|
|
|
inline void _set_V_equiv_kts( double kts ) { v_equiv_kts = kts; }
|
|
|
|
inline void _set_V_calibrated_kts( double kts ) { v_calibrated_kts = kts; }
|
|
|
|
inline void _set_Omega_Body( double p, double q, double r ) {
|
|
|
|
omega_body_v[0] = p;
|
|
|
|
omega_body_v[1] = q;
|
|
|
|
omega_body_v[2] = r;
|
|
|
|
}
|
|
|
|
inline void _set_Euler_Rates( double phi, double theta, double psi ) {
|
|
|
|
euler_rates_v[0] = phi;
|
|
|
|
euler_rates_v[1] = theta;
|
|
|
|
euler_rates_v[2] = psi;
|
|
|
|
}
|
|
|
|
inline void _set_Geocentric_Rates( double lat, double lon, double rad ) {
|
|
|
|
geocentric_rates_v[0] = lat;
|
|
|
|
geocentric_rates_v[1] = lon;
|
|
|
|
geocentric_rates_v[2] = rad;
|
|
|
|
}
|
|
|
|
#if 0
|
|
|
|
inline void _set_Radius_to_vehicle(double radius) {
|
|
|
|
geocentric_position_v[2] = radius;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
inline void _set_Geocentric_Position( double lat, double lon, double rad ) {
|
|
|
|
geocentric_position_v[0] = lat;
|
|
|
|
geocentric_position_v[1] = lon;
|
|
|
|
geocentric_position_v[2] = rad;
|
|
|
|
}
|
|
|
|
inline void _set_Latitude(double lat) { geodetic_position_v[0] = lat; }
|
|
|
|
inline void _set_Longitude(double lon) { geodetic_position_v[1] = lon; }
|
|
|
|
inline void _set_Altitude(double altitude) {
|
|
|
|
geodetic_position_v[2] = altitude;
|
|
|
|
}
|
|
|
|
inline void _set_Altitude_AGL(double agl) {
|
|
|
|
altitude_agl = agl;
|
|
|
|
}
|
|
|
|
inline void _set_Geodetic_Position( double lat, double lon, double alt ) {
|
|
|
|
geodetic_position_v[0] = lat;
|
|
|
|
geodetic_position_v[1] = lon;
|
|
|
|
geodetic_position_v[2] = alt;
|
|
|
|
}
|
|
|
|
inline void _set_Euler_Angles( double phi, double theta, double psi ) {
|
|
|
|
euler_angles_v[0] = phi;
|
|
|
|
euler_angles_v[1] = theta;
|
|
|
|
euler_angles_v[2] = psi;
|
|
|
|
}
|
|
|
|
inline void _set_T_Local_to_Body( int i, int j, double value) {
|
|
|
|
t_local_to_body_m[i-1][j-1] = value;
|
|
|
|
}
|
|
|
|
inline void _set_T_Local_to_Body( double m[3][3] ) {
|
|
|
|
int i, j;
|
|
|
|
for ( i = 0; i < 3; i++ ) {
|
|
|
|
for ( j = 0; j < 3; j++ ) {
|
|
|
|
t_local_to_body_m[i][j] = m[i][j];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
inline void _set_Alpha( double a ) { alpha = a; }
|
|
|
|
inline void _set_Beta( double b ) { beta = b; }
|
|
|
|
inline void _set_Cos_phi( double cp ) { cos_phi = cp; }
|
|
|
|
inline void _set_Cos_theta( double ct ) { cos_theta = ct; }
|
|
|
|
inline void _set_Gamma_vert_rad( double gv ) { gamma_vert_rad = gv; }
|
|
|
|
inline void _set_Density( double d ) { density = d; }
|
|
|
|
inline void _set_Mach_number( double m ) { mach_number = m; }
|
|
|
|
inline void _set_Static_pressure( double sp ) { static_pressure = sp; }
|
2006-01-20 17:19:01 +00:00
|
|
|
inline void _set_Static_temperature( double t ) { static_temperature = t; }
|
|
|
|
inline void _set_Total_temperature( double tat ) { total_temperature = tat; } //JW
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
inline void _set_Sea_level_radius( double r ) { sea_level_radius = r; }
|
2006-01-20 17:19:01 +00:00
|
|
|
inline void _set_Earth_position_angle(double a) { earth_position_angle = a; }
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
inline void _set_Runway_altitude( double alt ) { runway_altitude = alt; }
|
|
|
|
inline void _set_Climb_Rate(double rate) { climb_rate = rate; }
|
|
|
|
inline void _set_sin_lat_geocentric(double parm) {
|
|
|
|
sin_lat_geocentric = sin(parm);
|
|
|
|
}
|
|
|
|
inline void _set_cos_lat_geocentric(double parm) {
|
|
|
|
cos_lat_geocentric = cos(parm);
|
|
|
|
}
|
|
|
|
inline void _set_sin_cos_longitude(double parm) {
|
|
|
|
sin_longitude = sin(parm);
|
|
|
|
cos_longitude = cos(parm);
|
|
|
|
}
|
|
|
|
inline void _set_sin_cos_latitude(double parm) {
|
|
|
|
sin_latitude = sin(parm);
|
|
|
|
cos_latitude = cos(parm);
|
|
|
|
}
|
|
|
|
|
2001-07-16 04:34:46 +00:00
|
|
|
inline void _set_daux( int n, double value ) { daux[n] = value; }
|
|
|
|
inline void _set_faux( int n, float value ) { faux[n] = value; }
|
|
|
|
inline void _set_iaux( int n, int value ) { iaux[n] = value; }
|
|
|
|
|
1998-12-03 01:14:58 +00:00
|
|
|
public:
|
2000-08-14 20:12:17 +00:00
|
|
|
|
2001-01-16 21:41:28 +00:00
|
|
|
FGInterface();
|
|
|
|
FGInterface( double dt );
|
2000-08-14 20:12:17 +00:00
|
|
|
virtual ~FGInterface();
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2001-01-16 20:21:03 +00:00
|
|
|
virtual void init ();
|
|
|
|
virtual void bind ();
|
|
|
|
virtual void unbind ();
|
2002-05-11 16:28:50 +00:00
|
|
|
virtual void update(double dt);
|
2001-04-11 02:47:15 +00:00
|
|
|
virtual bool ToggleDataLogging(bool state) { return false; }
|
|
|
|
virtual bool ToggleDataLogging(void) { return false; }
|
1999-10-11 23:09:07 +00:00
|
|
|
|
1998-12-04 01:29:37 +00:00
|
|
|
// Define the various supported flight models (many not yet implemented)
|
|
|
|
enum {
|
1999-10-14 01:53:43 +00:00
|
|
|
// Magic Carpet mode
|
|
|
|
FG_MAGICCARPET = 0,
|
2000-08-14 20:12:17 +00:00
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
// The NASA LaRCsim (Navion) flight model
|
1998-12-04 01:29:37 +00:00
|
|
|
FG_LARCSIM = 1,
|
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
// Jon S. Berndt's new FDM written from the ground up in C++
|
|
|
|
FG_JSBSIM = 2,
|
|
|
|
|
1999-10-12 03:27:06 +00:00
|
|
|
// Christian's hot air balloon simulation
|
|
|
|
FG_BALLOONSIM = 3,
|
|
|
|
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
// Aeronautical DEvelopment AGEncy, Bangalore India
|
The following changes were made to flightgear-0.7.5 code to implement the follow
ing features:
a) ADA Flight model - ADA.cxx, ADA.hxx, flight.hxx
b) Fighter a/c HUD - flight.hxx, hud.hxx, hud.cxx, cockpit.cxx, hud_ladr.c
xx, hud_card.cxx
c) 3-window display - options.hxx, options.cxx, viewer.cxx
d) Moving objects (ship) - main.cxx
e) Patches - main.cxx
ADA.cxx, ADA.hxx
--------------------------
Interface to the external ADA flight dynamics package.
flight.hxx
----------
Included prototypes for accepting additional data fron the External flight
model for fighter aircraft HUD
Hud.hxx
-------
Included prototypes for accepting additional data for fighter HUD from Exernal F
light model.
Defined FIGHTER_HUD pre-processor directive to enable compilation of fighter hud
code.
hud.cxx, cockpit.cxx, hud_ladr.cxx, hud_card.cxx
---------------------------------------
Included code to initialise additional reticles/text for fighter HUD which is co
nditionally
compiled if FIGHTER_HUD is defined.
options.hxx
-----------
Added window_offset, and function to retrieve its value for 3 windows
options.cxx
-----------
Changed few options to suit ADA/CEF projection system/screens and checks for win
dow offset.
views.cxx
---------
Added code to retrieve view offset for window.
Main.cxx
--------
Added code to load and move an aircraft carrier.
Patch to enable clouds from command line until Curtis fixes it. By default cloud
s are disabled.
2000-10-19 19:46:13 +00:00
|
|
|
FG_ADA = 4,
|
|
|
|
|
1999-02-05 21:28:09 +00:00
|
|
|
// The following aren't implemented but are here to spark
|
|
|
|
// thoughts and discussions, and maybe even action.
|
The following changes were made to flightgear-0.7.5 code to implement the follow
ing features:
a) ADA Flight model - ADA.cxx, ADA.hxx, flight.hxx
b) Fighter a/c HUD - flight.hxx, hud.hxx, hud.cxx, cockpit.cxx, hud_ladr.c
xx, hud_card.cxx
c) 3-window display - options.hxx, options.cxx, viewer.cxx
d) Moving objects (ship) - main.cxx
e) Patches - main.cxx
ADA.cxx, ADA.hxx
--------------------------
Interface to the external ADA flight dynamics package.
flight.hxx
----------
Included prototypes for accepting additional data fron the External flight
model for fighter aircraft HUD
Hud.hxx
-------
Included prototypes for accepting additional data for fighter HUD from Exernal F
light model.
Defined FIGHTER_HUD pre-processor directive to enable compilation of fighter hud
code.
hud.cxx, cockpit.cxx, hud_ladr.cxx, hud_card.cxx
---------------------------------------
Included code to initialise additional reticles/text for fighter HUD which is co
nditionally
compiled if FIGHTER_HUD is defined.
options.hxx
-----------
Added window_offset, and function to retrieve its value for 3 windows
options.cxx
-----------
Changed few options to suit ADA/CEF projection system/screens and checks for win
dow offset.
views.cxx
---------
Added code to retrieve view offset for window.
Main.cxx
--------
Added code to load and move an aircraft carrier.
Patch to enable clouds from command line until Curtis fixes it. By default cloud
s are disabled.
2000-10-19 19:46:13 +00:00
|
|
|
FG_ACM = 5,
|
|
|
|
FG_SUPER_SONIC = 6,
|
|
|
|
FG_HELICOPTER = 7,
|
|
|
|
FG_AUTOGYRO = 8,
|
|
|
|
FG_PARACHUTE = 9,
|
1998-12-04 01:29:37 +00:00
|
|
|
|
|
|
|
// Driven externally via a serial port, net, file, etc.
|
The following changes were made to flightgear-0.7.5 code to implement the follow
ing features:
a) ADA Flight model - ADA.cxx, ADA.hxx, flight.hxx
b) Fighter a/c HUD - flight.hxx, hud.hxx, hud.cxx, cockpit.cxx, hud_ladr.c
xx, hud_card.cxx
c) 3-window display - options.hxx, options.cxx, viewer.cxx
d) Moving objects (ship) - main.cxx
e) Patches - main.cxx
ADA.cxx, ADA.hxx
--------------------------
Interface to the external ADA flight dynamics package.
flight.hxx
----------
Included prototypes for accepting additional data fron the External flight
model for fighter aircraft HUD
Hud.hxx
-------
Included prototypes for accepting additional data for fighter HUD from Exernal F
light model.
Defined FIGHTER_HUD pre-processor directive to enable compilation of fighter hud
code.
hud.cxx, cockpit.cxx, hud_ladr.cxx, hud_card.cxx
---------------------------------------
Included code to initialise additional reticles/text for fighter HUD which is co
nditionally
compiled if FIGHTER_HUD is defined.
options.hxx
-----------
Added window_offset, and function to retrieve its value for 3 windows
options.cxx
-----------
Changed few options to suit ADA/CEF projection system/screens and checks for win
dow offset.
views.cxx
---------
Added code to retrieve view offset for window.
Main.cxx
--------
Added code to load and move an aircraft carrier.
Patch to enable clouds from command line until Curtis fixes it. By default cloud
s are disabled.
2000-10-19 19:46:13 +00:00
|
|
|
FG_EXTERNAL = 10
|
1998-12-04 01:29:37 +00:00
|
|
|
};
|
|
|
|
|
2001-10-28 16:16:30 +00:00
|
|
|
// initialization
|
|
|
|
inline bool get_inited() const { return inited; }
|
|
|
|
inline void set_inited( bool value ) { inited = value; }
|
|
|
|
|
|
|
|
inline bool get_bound() const { return bound; }
|
|
|
|
|
2001-11-06 22:33:05 +00:00
|
|
|
//perform initializion that is common to all FDM's
|
|
|
|
void common_init();
|
|
|
|
|
2001-01-16 21:41:28 +00:00
|
|
|
// time and update management values
|
2002-05-11 16:28:50 +00:00
|
|
|
// inline double get_delta_t() const { return delta_t; }
|
|
|
|
// inline void set_delta_t( double dt ) { delta_t = dt; }
|
|
|
|
// inline SGTimeStamp get_time_stamp() const { return time_stamp; }
|
|
|
|
// inline void set_time_stamp( SGTimeStamp s ) { time_stamp = s; }
|
|
|
|
// inline void stamp() { time_stamp.stamp(); }
|
|
|
|
// inline long get_elapsed() const { return elapsed; }
|
|
|
|
// inline void set_elapsed( long e ) { elapsed = e; }
|
|
|
|
// inline long get_remainder() const { return remainder; }
|
|
|
|
// inline void set_remainder( long r ) { remainder = r; }
|
|
|
|
// inline int get_multi_loop() const { return multi_loop; }
|
|
|
|
// inline void set_multi_loop( int ml ) { multi_loop = ml; }
|
2001-01-16 21:41:28 +00:00
|
|
|
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
// Positions
|
|
|
|
virtual void set_Latitude(double lat); // geocentric
|
|
|
|
virtual void set_Longitude(double lon);
|
|
|
|
virtual void set_Altitude(double alt); // triggers re-calc of AGL altitude
|
|
|
|
virtual void set_AltitudeAGL(double altagl); // and vice-versa
|
2001-01-16 20:21:03 +00:00
|
|
|
virtual void set_Latitude_deg (double lat) {
|
2001-03-24 04:48:44 +00:00
|
|
|
set_Latitude(lat * SGD_DEGREES_TO_RADIANS);
|
2001-01-16 20:21:03 +00:00
|
|
|
}
|
|
|
|
virtual void set_Longitude_deg (double lon) {
|
2001-03-24 04:48:44 +00:00
|
|
|
set_Longitude(lon * SGD_DEGREES_TO_RADIANS);
|
2001-01-16 20:21:03 +00:00
|
|
|
}
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
|
|
|
|
// Speeds -- setting any of these will trigger a re-calc of the rest
|
|
|
|
virtual void set_V_calibrated_kts(double vc);
|
|
|
|
virtual void set_Mach_number(double mach);
|
|
|
|
virtual void set_Velocities_Local( double north, double east, double down );
|
2001-07-13 21:45:48 +00:00
|
|
|
inline void set_V_north (double north) {
|
|
|
|
set_Velocities_Local(north, v_local_v[1], v_local_v[2]);
|
|
|
|
}
|
|
|
|
inline void set_V_east (double east) {
|
|
|
|
set_Velocities_Local(v_local_v[0], east, v_local_v[2]);
|
|
|
|
}
|
|
|
|
inline void set_V_down (double down) {
|
|
|
|
set_Velocities_Local(v_local_v[0], v_local_v[1], down);
|
|
|
|
}
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
virtual void set_Velocities_Wind_Body( double u, double v, double w);
|
2001-07-13 21:45:48 +00:00
|
|
|
virtual void set_uBody (double uBody) {
|
|
|
|
set_Velocities_Wind_Body(uBody, v_wind_body_v[1], v_wind_body_v[2]);
|
|
|
|
}
|
|
|
|
virtual void set_vBody (double vBody) {
|
|
|
|
set_Velocities_Wind_Body(v_wind_body_v[0], vBody, v_wind_body_v[2]);
|
|
|
|
}
|
|
|
|
virtual void set_wBody (double wBody) {
|
|
|
|
set_Velocities_Wind_Body(v_wind_body_v[0], v_wind_body_v[1], wBody);
|
|
|
|
}
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
|
|
|
|
// Euler angles
|
|
|
|
virtual void set_Euler_Angles( double phi, double theta, double psi );
|
2001-01-16 20:21:03 +00:00
|
|
|
virtual void set_Phi (double phi) {
|
|
|
|
set_Euler_Angles(phi, get_Theta(), get_Psi());
|
|
|
|
}
|
|
|
|
virtual void set_Theta (double theta) {
|
|
|
|
set_Euler_Angles(get_Phi(), theta, get_Psi());
|
|
|
|
}
|
|
|
|
virtual void set_Psi (double psi) {
|
|
|
|
set_Euler_Angles(get_Phi(), get_Theta(), psi);
|
|
|
|
}
|
2002-09-28 04:01:34 +00:00
|
|
|
virtual void set_Phi_deg (double phi) {
|
|
|
|
set_Phi(phi * SGD_DEGREES_TO_RADIANS);
|
|
|
|
}
|
2001-01-16 20:21:03 +00:00
|
|
|
virtual void set_Theta_deg (double theta) {
|
2001-03-24 04:48:44 +00:00
|
|
|
set_Theta(theta * SGD_DEGREES_TO_RADIANS);
|
2001-01-16 20:21:03 +00:00
|
|
|
}
|
2002-09-28 04:01:34 +00:00
|
|
|
virtual void set_Psi_deg (double psi) {
|
|
|
|
set_Psi(psi * SGD_DEGREES_TO_RADIANS);
|
|
|
|
}
|
I tested:
LaRCsim c172 on-ground and in-air starts, reset: all work
UIUC Cessna172 on-ground and in-air starts work as expected, reset
results in an aircraft that is upside down but does not crash FG. I
don't know what it was like before, so it may well be no change.
JSBSim c172 and X15 in-air starts work fine, resets now work (and are
trimmed), on-ground starts do not -- the c172 ends up on its back. I
suspect this is no worse than before.
I did not test:
Balloon (the weather code returns nan's for the atmosphere data --this
is in the weather module and apparently is a linux only bug)
ADA (don't know how)
MagicCarpet (needs work yet)
External (don't know how)
known to be broken:
LaRCsim c172 on-ground starts with a negative terrain altitude (this
happens at KPAO when the scenery is not present). The FDM inits to
about 50 feet AGL and the model falls to the ground. It does stay
upright, however, and seems to be fine once it settles out, FWIW.
To do:
--implement set_Model on the bus
--bring Christian's weather data into JSBSim
-- add default method to bus for updating things like the sin and cos of
latitude (for Balloon, MagicCarpet)
-- lots of cleanup
The files:
src/FDM/flight.cxx
src/FDM/flight.hxx
-- all data members now declared protected instead of private.
-- eliminated all but a small set of 'setters', no change to getters.
-- that small set is declared virtual, the default implementation
provided preserves the old behavior
-- all of the vector data members are now initialized.
-- added busdump() method -- FG_LOG's all the bus data when called,
useful for diagnostics.
src/FDM/ADA.cxx
-- bus data members now directly assigned to
src/FDM/Balloon.cxx
-- bus data members now directly assigned to
-- changed V_equiv_kts to V_calibrated_kts
src/FDM/JSBSim.cxx
src/FDM/JSBSim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with JSBSim specific
logic
-- changed the static FDMExec to a dynamic fdmex (needed so that the
JSBSim object can be deleted when a model change is called for)
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- added logic to bring up FGEngInterface objects and set the RPM and
throttle values.
src/FDM/LaRCsim.cxx
src/FDM/LaRCsim.hxx
-- bus data members now directly assigned to
-- implemented the FGInterface virtual setters with LaRCsim specific
logic, uses LaRCsimIC
-- implemented constructor and destructor, moved some of the logic
formerly in init() to constructor
-- moved default inertias to here from fg_init.cxx
-- eliminated the climb rate calculation. The equivalent, climb_rate =
-1*vdown, is now in copy_from_LaRCsim().
src/FDM/LaRCsimIC.cxx
src/FDM/LaRCsimIC.hxx
-- similar to FGInitialCondition, this class has all the logic needed to
turn data like Vc and Mach into the more fundamental quantities LaRCsim
needs to initialize.
-- put it in src/FDM since it is a class
src/FDM/MagicCarpet.cxx
-- bus data members now directly assigned to
src/FDM/Makefile.am
-- adds LaRCsimIC.hxx and cxx
src/FDM/JSBSim/FGAtmosphere.h
src/FDM/JSBSim/FGDefs.h
src/FDM/JSBSim/FGInitialCondition.cpp
src/FDM/JSBSim/FGInitialCondition.h
src/FDM/JSBSim/JSBSim.cpp
-- changes to accomodate the new bus
src/FDM/LaRCsim/atmos_62.h
src/FDM/LaRCsim/ls_geodesy.h
-- surrounded prototypes with #ifdef __cplusplus ... #endif , functions
here are needed in LaRCsimIC
src/FDM/LaRCsim/c172_main.c
src/FDM/LaRCsim/cherokee_aero.c
src/FDM/LaRCsim/ls_aux.c
src/FDM/LaRCsim/ls_constants.h
src/FDM/LaRCsim/ls_geodesy.c
src/FDM/LaRCsim/ls_geodesy.h
src/FDM/LaRCsim/ls_step.c
src/FDM/UIUCModel/uiuc_betaprobe.cpp
-- changed PI to LS_PI, eliminates preprocessor naming conflict with
weather module
src/FDM/LaRCsim/ls_interface.c
src/FDM/LaRCsim/ls_interface.h
-- added function ls_set_model_dt()
src/Main/bfi.cxx
-- eliminated calls that set the NED speeds to body components. They
are no longer needed and confuse the new bus.
src/Main/fg_init.cxx
-- eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). or set default values. The bus now handles the
defaults and updates itself when the setters are called (for LaRCsim and
JSBSim). A default method for doing this needs to be added to the bus.
-- added fgVelocityInit() to set the speed the user asked for. Both
JSBSim and LaRCsim can now be initialized using any of:
vc,mach, NED components, UVW components.
src/Main/main.cxx
--eliminated call to fgFDMSetGroundElevation, this data is now 'pulled'
onto the bus every update()
src/Main/options.cxx
src/Main/options.hxx
-- added enum to keep track of the speed requested by the user
-- eliminated calls to set NED velocity properties to body speeds, they
are no longer needed.
-- added options for the NED components.
src/Network/garmin.cxx
src/Network/nmea.cxx
--eliminated calls that just brought the bus data up-to-date (e.g.
set_sin_cos_latitude). The bus now updates itself when the setters are
called (for LaRCsim and JSBSim). A default method for doing this needs
to be added to the bus.
-- changed set_V_equiv_kts to set_V_calibrated_kts. set_V_equiv_kts no
longer exists ( get_V_equiv_kts still does, though)
src/WeatherCM/FGLocalWeatherDatabase.cpp
-- commented out the code to put the weather data on the bus, a
different scheme for this is needed.
2000-10-24 00:34:50 +00:00
|
|
|
|
|
|
|
// Flight Path
|
|
|
|
virtual void set_Climb_Rate( double roc);
|
|
|
|
virtual void set_Gamma_vert_rad( double gamma);
|
|
|
|
|
|
|
|
// Earth
|
|
|
|
|
|
|
|
virtual void set_Static_pressure(double p);
|
|
|
|
virtual void set_Static_temperature(double T);
|
|
|
|
virtual void set_Density(double rho);
|
|
|
|
|
|
|
|
virtual void set_Velocities_Local_Airmass (double wnorth,
|
|
|
|
double weast,
|
|
|
|
double wdown );
|
2001-03-01 16:32:29 +00:00
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
// ========== Mass properties and geometry values ==========
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-03 01:14:58 +00:00
|
|
|
// Inertias
|
|
|
|
inline double get_Mass() const { return mass; }
|
|
|
|
inline double get_I_xx() const { return i_xx; }
|
|
|
|
inline double get_I_yy() const { return i_yy; }
|
|
|
|
inline double get_I_zz() const { return i_zz; }
|
|
|
|
inline double get_I_xz() const { return i_xz; }
|
2000-08-14 20:12:17 +00:00
|
|
|
|
1998-12-03 01:14:58 +00:00
|
|
|
// Pilot location rel to ref pt
|
2000-08-14 20:12:17 +00:00
|
|
|
// inline double * get_D_pilot_rp_body_v() {
|
|
|
|
// return d_pilot_rp_body_v;
|
1998-12-18 23:37:06 +00:00
|
|
|
// }
|
|
|
|
// inline double get_Dx_pilot() const { return d_pilot_rp_body_v[0]; }
|
|
|
|
// inline double get_Dy_pilot() const { return d_pilot_rp_body_v[1]; }
|
|
|
|
// inline double get_Dz_pilot() const { return d_pilot_rp_body_v[2]; }
|
|
|
|
/* inline void set_Pilot_Location( double dx, double dy, double dz ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
d_pilot_rp_body_v[0] = dx;
|
|
|
|
d_pilot_rp_body_v[1] = dy;
|
|
|
|
d_pilot_rp_body_v[2] = dz;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1998-12-03 01:14:58 +00:00
|
|
|
|
|
|
|
// CG position w.r.t. ref. point
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_D_cg_rp_body_v() { return d_cg_rp_body_v; }
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_Dx_cg() const { return d_cg_rp_body_v[0]; }
|
|
|
|
inline double get_Dy_cg() const { return d_cg_rp_body_v[1]; }
|
|
|
|
inline double get_Dz_cg() const { return d_cg_rp_body_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
// ========== Forces ==========
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_F_body_total_v() { return f_body_total_v; }
|
|
|
|
// inline double get_F_X() const { return f_body_total_v[0]; }
|
|
|
|
// inline double get_F_Y() const { return f_body_total_v[1]; }
|
|
|
|
// inline double get_F_Z() const { return f_body_total_v[2]; }
|
|
|
|
/* inline void set_Forces_Body_Total( double x, double y, double z ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
f_body_total_v[0] = x;
|
|
|
|
f_body_total_v[1] = y;
|
|
|
|
f_body_total_v[2] = z;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1998-12-03 01:14:58 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_F_local_total_v() { return f_local_total_v; }
|
|
|
|
// inline double get_F_north() const { return f_local_total_v[0]; }
|
|
|
|
// inline double get_F_east() const { return f_local_total_v[1]; }
|
|
|
|
// inline double get_F_down() const { return f_local_total_v[2]; }
|
|
|
|
/* inline void set_Forces_Local_Total( double x, double y, double z ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
f_local_total_v[0] = x;
|
|
|
|
f_local_total_v[1] = y;
|
|
|
|
f_local_total_v[2] = z;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1998-12-03 01:14:58 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_F_aero_v() { return f_aero_v; }
|
|
|
|
// inline double get_F_X_aero() const { return f_aero_v[0]; }
|
|
|
|
// inline double get_F_Y_aero() const { return f_aero_v[1]; }
|
|
|
|
// inline double get_F_Z_aero() const { return f_aero_v[2]; }
|
|
|
|
/* inline void set_Forces_Aero( double x, double y, double z ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
f_aero_v[0] = x;
|
|
|
|
f_aero_v[1] = y;
|
|
|
|
f_aero_v[2] = z;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1998-12-03 01:14:58 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_F_engine_v() { return f_engine_v; }
|
|
|
|
// inline double get_F_X_engine() const { return f_engine_v[0]; }
|
|
|
|
// inline double get_F_Y_engine() const { return f_engine_v[1]; }
|
|
|
|
// inline double get_F_Z_engine() const { return f_engine_v[2]; }
|
|
|
|
/* inline void set_Forces_Engine( double x, double y, double z ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
f_engine_v[0] = x;
|
|
|
|
f_engine_v[1] = y;
|
|
|
|
f_engine_v[2] = z;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1998-12-03 01:14:58 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_F_gear_v() { return f_gear_v; }
|
|
|
|
// inline double get_F_X_gear() const { return f_gear_v[0]; }
|
|
|
|
// inline double get_F_Y_gear() const { return f_gear_v[1]; }
|
|
|
|
// inline double get_F_Z_gear() const { return f_gear_v[2]; }
|
|
|
|
/* inline void set_Forces_Gear( double x, double y, double z ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
f_gear_v[0] = x;
|
|
|
|
f_gear_v[1] = y;
|
|
|
|
f_gear_v[2] = z;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1998-12-03 01:14:58 +00:00
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
// ========== Moments ==========
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_M_total_rp_v() { return m_total_rp_v; }
|
|
|
|
// inline double get_M_l_rp() const { return m_total_rp_v[0]; }
|
|
|
|
// inline double get_M_m_rp() const { return m_total_rp_v[1]; }
|
|
|
|
// inline double get_M_n_rp() const { return m_total_rp_v[2]; }
|
|
|
|
/* inline void set_Moments_Total_RP( double l, double m, double n ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
m_total_rp_v[0] = l;
|
|
|
|
m_total_rp_v[1] = m;
|
|
|
|
m_total_rp_v[2] = n;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_M_total_cg_v() { return m_total_cg_v; }
|
|
|
|
// inline double get_M_l_cg() const { return m_total_cg_v[0]; }
|
|
|
|
// inline double get_M_m_cg() const { return m_total_cg_v[1]; }
|
|
|
|
// inline double get_M_n_cg() const { return m_total_cg_v[2]; }
|
|
|
|
/* inline void set_Moments_Total_CG( double l, double m, double n ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
m_total_cg_v[0] = l;
|
|
|
|
m_total_cg_v[1] = m;
|
|
|
|
m_total_cg_v[2] = n;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_M_aero_v() { return m_aero_v; }
|
|
|
|
// inline double get_M_l_aero() const { return m_aero_v[0]; }
|
|
|
|
// inline double get_M_m_aero() const { return m_aero_v[1]; }
|
|
|
|
// inline double get_M_n_aero() const { return m_aero_v[2]; }
|
|
|
|
/* inline void set_Moments_Aero( double l, double m, double n ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
m_aero_v[0] = l;
|
|
|
|
m_aero_v[1] = m;
|
|
|
|
m_aero_v[2] = n;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_M_engine_v() { return m_engine_v; }
|
|
|
|
// inline double get_M_l_engine() const { return m_engine_v[0]; }
|
|
|
|
// inline double get_M_m_engine() const { return m_engine_v[1]; }
|
|
|
|
// inline double get_M_n_engine() const { return m_engine_v[2]; }
|
|
|
|
/* inline void set_Moments_Engine( double l, double m, double n ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
m_engine_v[0] = l;
|
|
|
|
m_engine_v[1] = m;
|
|
|
|
m_engine_v[2] = n;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_M_gear_v() { return m_gear_v; }
|
|
|
|
// inline double get_M_l_gear() const { return m_gear_v[0]; }
|
|
|
|
// inline double get_M_m_gear() const { return m_gear_v[1]; }
|
|
|
|
// inline double get_M_n_gear() const { return m_gear_v[2]; }
|
|
|
|
/* inline void set_Moments_Gear( double l, double m, double n ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
m_gear_v[0] = l;
|
|
|
|
m_gear_v[1] = m;
|
|
|
|
m_gear_v[2] = n;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
// ========== Accelerations ==========
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_V_dot_local_v() { return v_dot_local_v; }
|
2000-05-02 19:41:35 +00:00
|
|
|
inline double get_V_dot_north() const { return v_dot_local_v[0]; }
|
|
|
|
inline double get_V_dot_east() const { return v_dot_local_v[1]; }
|
|
|
|
inline double get_V_dot_down() const { return v_dot_local_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_V_dot_body_v() { return v_dot_body_v; }
|
1999-09-30 02:59:12 +00:00
|
|
|
inline double get_U_dot_body() const { return v_dot_body_v[0]; }
|
|
|
|
inline double get_V_dot_body() const { return v_dot_body_v[1]; }
|
|
|
|
inline double get_W_dot_body() const { return v_dot_body_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_A_cg_body_v() { return a_cg_body_v; }
|
1999-09-30 02:59:12 +00:00
|
|
|
inline double get_A_X_cg() const { return a_cg_body_v[0]; }
|
|
|
|
inline double get_A_Y_cg() const { return a_cg_body_v[1]; }
|
|
|
|
inline double get_A_Z_cg() const { return a_cg_body_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_A_pilot_body_v() { return a_pilot_body_v; }
|
1999-09-30 02:59:12 +00:00
|
|
|
inline double get_A_X_pilot() const { return a_pilot_body_v[0]; }
|
|
|
|
inline double get_A_Y_pilot() const { return a_pilot_body_v[1]; }
|
|
|
|
inline double get_A_Z_pilot() const { return a_pilot_body_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2000-07-31 15:05:08 +00:00
|
|
|
// inline double * get_N_cg_body_v() { return n_cg_body_v; }
|
The following changes were made to flightgear-0.7.5 code to implement the follow
ing features:
a) ADA Flight model - ADA.cxx, ADA.hxx, flight.hxx
b) Fighter a/c HUD - flight.hxx, hud.hxx, hud.cxx, cockpit.cxx, hud_ladr.c
xx, hud_card.cxx
c) 3-window display - options.hxx, options.cxx, viewer.cxx
d) Moving objects (ship) - main.cxx
e) Patches - main.cxx
ADA.cxx, ADA.hxx
--------------------------
Interface to the external ADA flight dynamics package.
flight.hxx
----------
Included prototypes for accepting additional data fron the External flight
model for fighter aircraft HUD
Hud.hxx
-------
Included prototypes for accepting additional data for fighter HUD from Exernal F
light model.
Defined FIGHTER_HUD pre-processor directive to enable compilation of fighter hud
code.
hud.cxx, cockpit.cxx, hud_ladr.cxx, hud_card.cxx
---------------------------------------
Included code to initialise additional reticles/text for fighter HUD which is co
nditionally
compiled if FIGHTER_HUD is defined.
options.hxx
-----------
Added window_offset, and function to retrieve its value for 3 windows
options.cxx
-----------
Changed few options to suit ADA/CEF projection system/screens and checks for win
dow offset.
views.cxx
---------
Added code to retrieve view offset for window.
Main.cxx
--------
Added code to load and move an aircraft carrier.
Patch to enable clouds from command line until Curtis fixes it. By default cloud
s are disabled.
2000-10-19 19:46:13 +00:00
|
|
|
inline double get_N_X_cg() const { return n_cg_body_v[0]; }
|
|
|
|
inline double get_N_Y_cg() const { return n_cg_body_v[1]; }
|
|
|
|
inline double get_N_Z_cg() const { return n_cg_body_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_N_pilot_body_v() { return n_pilot_body_v; }
|
2000-07-31 15:05:08 +00:00
|
|
|
// inline double get_N_X_pilot() const { return n_pilot_body_v[0]; }
|
|
|
|
// inline double get_N_Y_pilot() const { return n_pilot_body_v[1]; }
|
|
|
|
// inline double get_N_Z_pilot() const { return n_pilot_body_v[2]; }
|
|
|
|
// inline void set_Accels_Pilot_Body_N( double x, double y, double z ) {
|
|
|
|
// n_pilot_body_v[0] = x;
|
|
|
|
// n_pilot_body_v[1] = y;
|
|
|
|
// n_pilot_body_v[2] = z;
|
2000-08-14 20:12:17 +00:00
|
|
|
// }
|
|
|
|
|
2002-02-17 21:05:27 +00:00
|
|
|
inline double get_Nlf(void) const { return nlf; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_Omega_dot_body_v() { return omega_dot_body_v; }
|
|
|
|
// inline double get_P_dot_body() const { return omega_dot_body_v[0]; }
|
|
|
|
// inline double get_Q_dot_body() const { return omega_dot_body_v[1]; }
|
|
|
|
// inline double get_R_dot_body() const { return omega_dot_body_v[2]; }
|
|
|
|
/* inline void set_Accels_Omega( double p, double q, double r ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
omega_dot_body_v[0] = p;
|
|
|
|
omega_dot_body_v[1] = q;
|
|
|
|
omega_dot_body_v[2] = r;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
// ========== Velocities ==========
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_V_local_v() { return v_local_v; }
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_V_north() const { return v_local_v[0]; }
|
|
|
|
inline double get_V_east() const { return v_local_v[1]; }
|
|
|
|
inline double get_V_down() const { return v_local_v[2]; }
|
2001-01-16 20:21:03 +00:00
|
|
|
inline double get_uBody () const { return v_wind_body_v[0]; }
|
|
|
|
inline double get_vBody () const { return v_wind_body_v[1]; }
|
|
|
|
inline double get_wBody () const { return v_wind_body_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2001-09-19 22:25:22 +00:00
|
|
|
// Please dont comment these out. fdm=ada uses these (see
|
|
|
|
// cockpit.cxx) --->
|
|
|
|
inline double * get_V_local_rel_ground_v() {
|
|
|
|
return v_local_rel_ground_v;
|
|
|
|
}
|
|
|
|
inline double get_V_north_rel_ground() const {
|
|
|
|
return v_local_rel_ground_v[0];
|
|
|
|
}
|
|
|
|
inline double get_V_east_rel_ground() const {
|
|
|
|
return v_local_rel_ground_v[1];
|
|
|
|
}
|
|
|
|
inline double get_V_down_rel_ground() const {
|
|
|
|
return v_local_rel_ground_v[2];
|
|
|
|
}
|
|
|
|
// <--- fdm=ada uses these (see cockpit.cxx)
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_V_local_airmass_v() { return v_local_airmass_v; }
|
2000-05-11 19:17:33 +00:00
|
|
|
inline double get_V_north_airmass() const { return v_local_airmass_v[0]; }
|
|
|
|
inline double get_V_east_airmass() const { return v_local_airmass_v[1]; }
|
|
|
|
inline double get_V_down_airmass() const { return v_local_airmass_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-05 15:53:59 +00:00
|
|
|
// airmass
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_V_local_rel_airmass_v() {
|
2000-08-14 20:12:17 +00:00
|
|
|
// return v_local_rel_airmass_v;
|
|
|
|
// }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_V_north_rel_airmass() const {
|
2000-08-14 20:12:17 +00:00
|
|
|
// return v_local_rel_airmass_v[0];
|
|
|
|
// }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_V_east_rel_airmass() const {
|
2000-08-14 20:12:17 +00:00
|
|
|
// return v_local_rel_airmass_v[1];
|
|
|
|
// }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_V_down_rel_airmass() const {
|
2000-08-14 20:12:17 +00:00
|
|
|
// return v_local_rel_airmass_v[2];
|
|
|
|
// }
|
1998-12-18 23:37:06 +00:00
|
|
|
/* inline void set_Velocities_Local_Rel_Airmass( double north, double east,
|
1998-12-03 04:25:02 +00:00
|
|
|
double down)
|
|
|
|
{
|
|
|
|
v_local_rel_airmass_v[0] = north;
|
|
|
|
v_local_rel_airmass_v[1] = east;
|
|
|
|
v_local_rel_airmass_v[2] = down;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_V_local_gust_v() { return v_local_gust_v; }
|
|
|
|
// inline double get_U_gust() const { return v_local_gust_v[0]; }
|
|
|
|
// inline double get_V_gust() const { return v_local_gust_v[1]; }
|
|
|
|
// inline double get_W_gust() const { return v_local_gust_v[2]; }
|
|
|
|
/* inline void set_Velocities_Gust( double u, double v, double w)
|
1998-12-03 04:25:02 +00:00
|
|
|
{
|
|
|
|
v_local_gust_v[0] = u;
|
|
|
|
v_local_gust_v[1] = v;
|
|
|
|
v_local_gust_v[2] = w;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1998-12-03 04:25:02 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_V_wind_body_v() { return v_wind_body_v; }
|
1999-10-01 20:07:44 +00:00
|
|
|
inline double get_U_body() const { return v_wind_body_v[0]; }
|
|
|
|
inline double get_V_body() const { return v_wind_body_v[1]; }
|
|
|
|
inline double get_W_body() const { return v_wind_body_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2000-10-28 16:30:30 +00:00
|
|
|
inline double get_V_rel_wind() const { return v_rel_wind; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline void set_V_rel_wind(double wind) { v_rel_wind = wind; }
|
1998-12-03 04:25:02 +00:00
|
|
|
|
2002-01-31 20:18:19 +00:00
|
|
|
inline double get_V_true_kts() const { return v_true_kts; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline void set_V_true_kts(double kts) { v_true_kts = kts; }
|
1998-12-03 04:25:02 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_V_rel_ground() const { return v_rel_ground; }
|
|
|
|
// inline void set_V_rel_ground( double v ) { v_rel_ground = v; }
|
1998-12-03 04:25:02 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_V_inertial() const { return v_inertial; }
|
|
|
|
// inline void set_V_inertial(double v) { v_inertial = v; }
|
1998-12-03 04:25:02 +00:00
|
|
|
|
1999-10-10 16:48:21 +00:00
|
|
|
inline double get_V_ground_speed() const { return v_ground_speed; }
|
1998-12-03 04:25:02 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_V_equiv() const { return v_equiv; }
|
|
|
|
// inline void set_V_equiv( double v ) { v_equiv = v; }
|
1998-12-03 04:25:02 +00:00
|
|
|
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_V_equiv_kts() const { return v_equiv_kts; }
|
1998-12-03 04:25:02 +00:00
|
|
|
|
2000-01-10 21:07:26 +00:00
|
|
|
//inline double get_V_calibrated() const { return v_calibrated; }
|
|
|
|
//inline void set_V_calibrated( double v ) { v_calibrated = v; }
|
1998-12-03 04:25:02 +00:00
|
|
|
|
2000-01-10 21:07:26 +00:00
|
|
|
inline double get_V_calibrated_kts() const { return v_calibrated_kts; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_Omega_body_v() { return omega_body_v; }
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_P_body() const { return omega_body_v[0]; }
|
|
|
|
inline double get_Q_body() const { return omega_body_v[1]; }
|
|
|
|
inline double get_R_body() const { return omega_body_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_Omega_local_v() { return omega_local_v; }
|
|
|
|
// inline double get_P_local() const { return omega_local_v[0]; }
|
|
|
|
// inline double get_Q_local() const { return omega_local_v[1]; }
|
|
|
|
// inline double get_R_local() const { return omega_local_v[2]; }
|
|
|
|
/* inline void set_Omega_Local( double p, double q, double r ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
omega_local_v[0] = p;
|
|
|
|
omega_local_v[1] = q;
|
|
|
|
omega_local_v[2] = r;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_Omega_total_v() { return omega_total_v; }
|
|
|
|
// inline double get_P_total() const { return omega_total_v[0]; }
|
|
|
|
// inline double get_Q_total() const { return omega_total_v[1]; }
|
|
|
|
// inline double get_R_total() const { return omega_total_v[2]; }
|
|
|
|
/* inline void set_Omega_Total( double p, double q, double r ) {
|
1998-12-03 04:25:02 +00:00
|
|
|
omega_total_v[0] = p;
|
|
|
|
omega_total_v[1] = q;
|
|
|
|
omega_total_v[2] = r;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_Euler_rates_v() { return euler_rates_v; }
|
2000-05-02 19:41:35 +00:00
|
|
|
inline double get_Phi_dot() const { return euler_rates_v[0]; }
|
|
|
|
inline double get_Theta_dot() const { return euler_rates_v[1]; }
|
|
|
|
inline double get_Psi_dot() const { return euler_rates_v[2]; }
|
2002-10-29 19:27:05 +00:00
|
|
|
inline double get_Phi_dot_degps() const { return euler_rates_v[0] * SGD_RADIANS_TO_DEGREES; }
|
|
|
|
inline double get_Theta_dot_degps() const { return euler_rates_v[1] * SGD_RADIANS_TO_DEGREES; }
|
|
|
|
inline double get_Psi_dot_degps() const { return euler_rates_v[2] * SGD_RADIANS_TO_DEGREES; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_Geocentric_rates_v() { return geocentric_rates_v; }
|
1999-01-08 19:27:34 +00:00
|
|
|
inline double get_Latitude_dot() const { return geocentric_rates_v[0]; }
|
|
|
|
inline double get_Longitude_dot() const { return geocentric_rates_v[1]; }
|
|
|
|
inline double get_Radius_dot() const { return geocentric_rates_v[2]; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
// ========== Positions ==========
|
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_Geocentric_position_v() {
|
|
|
|
// return geocentric_position_v;
|
|
|
|
// }
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_Lat_geocentric() const {
|
|
|
|
return geocentric_position_v[0];
|
|
|
|
}
|
2000-08-14 20:12:17 +00:00
|
|
|
inline double get_Lon_geocentric() const {
|
1998-12-03 01:14:58 +00:00
|
|
|
return geocentric_position_v[1];
|
|
|
|
}
|
|
|
|
inline double get_Radius_to_vehicle() const {
|
|
|
|
return geocentric_position_v[2];
|
|
|
|
}
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_Geodetic_position_v() { return geodetic_position_v; }
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_Latitude() const { return geodetic_position_v[0]; }
|
|
|
|
inline double get_Longitude() const { return geodetic_position_v[1]; }
|
|
|
|
inline double get_Altitude() const { return geodetic_position_v[2]; }
|
2001-01-16 20:21:03 +00:00
|
|
|
inline double get_Altitude_AGL(void) const { return altitude_agl; }
|
|
|
|
|
|
|
|
inline double get_Latitude_deg () const {
|
2001-03-24 04:48:44 +00:00
|
|
|
return get_Latitude() * SGD_RADIANS_TO_DEGREES;
|
2001-01-16 20:21:03 +00:00
|
|
|
}
|
|
|
|
inline double get_Longitude_deg () const {
|
2001-03-24 04:48:44 +00:00
|
|
|
return get_Longitude() * SGD_RADIANS_TO_DEGREES;
|
2001-01-16 20:21:03 +00:00
|
|
|
}
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_Euler_angles_v() { return euler_angles_v; }
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_Phi() const { return euler_angles_v[0]; }
|
|
|
|
inline double get_Theta() const { return euler_angles_v[1]; }
|
|
|
|
inline double get_Psi() const { return euler_angles_v[2]; }
|
2001-03-24 04:48:44 +00:00
|
|
|
inline double get_Phi_deg () const { return get_Phi() * SGD_RADIANS_TO_DEGREES; }
|
|
|
|
inline double get_Theta_deg () const { return get_Theta() * SGD_RADIANS_TO_DEGREES; }
|
|
|
|
inline double get_Psi_deg () const { return get_Psi() * SGD_RADIANS_TO_DEGREES; }
|
1998-12-03 04:25:02 +00:00
|
|
|
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
// ========== Miscellaneous quantities ==========
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-03 01:14:58 +00:00
|
|
|
// inline double * get_T_local_to_body_m() { return t_local_to_body_m; }
|
|
|
|
inline double get_T_local_to_body_11() const {
|
|
|
|
return t_local_to_body_m[0][0];
|
|
|
|
}
|
|
|
|
inline double get_T_local_to_body_12() const {
|
|
|
|
return t_local_to_body_m[0][1];
|
|
|
|
}
|
|
|
|
inline double get_T_local_to_body_13() const {
|
|
|
|
return t_local_to_body_m[0][2];
|
|
|
|
}
|
|
|
|
inline double get_T_local_to_body_21() const {
|
|
|
|
return t_local_to_body_m[1][0];
|
|
|
|
}
|
|
|
|
inline double get_T_local_to_body_22() const {
|
|
|
|
return t_local_to_body_m[1][1];
|
|
|
|
}
|
|
|
|
inline double get_T_local_to_body_23() const {
|
|
|
|
return t_local_to_body_m[1][2];
|
|
|
|
}
|
|
|
|
inline double get_T_local_to_body_31() const {
|
|
|
|
return t_local_to_body_m[2][0];
|
|
|
|
}
|
|
|
|
inline double get_T_local_to_body_32() const {
|
|
|
|
return t_local_to_body_m[2][1];
|
|
|
|
}
|
|
|
|
inline double get_T_local_to_body_33() const {
|
|
|
|
return t_local_to_body_m[2][2];
|
|
|
|
}
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_Gravity() const { return gravity; }
|
|
|
|
// inline void set_Gravity(double g) { gravity = g; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2000-08-14 20:12:17 +00:00
|
|
|
// inline double get_Centrifugal_relief() const {
|
|
|
|
// return centrifugal_relief;
|
|
|
|
// }
|
|
|
|
// inline void set_Centrifugal_relief(double cr) {
|
|
|
|
// centrifugal_relief = cr;
|
|
|
|
// }
|
|
|
|
|
1999-01-08 19:27:34 +00:00
|
|
|
inline double get_Alpha() const { return alpha; }
|
2002-02-17 21:05:27 +00:00
|
|
|
inline double get_Alpha_deg() const { return alpha * SGD_RADIANS_TO_DEGREES; }
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_Beta() const { return beta; }
|
2002-02-17 21:05:27 +00:00
|
|
|
inline double get_Beta_deg() const { return beta * SGD_RADIANS_TO_DEGREES; }
|
2002-01-31 20:18:19 +00:00
|
|
|
inline double get_Alpha_dot() const { return alpha_dot; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline void set_Alpha_dot( double ad ) { alpha_dot = ad; }
|
2002-01-31 20:18:19 +00:00
|
|
|
inline double get_Beta_dot() const { return beta_dot; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline void set_Beta_dot( double bd ) { beta_dot = bd; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_Cos_alpha() const { return cos_alpha; }
|
|
|
|
// inline void set_Cos_alpha( double ca ) { cos_alpha = ca; }
|
|
|
|
// inline double get_Sin_alpha() const { return sin_alpha; }
|
|
|
|
// inline void set_Sin_alpha( double sa ) { sin_alpha = sa; }
|
|
|
|
// inline double get_Cos_beta() const { return cos_beta; }
|
|
|
|
// inline void set_Cos_beta( double cb ) { cos_beta = cb; }
|
|
|
|
// inline double get_Sin_beta() const { return sin_beta; }
|
|
|
|
// inline void set_Sin_beta( double sb ) { sin_beta = sb; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1999-10-09 13:09:16 +00:00
|
|
|
inline double get_Cos_phi() const { return cos_phi; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_Sin_phi() const { return sin_phi; }
|
|
|
|
// inline void set_Sin_phi( double sp ) { sin_phi = sp; }
|
1999-10-09 13:09:16 +00:00
|
|
|
inline double get_Cos_theta() const { return cos_theta; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_Sin_theta() const { return sin_theta; }
|
|
|
|
// inline void set_Sin_theta( double st ) { sin_theta = st; }
|
|
|
|
// inline double get_Cos_psi() const { return cos_psi; }
|
|
|
|
// inline void set_Cos_psi( double cp ) { cos_psi = cp; }
|
|
|
|
// inline double get_Sin_psi() const { return sin_psi; }
|
|
|
|
// inline void set_Sin_psi( double sp ) { sin_psi = sp; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_Gamma_vert_rad() const { return gamma_vert_rad; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_Gamma_horiz_rad() const { return gamma_horiz_rad; }
|
|
|
|
// inline void set_Gamma_horiz_rad( double gh ) { gamma_horiz_rad = gh; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_Sigma() const { return sigma; }
|
|
|
|
// inline void set_Sigma( double s ) { sigma = s; }
|
2000-05-11 19:17:33 +00:00
|
|
|
inline double get_Density() const { return density; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_V_sound() const { return v_sound; }
|
|
|
|
// inline void set_V_sound( double v ) { v_sound = v; }
|
2000-01-10 21:07:26 +00:00
|
|
|
inline double get_Mach_number() const { return mach_number; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2000-05-11 19:17:33 +00:00
|
|
|
inline double get_Static_pressure() const { return static_pressure; }
|
2002-01-31 20:18:19 +00:00
|
|
|
inline double get_Total_pressure() const { return total_pressure; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline void set_Total_pressure( double tp ) { total_pressure = tp; }
|
|
|
|
// inline double get_Impact_pressure() const { return impact_pressure; }
|
|
|
|
// inline void set_Impact_pressure( double ip ) { impact_pressure = ip; }
|
2002-01-31 20:18:19 +00:00
|
|
|
inline double get_Dynamic_pressure() const { return dynamic_pressure; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline void set_Dynamic_pressure( double dp ) { dynamic_pressure = dp; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
2000-05-11 19:17:33 +00:00
|
|
|
inline double get_Static_temperature() const { return static_temperature; }
|
2002-01-31 20:18:19 +00:00
|
|
|
inline double get_Total_temperature() const { return total_temperature; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline void set_Total_temperature( double t ) { total_temperature = t; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_Sea_level_radius() const { return sea_level_radius; }
|
|
|
|
inline double get_Earth_position_angle() const {
|
|
|
|
return earth_position_angle;
|
|
|
|
}
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_Runway_altitude() const { return runway_altitude; }
|
Mathias Fröhlich:
I have introduced the posibility to start directly on the carrier.
With that patch you will have a --carrrier=id argument where id can either be
the pennant number configured in the nimitz scenario or the carriers name
also configured in the carriers scenario.
Additionaly you can use --parkpos=id to select different positions on the
carrier. They are also configured in the scenario file.
That includes the switch of the whole FGInterface class to make use of the
groundcache.
That means that an aircraft no longer uses the current elevation value from
the scenery class. It rather has its own local cache of the aircrafts
environment which is setup in the common_init method of FGInterface and
updated either manually by calling
FGInterface::get_groundlevel_m(lat, lon, alt_m);
or implicitly by calling the above method in the
FGInterface::_updateGeo*Position(lat, lon, alt);
methods.
A call get_groundlevel_m rebuilds the groundcache if the request is outside
the range of the cache.
Note that for the real usage of the groundcache including the correct
information about the movement of objects and the velocity information, you
still need to set up the groundcache in the usual way like YASim and JSBSim
currently does.
If you use the native interface, you will get only static objects correctly.
But for FDM's only using one single ground level for a whole step this is IMO
sufficient.
The AIManager gets a way to return the location of a object which is placed
wrt an AI Object. At the moment it only honours AICarriers for that.
That method is a static one, which loads the scenario file for that reason and
throws it away afterwards. This looked like the aprioriate way, because the
AIManager is initialized much later in flightgears bootstrap, and I did not
find an easy way to reorder that for my needs. Since this additional load is
very small and does only happen if such a relative location is required, I
think that this is ok.
Note that moving on the carrier will only work correctly for JSBSim and YASim,
but you should now be able to start and move on every not itself moving
object with any FDM.
2005-07-03 09:39:14 +00:00
|
|
|
inline double get_Runway_altitude_m() const { return SG_FEET_TO_METER * runway_altitude; }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_Runway_latitude() const { return runway_latitude; }
|
|
|
|
// inline void set_Runway_latitude( double lat ) { runway_latitude = lat; }
|
|
|
|
// inline double get_Runway_longitude() const { return runway_longitude; }
|
2000-08-14 20:12:17 +00:00
|
|
|
// inline void set_Runway_longitude( double lon ) {
|
|
|
|
// runway_longitude = lon;
|
|
|
|
// }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_Runway_heading() const { return runway_heading; }
|
|
|
|
// inline void set_Runway_heading( double h ) { runway_heading = h; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_Radius_to_rwy() const { return radius_to_rwy; }
|
|
|
|
// inline void set_Radius_to_rwy( double r ) { radius_to_rwy = r; }
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_D_cg_rwy_local_v() { return d_cg_rwy_local_v; }
|
2000-08-14 20:12:17 +00:00
|
|
|
// inline double get_D_cg_north_of_rwy() const {
|
|
|
|
// return d_cg_rwy_local_v[0];
|
|
|
|
// }
|
|
|
|
// inline double get_D_cg_east_of_rwy() const {
|
|
|
|
// return d_cg_rwy_local_v[1];
|
|
|
|
// }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_D_cg_above_rwy() const { return d_cg_rwy_local_v[2]; }
|
|
|
|
/* inline void set_CG_Rwy_Local( double north, double east, double above )
|
1998-12-03 04:25:02 +00:00
|
|
|
{
|
|
|
|
d_cg_rwy_local_v[0] = north;
|
|
|
|
d_cg_rwy_local_v[1] = east;
|
|
|
|
d_cg_rwy_local_v[2] = above;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_D_cg_rwy_rwy_v() { return d_cg_rwy_rwy_v; }
|
|
|
|
// inline double get_X_cg_rwy() const { return d_cg_rwy_rwy_v[0]; }
|
|
|
|
// inline double get_Y_cg_rwy() const { return d_cg_rwy_rwy_v[1]; }
|
|
|
|
// inline double get_H_cg_rwy() const { return d_cg_rwy_rwy_v[2]; }
|
|
|
|
/* inline void set_CG_Rwy_Rwy( double x, double y, double h )
|
1998-12-03 04:25:02 +00:00
|
|
|
{
|
|
|
|
d_cg_rwy_rwy_v[0] = x;
|
|
|
|
d_cg_rwy_rwy_v[1] = y;
|
|
|
|
d_cg_rwy_rwy_v[2] = h;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_D_pilot_rwy_local_v() { return d_pilot_rwy_local_v; }
|
|
|
|
// inline double get_D_pilot_north_of_rwy() const {
|
2000-08-14 20:12:17 +00:00
|
|
|
// return d_pilot_rwy_local_v[0];
|
|
|
|
// }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_D_pilot_east_of_rwy() const {
|
2000-08-14 20:12:17 +00:00
|
|
|
// return d_pilot_rwy_local_v[1];
|
|
|
|
// }
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double get_D_pilot_above_rwy() const {
|
2000-08-14 20:12:17 +00:00
|
|
|
// return d_pilot_rwy_local_v[2];
|
|
|
|
// }
|
1998-12-18 23:37:06 +00:00
|
|
|
/* inline void set_Pilot_Rwy_Local( double north, double east, double above )
|
1998-12-03 04:25:02 +00:00
|
|
|
{
|
|
|
|
d_pilot_rwy_local_v[0] = north;
|
|
|
|
d_pilot_rwy_local_v[1] = east;
|
|
|
|
d_pilot_rwy_local_v[2] = above;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-18 23:37:06 +00:00
|
|
|
// inline double * get_D_pilot_rwy_rwy_v() { return d_pilot_rwy_rwy_v; }
|
|
|
|
// inline double get_X_pilot_rwy() const { return d_pilot_rwy_rwy_v[0]; }
|
|
|
|
// inline double get_Y_pilot_rwy() const { return d_pilot_rwy_rwy_v[1]; }
|
|
|
|
// inline double get_H_pilot_rwy() const { return d_pilot_rwy_rwy_v[2]; }
|
|
|
|
/* inline void set_Pilot_Rwy_Rwy( double x, double y, double h )
|
1998-12-03 04:25:02 +00:00
|
|
|
{
|
|
|
|
d_pilot_rwy_rwy_v[0] = x;
|
|
|
|
d_pilot_rwy_rwy_v[1] = y;
|
|
|
|
d_pilot_rwy_rwy_v[2] = h;
|
1998-12-18 23:37:06 +00:00
|
|
|
} */
|
1997-05-29 22:39:49 +00:00
|
|
|
|
1998-12-03 01:14:58 +00:00
|
|
|
inline double get_Climb_Rate() const { return climb_rate; }
|
1999-01-19 17:52:06 +00:00
|
|
|
|
2001-01-17 02:37:12 +00:00
|
|
|
// inline SGTimeStamp get_time_stamp() const { return valid_stamp; }
|
|
|
|
// inline void stamp_time() { valid_stamp = next_stamp; next_stamp.stamp(); }
|
1999-01-19 17:52:06 +00:00
|
|
|
|
|
|
|
// Extrapolate FDM based on time_offset (in usec)
|
|
|
|
void extrapolate( int time_offset );
|
|
|
|
|
1999-04-03 04:20:01 +00:00
|
|
|
// sin/cos lat_geocentric
|
|
|
|
inline double get_sin_lat_geocentric(void) const {
|
|
|
|
return sin_lat_geocentric;
|
|
|
|
}
|
|
|
|
inline double get_cos_lat_geocentric(void) const {
|
|
|
|
return cos_lat_geocentric;
|
|
|
|
}
|
|
|
|
|
|
|
|
inline double get_sin_longitude(void) const {
|
|
|
|
return sin_longitude;
|
|
|
|
}
|
|
|
|
inline double get_cos_longitude(void) const {
|
|
|
|
return cos_longitude;
|
|
|
|
}
|
2000-08-14 20:12:17 +00:00
|
|
|
|
1999-04-03 04:20:01 +00:00
|
|
|
inline double get_sin_latitude(void) const {
|
|
|
|
return sin_latitude;
|
|
|
|
}
|
|
|
|
inline double get_cos_latitude(void) const {
|
|
|
|
return cos_latitude;
|
|
|
|
}
|
2000-09-29 03:27:21 +00:00
|
|
|
|
2001-07-16 04:34:46 +00:00
|
|
|
// Auxilliary variables
|
|
|
|
inline double get_daux( int n ) const { return daux[n]; }
|
|
|
|
inline float get_faux( int n ) const { return faux[n]; }
|
|
|
|
inline int get_iaux( int n ) const { return iaux[n]; }
|
|
|
|
|
From: "Jim Wilson" <jimw@kelcomaine.com>
This is a new improved patch for the previous tile manager fixes.
Rather than building dependencies between FGlocation or the viewer or fdm with
tilemgr what I ended up doing was linking the pieces together in the Mainloop
in main.cxx. You'll see what I mean...it's been commented fairly well. More
than likely we should move that chunk somewhere...just not sure where yet.
The changes seem clean now. As I get more ideas there could be some further
improvement in organizing the update in tilemgr. You'll note that I left an
override in there for the tilemgr::update() function to preserve earlier
functionality if someone needs it (e.g. usage independent of an fdm or
viewer), not to mention there are a few places in flightgear that call it
directly that have not been changed to the new interface (and may not need to be).
The code has been optimized to avoid duplicate traversals and seems to run
generally quite well. Note that there can be a short delay reloading tiles
that have been dropped from static views. We could call the tile scheduler on
a view switch, but it's not a big deal and at the moment I'd like to get this
in so people can try it and comment on it as it is.
Everything has been resycned with CVS tonight and I've included the
description submitted earlier (below).
Best,
Jim
Changes synced with CVS approx 20:30EDT 2002-05-09 (after this evenings updates).
Files:
http://www.spiderbark.com/fgfs/viewer-update-20020516.tar.gz
or
http://www.spiderbark.com/fgfs/viewer-update-20020516.diffs.gz
Description:
In a nutshell, these patches begin to take what was one value for ground
elevation and calculate ground elevation values seperately for the FDM and the
viewer (eye position). Several outstanding view related bugs have been fixed.
With the introduction of the new viewer code a lot of that Flight Gear code
broke related to use of a global variable called "scenery.cur_elev".
Therefore the ground_elevation and other associated items (like the current
tile bucket) is maintained per FDM instance and per View. Each of these has a
"point" or location that can be identified. See changes to FGLocation class
and main.cxx.
Most of the problems related to the new viewer in terms of sky, ground and
runway lights, and tower views are fixed.
There are four minor problems remaining. 1) The sun/moon spins when you pan
the "lookat" tower view only (view #3). 2) Under stress (esp. magic carpet
full speed with max visibility), there is a memory leak in the tile caching
that was not introduced with these changes. 3) I have not tested these
changes or made corrections to the ADA or External FDM interfaces. 4) The
change view function doesn't call the time/light update (not a problem unless
a tower is very far away).
Details:
FDM/flight.cxx, flight.hxx - FGInterface ties to FGAircraftModel so that it's
location data can be accessed for runway (ground elevation under aircraft)
elevation.
FDM/larsim.cxx, larcsim.hxx - gets runway elevation from FGInterface now.
Commented out function that is causing a namespace conflict, hasn't been
called with recent code anyway.
FDM/JSBSim/JSBSim.cxx, YASim/YASim.cxx - gets runway elevation from
FGInterface now.
Scenery/newcache.cxx, newcache.hxx - changed caching scheme to time based
(oldest tiles discard).
Scenery/tileentry.cxx, tileentry.hxx - added place to record time, changed
rendering to reference viewer altitude in order to fix a problem with ground
and runway lights.
Scenery/tilemgr.cxx, tilemgr.hxx - Modified update() to accept values for
multiple locations. Refresh function added in order to periodically make
the tiles current for a non-moving view (like a tower).
Main/fg_init.cxx - register event for making tiles current in a non-moving
view (like a tower).
Main/location.hxx - added support for current ground elevation data.
Main/main.cxx - added second tilemgr call for fdm, fixed places where viewer
position data was required for correct sky rendering.
Main/options.cxx - fixed segfault reported by Curtis when using --view-offset
command line parameter.
Main/viewer.cxx, viewer.hxx - removed fudging of view position. Fixed numerous
bugs that were causing eye and target values to get mixed up.
2002-05-17 17:25:28 +00:00
|
|
|
// Note that currently this is the "same" value runway altitude...
|
|
|
|
inline double get_ground_elev_ft() const { return runway_altitude; }
|
|
|
|
|
1998-02-07 15:29:31 +00:00
|
|
|
|
2004-11-22 10:10:33 +00:00
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
// Ground handling routines
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
1999-09-09 00:16:28 +00:00
|
|
|
|
2004-11-22 10:10:33 +00:00
|
|
|
enum GroundType {
|
|
|
|
Unknown = 0, //??
|
|
|
|
Solid, // Whatever we will roll on with infinite load factor.
|
|
|
|
Forest, // Ground unsuitable for taxiing.
|
|
|
|
Water, // For the beaver ...
|
|
|
|
Catapult, // Carrier cats.
|
|
|
|
Wire // Carrier wires.
|
|
|
|
};
|
1999-09-09 00:16:28 +00:00
|
|
|
|
2004-11-22 10:10:33 +00:00
|
|
|
// Prepare the ground cache for the wgs84 position pt_*.
|
|
|
|
// That is take all vertices in the ball with radius rad around the
|
|
|
|
// position given by the pt_* and store them in a local scene graph.
|
|
|
|
bool prepare_ground_cache_m(double ref_time, const double pt[3],
|
|
|
|
double rad);
|
|
|
|
bool prepare_ground_cache_ft(double ref_time, const double pt[3],
|
|
|
|
double rad);
|
|
|
|
|
|
|
|
|
|
|
|
// Returns true if the cache is valid.
|
|
|
|
// Also the reference time, point and radius values where the cache
|
|
|
|
// is valid for are returned.
|
|
|
|
bool is_valid_m(double *ref_time, double pt[3], double *rad);
|
|
|
|
bool is_valid_ft(double *ref_time, double pt[3], double *rad);
|
|
|
|
|
|
|
|
// Return the nearest catapult to the given point
|
|
|
|
// pt in wgs84 coordinates.
|
|
|
|
double get_cat_m(double t, const double pt[3],
|
|
|
|
double end[2][3], double vel[2][3]);
|
|
|
|
double get_cat_ft(double t, const double pt[3],
|
|
|
|
double end[2][3], double vel[2][3]);
|
|
|
|
|
1997-05-16 15:58:23 +00:00
|
|
|
|
2004-11-22 10:10:33 +00:00
|
|
|
// Return the altitude above ground below the wgs84 point pt
|
|
|
|
// Search for the nearest triangle to pt.
|
|
|
|
// Return ground properties like the ground type, the maximum load
|
|
|
|
// this kind kind of ground can carry, the friction factor between
|
|
|
|
// 0 and 1 which can be used to model lower friction with wet runways
|
|
|
|
// and finally the altitude above ground.
|
|
|
|
bool get_agl_m(double t, const double pt[3],
|
|
|
|
double contact[3], double normal[3], double vel[3],
|
|
|
|
int *type, double *loadCapacity,
|
|
|
|
double *frictionFactor, double *agl);
|
|
|
|
bool get_agl_ft(double t, const double pt[3],
|
|
|
|
double contact[3], double normal[3], double vel[3],
|
|
|
|
int *type, double *loadCapacity,
|
|
|
|
double *frictionFactor, double *agl);
|
Mathias Fröhlich:
I have introduced the posibility to start directly on the carrier.
With that patch you will have a --carrrier=id argument where id can either be
the pennant number configured in the nimitz scenario or the carriers name
also configured in the carriers scenario.
Additionaly you can use --parkpos=id to select different positions on the
carrier. They are also configured in the scenario file.
That includes the switch of the whole FGInterface class to make use of the
groundcache.
That means that an aircraft no longer uses the current elevation value from
the scenery class. It rather has its own local cache of the aircrafts
environment which is setup in the common_init method of FGInterface and
updated either manually by calling
FGInterface::get_groundlevel_m(lat, lon, alt_m);
or implicitly by calling the above method in the
FGInterface::_updateGeo*Position(lat, lon, alt);
methods.
A call get_groundlevel_m rebuilds the groundcache if the request is outside
the range of the cache.
Note that for the real usage of the groundcache including the correct
information about the movement of objects and the velocity information, you
still need to set up the groundcache in the usual way like YASim and JSBSim
currently does.
If you use the native interface, you will get only static objects correctly.
But for FDM's only using one single ground level for a whole step this is IMO
sufficient.
The AIManager gets a way to return the location of a object which is placed
wrt an AI Object. At the moment it only honours AICarriers for that.
That method is a static one, which loads the scenario file for that reason and
throws it away afterwards. This looked like the aprioriate way, because the
AIManager is initialized much later in flightgears bootstrap, and I did not
find an easy way to reorder that for my needs. Since this additional load is
very small and does only happen if such a relative location is required, I
think that this is ok.
Note that moving on the carrier will only work correctly for JSBSim and YASim,
but you should now be able to start and move on every not itself moving
object with any FDM.
2005-07-03 09:39:14 +00:00
|
|
|
bool get_agl_m(double t, const double pt[3], double max_altoff,
|
|
|
|
double contact[3], double normal[3], double vel[3],
|
|
|
|
int *type, double *loadCapacity,
|
|
|
|
double *frictionFactor, double *agl);
|
|
|
|
bool get_agl_ft(double t, const double pt[3], double max_altoff,
|
|
|
|
double contact[3], double normal[3], double vel[3],
|
|
|
|
int *type, double *loadCapacity,
|
|
|
|
double *frictionFactor, double *agl);
|
|
|
|
double get_groundlevel_m(double lat, double lon, double alt);
|
2004-11-22 10:10:33 +00:00
|
|
|
|
|
|
|
|
|
|
|
// Return 1 if the hook intersects with a wire.
|
|
|
|
// That test is done by checking if the quad spanned by the points pt*
|
|
|
|
// intersects with the line representing the wire.
|
|
|
|
// If the wire is caught, the cache will trace this wires endpoints until
|
|
|
|
// the FDM calls release_wire().
|
|
|
|
bool caught_wire_m(double t, const double pt[4][3]);
|
|
|
|
bool caught_wire_ft(double t, const double pt[4][3]);
|
|
|
|
|
|
|
|
// Return the location and speed of the wire endpoints.
|
|
|
|
bool get_wire_ends_m(double t, double end[2][3], double vel[2][3]);
|
|
|
|
bool get_wire_ends_ft(double t, double end[2][3], double vel[2][3]);
|
1997-05-16 15:58:23 +00:00
|
|
|
|
2004-11-22 10:10:33 +00:00
|
|
|
// Tell the cache code that it does no longer need to care for
|
|
|
|
// the wire end position.
|
|
|
|
void release_wire(void);
|
|
|
|
};
|
1997-05-29 02:32:25 +00:00
|
|
|
|
2004-11-22 10:10:33 +00:00
|
|
|
extern FGInterface * cur_fdm_state;
|
1999-01-20 13:42:22 +00:00
|
|
|
|
2001-04-05 15:39:37 +00:00
|
|
|
// Toggle data logging on/off
|
|
|
|
void fgToggleFDMdataLogging(void);
|
|
|
|
|
1998-04-21 16:59:33 +00:00
|
|
|
|
1998-12-03 04:25:02 +00:00
|
|
|
#endif // _FLIGHT_HXX
|