1
0
Fork 0

Revamped the "External" flight model.

This commit is contained in:
curt 1999-11-19 02:12:46 +00:00
parent 1fd9270267
commit 5fdede6f75
4 changed files with 94 additions and 106 deletions

49
src/FDM/External.cxx Normal file
View file

@ -0,0 +1,49 @@
// External.cxx -- interface to the "External"-ly driven flight model
//
// Written by Curtis Olson, started November 1999.
//
// Copyright (C) 1999 Curtis L. Olson - curt@flightgear.org
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
// published by the Free Software Foundation; either version 2 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// $Id$
#include "External.hxx"
// Initialize the External flight model, dt is the time increment
// for each subsequent iteration through the EOM
int FGExternal::init( double dt ) {
// cout << "FGExternal::init()" << endl;
// set valid time for this record
stamp_time();
return 1;
}
// Run an iteration of the EOM. This is essentially a NOP here
// because these values are getting filled in elsewhere based on
// external input.
int FGExternal::update( int multiloop ) {
// cout << "FGExternal::update()" << endl;
// double time_step = (1.0 / current_options.get_model_hz()) * multiloop;
return 1;
}

42
src/FDM/External.hxx Normal file
View file

@ -0,0 +1,42 @@
// External.hxx -- interface to the "External"-ly driven flight model
//
// Written by Curtis Olson, started November 1999.
//
// Copyright (C) 1999 Curtis L. Olson - curt@flightgear.org
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
// published by the Free Software Foundation; either version 2 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// $Id$
#ifndef _EXTERNAL_HXX
#define _EXTERNAL_HXX
#include "flight.hxx"
class FGExternal: public FGInterface {
public:
// reset flight params to a specific position
int init( double dt );
// update position based on inputs, positions, velocities, etc.
int update( int multiloop );
};
#endif // _EXTERNAL_HXX

View file

@ -1,9 +1,10 @@
SUBDIRS = Balloon External JSBsim LaRCsim SUBDIRS = Balloon JSBsim LaRCsim
noinst_LIBRARIES = libFlight.a noinst_LIBRARIES = libFlight.a
libFlight_a_SOURCES = \ libFlight_a_SOURCES = \
Balloon.cxx Balloon.h \ Balloon.cxx Balloon.h \
External.cxx External.hxx \
flight.cxx flight.hxx \ flight.cxx flight.hxx \
JSBsim.cxx JSBsim.hxx \ JSBsim.cxx JSBsim.hxx \
LaRCsim.cxx LaRCsim.hxx \ LaRCsim.cxx LaRCsim.hxx \

View file

@ -24,13 +24,13 @@
#include <stdio.h> #include <stdio.h>
#include <Debug/logstream.hxx> #include <Debug/logstream.hxx>
#include <FDM/External/external.hxx>
#include <FDM/LaRCsim/ls_interface.h> #include <FDM/LaRCsim/ls_interface.h>
#include <Include/fg_constants.h> #include <Include/fg_constants.h>
#include <Main/options.hxx> #include <Main/options.hxx>
#include <Math/fg_geodesy.hxx> #include <Math/fg_geodesy.hxx>
#include <Time/timestamp.hxx> #include <Time/timestamp.hxx>
#include "External.hxx"
#include "flight.hxx" #include "flight.hxx"
#include "JSBsim.hxx" #include "JSBsim.hxx"
#include "LaRCsim.hxx" #include "LaRCsim.hxx"
@ -89,110 +89,6 @@ void FGInterface::extrapolate( int time_offset ) {
} }
#if 0
// Initialize the flight model parameters
int fgFDMInit(int model, FGInterface& f, double dt) {
double save_alt = 0.0;
FG_LOG( FG_FLIGHT ,FG_INFO, "Initializing flight model" );
base_fdm_state = f;
if ( model == FGInterface::FG_SLEW ) {
// fgSlewInit(dt);
#ifndef __MWERKS__ // -dw- 04/22/99 JSB sim not ported yet
} else if ( model == FGInterface::FG_JSBSIM ) {
fgJSBsimInit(dt, f);
fgJSBsim_2_FGInterface(base_fdm_state);
#endif
} else if ( model == FGInterface::FG_LARCSIM ) {
// lets try to avoid really screwing up the LaRCsim model
if ( base_fdm_state.get_Altitude() < -9000.0 ) {
save_alt = base_fdm_state.get_Altitude();
base_fdm_state.set_Altitude( 0.0 );
}
// translate FG to LaRCsim structure
FGInterface_2_LaRCsim(base_fdm_state);
// initialize LaRCsim
fgLaRCsimInit(dt);
FG_LOG( FG_FLIGHT, FG_INFO, "FG pos = " <<
base_fdm_state.get_Latitude() );
// translate LaRCsim back to FG structure
fgLaRCsim_2_FGInterface(base_fdm_state);
// but lets restore our original bogus altitude when we are done
if ( save_alt < -9000.0 ) {
base_fdm_state.set_Altitude( save_alt );
}
} else if ( model == FGInterface::FG_EXTERNAL ) {
fgExternalInit(base_fdm_state);
} else {
FG_LOG( FG_FLIGHT, FG_WARN,
"Unimplemented flight model == " << model );
}
// set valid time for this record
base_fdm_state.stamp_time();
f = base_fdm_state;
return 1;
}
#endif
#if 0
// Run multiloop iterations of the flight model
int fgFDMUpdate(int model, FGInterface& f, int multiloop, int time_offset) {
double time_step, start_elev, end_elev;
// printf("Altitude = %.2f\n", FG_Altitude * 0.3048);
// set valid time for this record
base_fdm_state.stamp_time();
time_step = (1.0 / current_options.get_model_hz()) * multiloop;
start_elev = base_fdm_state.get_Altitude();
if ( model == FGInterface::FG_SLEW ) {
// fgSlewUpdate(f, multiloop);
#ifndef __MWERKS__ // -dw- 04/22/99 JSB sim not ported yet
} else if ( model == FGInterface::FG_JSBSIM ) {
fgJSBsimUpdate(base_fdm_state, multiloop);
f = base_fdm_state;
#endif
} else if ( model == FGInterface::FG_LARCSIM ) {
fgLaRCsimUpdate(base_fdm_state, multiloop);
// extrapolate position based on actual time
// f = extrapolate_fdm( base_fdm_state, time_offset );
f = base_fdm_state;
} else if ( model == FGInterface::FG_EXTERNAL ) {
// fgExternalUpdate(f, multiloop);
FGTimeStamp current;
current.stamp();
f = base_fdm_state;
f.extrapolate( current - base_fdm_state.get_time_stamp() );
} else {
FG_LOG( FG_FLIGHT, FG_WARN,
"Unimplemented flight model == " << model );
}
end_elev = base_fdm_state.get_Altitude();
if ( time_step > 0.0 ) {
// feet per second
base_fdm_state.set_Climb_Rate( (end_elev - start_elev) / time_step );
}
return 1;
}
#endif
// Set the altitude (force) // Set the altitude (force)
void fgFDMForceAltitude(int model, double alt_meters) { void fgFDMForceAltitude(int model, double alt_meters) {
double sea_level_radius_meters; double sea_level_radius_meters;