#include <FDM/JSBSim/FGInitialCondition.h>
#include <FDM/JSBSim/FGTrim.h>
#include <FDM/JSBSim/FGAtmosphere.h>
-
+#include <FDM/JSBSim/FGMassBalance.h>
+#include <FDM/JSBSim/FGAerodynamics.h>
#include "JSBSim.hxx"
/******************************************************************************/
fdmex=new FGFDMExec;
- State = fdmex->GetState();
- Atmosphere = fdmex->GetAtmosphere();
- FCS = fdmex->GetFCS();
- Propulsion = fdmex->GetPropulsion();
- Aircraft = fdmex->GetAircraft();
- Translation = fdmex->GetTranslation();
- Rotation = fdmex->GetRotation();
- Position = fdmex->GetPosition();
- Auxiliary = fdmex->GetAuxiliary();
-
+ State = fdmex->GetState();
+ Atmosphere = fdmex->GetAtmosphere();
+ FCS = fdmex->GetFCS();
+ MassBalance = fdmex->GetMassBalance();
+ Propulsion = fdmex->GetPropulsion();
+ Aircraft = fdmex->GetAircraft();
+ Translation = fdmex->GetTranslation();
+ Rotation = fdmex->GetRotation();
+ Position = fdmex->GetPosition();
+ Auxiliary = fdmex->GetAuxiliary();
+ Aerodynamics = fdmex->GetAerodynamics();
+
+ Atmosphere->UseInternal();
+
fgic=new FGInitialCondition(fdmex);
needTrim=true;
fgSetDouble("/fdm/trim/aileron", FCS->GetDaCmd());
fgSetDouble("/fdm/trim/rudder", FCS->GetDrCmd());
- trimmed = fgGetValue("/fdm/trim/trimmed",true);
+ startup_trim = fgGetNode("/sim/startup/trim", true);
+
+ trimmed = fgGetNode("/fdm/trim/trimmed", true);
trimmed->setBoolValue(false);
+ pitch_trim = fgGetNode("/fdm/trim/pitch-trim", true );
+ throttle_trim = fgGetNode("/fdm/trim/throttle", true );
+ aileron_trim = fgGetNode("/fdm/trim/aileron", true );
+ rudder_trim = fgGetNode("/fdm/trim/rudder", true );
}
/******************************************************************************/
// each subsequent iteration through the EOM
void FGJSBsim::init() {
- // Explicitly call the superclass's
- // init method first.
- FGInterface::init();
-
- bool result;
-
+
SG_LOG( SG_FLIGHT, SG_INFO, "Starting and initializing JSBsim" );
-
- Atmosphere->UseInternal();
+
+ // Explicitly call the superclass's
+ // init method first.
+ FGInterface::init();
SG_LOG( SG_FLIGHT, SG_INFO, " Initializing JSBSim with:" );
trimmed->setBoolValue(false);
- if (needTrim && fgGetBool("/sim/startup/trim")) {
+ if ( needTrim && startup_trim->getBoolValue() ) {
- //fgic->SetSeaLevelRadiusFtIC( get_Sea_level_radius() );
- //fgic->SetTerrainAltitudeFtIC( scenery.cur_elev * SG_METER_TO_FEET );
+ //fgic->SetSeaLevelRadiusFtIC( get_Sea_level_radius() );
+ //fgic->SetTerrainAltitudeFtIC( scenery.cur_elev * SG_METER_TO_FEET );
- FGTrim *fgtrim;
- if(fgic->GetVcalibratedKtsIC() < 10 ) {
- fgic->SetVcalibratedKtsIC(0.0);
- fgtrim=new FGTrim(fdmex,fgic,tGround);
- } else {
- fgtrim=new FGTrim(fdmex,fgic,tLongitudinal);
- }
- if(!fgtrim->DoTrim()) {
- fgtrim->Report();
- fgtrim->TrimStats();
- } else {
- trimmed->setBoolValue(true);
- }
- fgtrim->ReportState();
- delete fgtrim;
+ FGTrim *fgtrim;
+ if(fgic->GetVcalibratedKtsIC() < 10 ) {
+ fgic->SetVcalibratedKtsIC(0.0);
+ fgtrim=new FGTrim(fdmex,fgic,tGround);
+ } else {
+ fgtrim=new FGTrim(fdmex,fgic,tLongitudinal);
+ }
+ if(!fgtrim->DoTrim()) {
+ fgtrim->Report();
+ fgtrim->TrimStats();
+ } else {
+ trimmed->setBoolValue(true);
+ }
+ fgtrim->ReportState();
+ delete fgtrim;
- needTrim=false;
+ needTrim=false;
- fgSetDouble("/fdm/trim/pitch-trim", FCS->GetPitchTrimCmd());
- fgSetDouble("/fdm/trim/throttle", FCS->GetThrottleCmd(0));
- fgSetDouble("/fdm/trim/aileron", FCS->GetDaCmd());
- fgSetDouble("/fdm/trim/rudder", FCS->GetDrCmd());
+ pitch_trim->setDoubleValue( FCS->GetPitchTrimCmd() );
+ throttle_trim->setDoubleValue( FCS->GetThrottleCmd(0) );
+ aileron_trim->setDoubleValue( FCS->GetDaCmd() );
+ rudder_trim->setDoubleValue( FCS->GetDrCmd() );
- controls.set_elevator_trim(FCS->GetPitchTrimCmd());
- controls.set_elevator(FCS->GetDeCmd());
- controls.set_throttle(FGControls::ALL_ENGINES,
- FCS->GetThrottleCmd(0));
+ controls.set_elevator_trim(FCS->GetPitchTrimCmd());
+ controls.set_elevator(FCS->GetDeCmd());
+ controls.set_throttle(FGControls::ALL_ENGINES,
+ FCS->GetThrottleCmd(0));
- controls.set_aileron(FCS->GetDaCmd());
- controls.set_rudder( FCS->GetDrCmd());
+ controls.set_aileron(FCS->GetDaCmd());
+ controls.set_rudder( FCS->GetDrCmd());
- SG_LOG( SG_FLIGHT, SG_INFO, " Trim complete" );
- }
+ SG_LOG( SG_FLIGHT, SG_INFO, " Trim complete" );
+ }
for( i=0; i<get_num_engines(); i++ ) {
get_engine(i)->set_RPM( Propulsion->GetThruster(i)->GetRPM() );
bool FGJSBsim::copy_from_JSBsim() {
unsigned int i, j;
- _set_Inertias( Aircraft->GetMass(),
- Aircraft->GetIxx(),
- Aircraft->GetIyy(),
- Aircraft->GetIzz(),
- Aircraft->GetIxz() );
+ _set_Inertias( MassBalance->GetMass(),
+ MassBalance->GetIxx(),
+ MassBalance->GetIyy(),
+ MassBalance->GetIzz(),
+ MassBalance->GetIxz() );
- _set_CG_Position( Aircraft->GetXYZcg(1),
- Aircraft->GetXYZcg(2),
- Aircraft->GetXYZcg(3) );
+ _set_CG_Position( MassBalance->GetXYZcg(1),
+ MassBalance->GetXYZcg(2),
+ MassBalance->GetXYZcg(3) );
_set_Accels_Body( Translation->GetUVWdot(1),
Translation->GetUVWdot(2),
// Auxiliary->GetNpilot(2),
// Auxiliary->GetNpilot(3) );
- _set_Nlf( Aircraft->GetNlf() );
+ _set_Nlf( Aerodynamics->GetNlf() );
// Velocities