Latest JSBSim changes.
This commit is contained in:
parent
5c3f4e999d
commit
fbccfab5ff
8 changed files with 42 additions and 30 deletions
|
@ -71,6 +71,7 @@ INCLUDES
|
||||||
#include "FGAuxiliary.h"
|
#include "FGAuxiliary.h"
|
||||||
#include "FGOutput.h"
|
#include "FGOutput.h"
|
||||||
#include "FGConfigFile.h"
|
#include "FGConfigFile.h"
|
||||||
|
#include "FGInitialCondition.h"
|
||||||
|
|
||||||
static const char *IdSrc = "$Id$";
|
static const char *IdSrc = "$Id$";
|
||||||
static const char *IdHdr = ID_FDMEXEC;
|
static const char *IdHdr = ID_FDMEXEC;
|
||||||
|
@ -403,8 +404,8 @@ bool FGFDMExec::LoadScript(string script)
|
||||||
string token="";
|
string token="";
|
||||||
string aircraft="";
|
string aircraft="";
|
||||||
string initialize="";
|
string initialize="";
|
||||||
bool result=false;
|
bool result = false;
|
||||||
double dt=0.0;
|
double dt = 0.0;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
struct condition *newCondition;
|
struct condition *newCondition;
|
||||||
|
|
||||||
|
@ -507,6 +508,12 @@ bool FGFDMExec::LoadScript(string script)
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FGInitialCondition IC(this);
|
||||||
|
if ( ! IC.Load("aircraft", aircraft, initialize)) {
|
||||||
|
cerr << "Initialization unsuccessful" << endl;
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,7 +64,7 @@ FGLGear::FGLGear(FGConfigFile* AC_cfg, FGFDMExec* fdmex) : Exec(fdmex)
|
||||||
*AC_cfg >> tmp >> name >> vXYZ(1) >> vXYZ(2) >> vXYZ(3)
|
*AC_cfg >> tmp >> name >> vXYZ(1) >> vXYZ(2) >> vXYZ(3)
|
||||||
>> kSpring >> bDamp>> dynamicFCoeff >> staticFCoeff
|
>> kSpring >> bDamp>> dynamicFCoeff >> staticFCoeff
|
||||||
>> rollingFCoeff >> sSteerType >> sBrakeGroup
|
>> rollingFCoeff >> sSteerType >> sBrakeGroup
|
||||||
>> maxSteerAngle >> Retractable;
|
>> maxSteerAngle >> sRetractable;
|
||||||
|
|
||||||
if (sBrakeGroup == "LEFT" ) eBrakeGrp = bgLeft;
|
if (sBrakeGroup == "LEFT" ) eBrakeGrp = bgLeft;
|
||||||
else if (sBrakeGroup == "RIGHT" ) eBrakeGrp = bgRight;
|
else if (sBrakeGroup == "RIGHT" ) eBrakeGrp = bgRight;
|
||||||
|
@ -85,13 +85,14 @@ FGLGear::FGLGear(FGConfigFile* AC_cfg, FGFDMExec* fdmex) : Exec(fdmex)
|
||||||
<< sSteerType << " is undefined." << endl;
|
<< sSteerType << " is undefined." << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Retractable == "RETRACT" ) {
|
if ( sRetractable == "RETRACT" ) {
|
||||||
isRetractable=true;
|
isRetractable = true;
|
||||||
} else {
|
} else {
|
||||||
isRetractable=false;
|
isRetractable = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
GearUp=false; GearDown=true;
|
GearUp = false;
|
||||||
|
GearDown = true;
|
||||||
|
|
||||||
// Add some AI here to determine if gear is located properly according to its
|
// Add some AI here to determine if gear is located properly according to its
|
||||||
// brake group type ??
|
// brake group type ??
|
||||||
|
@ -159,6 +160,7 @@ FGLGear::FGLGear(const FGLGear& lgear)
|
||||||
Reported = lgear.Reported;
|
Reported = lgear.Reported;
|
||||||
name = lgear.name;
|
name = lgear.name;
|
||||||
sSteerType = lgear.sSteerType;
|
sSteerType = lgear.sSteerType;
|
||||||
|
sRetractable = lgear.sRetractable;
|
||||||
eSteerType = lgear.eSteerType;
|
eSteerType = lgear.eSteerType;
|
||||||
sBrakeGroup = lgear.sBrakeGroup;
|
sBrakeGroup = lgear.sBrakeGroup;
|
||||||
eBrakeGrp = lgear.eBrakeGrp;
|
eBrakeGrp = lgear.eBrakeGrp;
|
||||||
|
@ -166,8 +168,6 @@ FGLGear::FGLGear(const FGLGear& lgear)
|
||||||
isRetractable = lgear.isRetractable;
|
isRetractable = lgear.isRetractable;
|
||||||
GearUp = lgear.GearUp;
|
GearUp = lgear.GearUp;
|
||||||
GearDown = lgear.GearDown;
|
GearDown = lgear.GearDown;
|
||||||
|
|
||||||
Debug(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
@ -484,7 +484,7 @@ void FGLGear::Debug(int from)
|
||||||
cout << " Steering Type: " << sSteerType << endl;
|
cout << " Steering Type: " << sSteerType << endl;
|
||||||
cout << " Grouping: " << sBrakeGroup << endl;
|
cout << " Grouping: " << sBrakeGroup << endl;
|
||||||
cout << " Max Steer Angle: " << maxSteerAngle << endl;
|
cout << " Max Steer Angle: " << maxSteerAngle << endl;
|
||||||
cout << " Retractable: " << Retractable << endl;
|
cout << " Retractable: " << sRetractable << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (debug_lvl & 2 ) { // Instantiation/Destruction notification
|
if (debug_lvl & 2 ) { // Instantiation/Destruction notification
|
||||||
|
|
|
@ -268,7 +268,7 @@ private:
|
||||||
string name;
|
string name;
|
||||||
string sSteerType;
|
string sSteerType;
|
||||||
string sBrakeGroup;
|
string sBrakeGroup;
|
||||||
string Retractable;
|
string sRetractable;
|
||||||
|
|
||||||
BrakeGroup eBrakeGrp;
|
BrakeGroup eBrakeGrp;
|
||||||
SteerType eSteerType;
|
SteerType eSteerType;
|
||||||
|
|
|
@ -157,7 +157,8 @@ void FGOutput::DelimitedOutput(string fname)
|
||||||
}
|
}
|
||||||
if (SubSystems & ssRates) {
|
if (SubSystems & ssRates) {
|
||||||
outstream << ", ";
|
outstream << ", ";
|
||||||
outstream << "P, Q, R";
|
outstream << "P, Q, R, ";
|
||||||
|
outstream << "Pdot, Qdot, Rdot";
|
||||||
}
|
}
|
||||||
if (SubSystems & ssVelocities) {
|
if (SubSystems & ssVelocities) {
|
||||||
outstream << ", ";
|
outstream << ", ";
|
||||||
|
@ -179,7 +180,8 @@ void FGOutput::DelimitedOutput(string fname)
|
||||||
}
|
}
|
||||||
if (SubSystems & ssAtmosphere) {
|
if (SubSystems & ssAtmosphere) {
|
||||||
outstream << ", ";
|
outstream << ", ";
|
||||||
outstream << "Rho";
|
outstream << "Rho, ";
|
||||||
|
outstream << "NWind, EWind, DWind";
|
||||||
}
|
}
|
||||||
if (SubSystems & ssMassProps) {
|
if (SubSystems & ssMassProps) {
|
||||||
outstream << ", ";
|
outstream << ", ";
|
||||||
|
@ -232,7 +234,8 @@ void FGOutput::DelimitedOutput(string fname)
|
||||||
}
|
}
|
||||||
if (SubSystems & ssRates) {
|
if (SubSystems & ssRates) {
|
||||||
outstream << ", ";
|
outstream << ", ";
|
||||||
outstream << Rotation->GetPQR();
|
outstream << Rotation->GetPQR() << ", ";
|
||||||
|
outstream << Rotation->GetPQRdot();
|
||||||
}
|
}
|
||||||
if (SubSystems & ssVelocities) {
|
if (SubSystems & ssVelocities) {
|
||||||
outstream << ", ";
|
outstream << ", ";
|
||||||
|
@ -254,7 +257,8 @@ void FGOutput::DelimitedOutput(string fname)
|
||||||
}
|
}
|
||||||
if (SubSystems & ssAtmosphere) {
|
if (SubSystems & ssAtmosphere) {
|
||||||
outstream << ", ";
|
outstream << ", ";
|
||||||
outstream << Atmosphere->GetDensity();
|
outstream << Atmosphere->GetDensity() << ", ";
|
||||||
|
outstream << Atmosphere->GetWindNED();
|
||||||
}
|
}
|
||||||
if (SubSystems & ssMassProps) {
|
if (SubSystems & ssMassProps) {
|
||||||
outstream << ", ";
|
outstream << ", ";
|
||||||
|
|
|
@ -102,6 +102,8 @@ FGPosition::FGPosition(FGFDMExec* fdmex) : FGModel(fdmex)
|
||||||
lastLongitudeDot = lastLatitudeDot = lastRadiusDot = 0.0;
|
lastLongitudeDot = lastLatitudeDot = lastRadiusDot = 0.0;
|
||||||
Longitude = Latitude = 0.0;
|
Longitude = Latitude = 0.0;
|
||||||
gamma = Vt = Vground = 0.0;
|
gamma = Vt = Vground = 0.0;
|
||||||
|
hoverbmac = hoverbcg = 0.0;
|
||||||
|
psigt = 0.0;
|
||||||
|
|
||||||
Debug(0);
|
Debug(0);
|
||||||
}
|
}
|
||||||
|
@ -148,17 +150,15 @@ bool FGPosition::Run(void) {
|
||||||
|
|
||||||
Vground = sqrt( vVel(eNorth)*vVel(eNorth) + vVel(eEast)*vVel(eEast) );
|
Vground = sqrt( vVel(eNorth)*vVel(eNorth) + vVel(eEast)*vVel(eEast) );
|
||||||
psigt = atan2(vVel(eEast), vVel(eNorth));
|
psigt = atan2(vVel(eEast), vVel(eNorth));
|
||||||
if(psigt < 0.0)
|
if (psigt < 0.0)
|
||||||
psigt += 2*M_PI;
|
psigt += 2*M_PI;
|
||||||
|
|
||||||
invMass = 1.0 / MassBalance->GetMass();
|
|
||||||
Radius = h + SeaLevelRadius;
|
Radius = h + SeaLevelRadius;
|
||||||
invRadius = 1.0 / Radius;
|
|
||||||
|
|
||||||
cosLat = cos(Latitude);
|
cosLat = cos(Latitude);
|
||||||
if (cosLat != 0) LongitudeDot = vVel(eEast) / (Radius * cosLat);
|
if (cosLat != 0) LongitudeDot = vVel(eEast) / (Radius * cosLat);
|
||||||
|
|
||||||
LatitudeDot = vVel(eNorth) * invRadius;
|
LatitudeDot = vVel(eNorth) / Radius;
|
||||||
RadiusDot = -vVel(eDown);
|
RadiusDot = -vVel(eDown);
|
||||||
|
|
||||||
Longitude += 0.5*dt*rate*(LongitudeDot + lastLongitudeDot);
|
Longitude += 0.5*dt*rate*(LongitudeDot + lastLongitudeDot);
|
||||||
|
|
|
@ -123,7 +123,6 @@ private:
|
||||||
FGColumnVector3 vVelDot;
|
FGColumnVector3 vVelDot;
|
||||||
FGColumnVector3 vRunwayNormal;
|
FGColumnVector3 vRunwayNormal;
|
||||||
|
|
||||||
double Vee, invMass, invRadius;
|
|
||||||
double Radius, h;
|
double Radius, h;
|
||||||
double LatitudeDot, LongitudeDot, RadiusDot;
|
double LatitudeDot, LongitudeDot, RadiusDot;
|
||||||
double lastLatitudeDot, lastLongitudeDot, lastRadiusDot;
|
double lastLatitudeDot, lastLongitudeDot, lastRadiusDot;
|
||||||
|
|
|
@ -477,10 +477,12 @@ bool FGState::Reset(string path, string acname, string fname)
|
||||||
cerr << "The reset file " << resetDef
|
cerr << "The reset file " << resetDef
|
||||||
<< " does not appear to be a reset file" << endl;
|
<< " does not appear to be a reset file" << endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
} else {
|
||||||
|
|
||||||
resetfile.GetNextConfigLine();
|
resetfile.GetNextConfigLine();
|
||||||
resetfile >> token;
|
resetfile >> token;
|
||||||
|
cout << "Resetting using: " << token << endl << endl;
|
||||||
|
}
|
||||||
|
|
||||||
while (token != string("/initialize") && token != string("EOF")) {
|
while (token != string("/initialize") && token != string("EOF")) {
|
||||||
if (token == "UBODY") resetfile >> U;
|
if (token == "UBODY") resetfile >> U;
|
||||||
if (token == "VBODY") resetfile >> V;
|
if (token == "VBODY") resetfile >> V;
|
||||||
|
|
Loading…
Reference in a new issue