diff --git a/src/FDM/JSBSim.cxx b/src/FDM/JSBSim.cxx index 332e6c97a..b869f3e74 100644 --- a/src/FDM/JSBSim.cxx +++ b/src/FDM/JSBSim.cxx @@ -317,11 +317,11 @@ bool FGJSBsim::copy_to_JSBsim() { // copy control positions into the JSBsim structure FCS->SetDaCmd( globals->get_controls()->get_aileron()); - FCS->SetRollTrimCmd(globals->get_controls()->get_aileron_trim()); + FCS->SetRollTrimCmd( globals->get_controls()->get_aileron_trim() ); FCS->SetDeCmd( globals->get_controls()->get_elevator()); - FCS->SetPitchTrimCmd(globals->get_controls()->get_elevator_trim()); - FCS->SetDrCmd( -globals->get_controls()->get_rudder()); - FCS->SetYawTrimCmd(globals->get_controls()->get_rudder_trim()); + FCS->SetPitchTrimCmd( globals->get_controls()->get_elevator_trim() ); + FCS->SetDrCmd( -globals->get_controls()->get_rudder() ); + FCS->SetYawTrimCmd( -globals->get_controls()->get_rudder_trim() ); FCS->SetDfCmd( globals->get_controls()->get_flaps() ); FCS->SetDsbCmd( 0.0 ); //speedbrakes FCS->SetDspCmd( 0.0 ); //spoilers diff --git a/src/FDM/JSBSim/FGAerodynamics.cpp b/src/FDM/JSBSim/FGAerodynamics.cpp index ac33907bd..c72170954 100644 --- a/src/FDM/JSBSim/FGAerodynamics.cpp +++ b/src/FDM/JSBSim/FGAerodynamics.cpp @@ -138,9 +138,11 @@ bool FGAerodynamics::Load(FGConfigFile* AC_cfg) if( token == "COEFFICIENT" ) { ca.push_back( new FGCoefficient(FDMExec) ); ca.back()->Load(AC_cfg); + cm[ca.back()->Getname()]=ca.back(); } else if ( token == "GROUP" ) { ca.push_back( new FGFactorGroup(FDMExec) ); ca.back()->Load(AC_cfg); + cm[ca.back()->Getname()]=ca.back(); } } Coeff[AxisIdx[axis]] = ca; diff --git a/src/FDM/JSBSim/FGAerodynamics.h b/src/FDM/JSBSim/FGAerodynamics.h index d70f8145e..55905a57f 100644 --- a/src/FDM/JSBSim/FGAerodynamics.h +++ b/src/FDM/JSBSim/FGAerodynamics.h @@ -133,6 +133,8 @@ public: @return a string containing the numeric values for the current set of coefficients */ string GetCoefficientValues(void); + + inline FGCoefficient* GetCoefficient(string name) { return cm[name]; } private: @@ -140,6 +142,8 @@ private: AxisIndex AxisIdx; typedef vector CoeffArray; CoeffArray* Coeff; + typedef map CoeffMap; + CoeffMap cm; FGColumnVector3 vFs; FGColumnVector3 vForces; FGColumnVector3 vMoments; diff --git a/src/FDM/JSBSim/FGCoefficient.cpp b/src/FDM/JSBSim/FGCoefficient.cpp index c7c2d06e2..6838d86f0 100644 --- a/src/FDM/JSBSim/FGCoefficient.cpp +++ b/src/FDM/JSBSim/FGCoefficient.cpp @@ -71,6 +71,9 @@ FGCoefficient::FGCoefficient( FGFDMExec* fdex ) FDMExec = fdex; State = FDMExec->GetState(); Table = 0; + + bias=0; + gain=1; if (debug_lvl & 2) cout << "Instantiated: FGCoefficient" << endl; } @@ -151,7 +154,7 @@ bool FGCoefficient::Load(FGConfigFile *AC_cfg) } AC_cfg->GetNextConfigLine(); - Debug(2); + FGCoefficient::Debug(2); return true; } else { @@ -168,7 +171,8 @@ double FGCoefficient::Value(double rVal, double cVal) double Value; unsigned int midx; - SD = Value = Table->GetValue(rVal, cVal); + SD = Value = gain*Table->GetValue(rVal, cVal) + bias; + for (midx=0; midx < multipliers.size(); midx++) { Value *= State->GetParameter(multipliers[midx]); @@ -182,7 +186,7 @@ double FGCoefficient::Value(double Val) { double Value; - SD = Value = Table->GetValue(Val); + SD = Value = gain*Table->GetValue(Val) + bias; for (unsigned int midx=0; midx < multipliers.size(); midx++) Value *= State->GetParameter(multipliers[midx]); @@ -196,7 +200,7 @@ double FGCoefficient::Value(void) { double Value; - SD = Value = StaticValue; + SD = Value = gain*StaticValue + bias; for (unsigned int midx=0; midx < multipliers.size(); midx++) Value *= State->GetParameter(multipliers[midx]); @@ -283,6 +287,7 @@ void FGCoefficient::Debug(int from) if (debug_lvl <= 0) return; if (debug_lvl & 1) { // Standard console startup message output + if (from == 2) { // Loading cout << "\n " << highint << underon << name << underoff << normint << endl; cout << " " << description << endl; diff --git a/src/FDM/JSBSim/FGCoefficient.h b/src/FDM/JSBSim/FGCoefficient.h index 0c1e1c951..7c7083d0b 100644 --- a/src/FDM/JSBSim/FGCoefficient.h +++ b/src/FDM/JSBSim/FGCoefficient.h @@ -117,6 +117,11 @@ public: virtual void DisplayCoeffFactors(void); virtual inline string GetCoefficientStrings(void) { return name; } virtual string GetCoefficientValues(void); + + inline void setBias(double b) { bias=b; } + inline void setGain(double g) { gain=g; }; + inline double getBias(void) { return bias; } + inline double getGain(void) { return gain; } private: enum Type {UNKNOWN, VALUE, VECTOR, TABLE, EQUATION}; @@ -133,6 +138,7 @@ private: double Value(double); double Value(void); double StaticValue; + double bias,gain; eParam LookupR, LookupC; MultVec multipliers; int rows, columns; diff --git a/src/FDM/JSBSim/FGFCS.h b/src/FDM/JSBSim/FGFCS.h index 44e9843b2..112705271 100644 --- a/src/FDM/JSBSim/FGFCS.h +++ b/src/FDM/JSBSim/FGFCS.h @@ -170,27 +170,27 @@ public: /// @name Pilot input command retrieval //@{ /** Gets the aileron command. - @return aileron command in radians */ + @return aileron command in percent */ inline double GetDaCmd(void) { return DaCmd; } /** Gets the elevator command. - @return elevator command in radians */ + @return elevator command in percent */ inline double GetDeCmd(void) { return DeCmd; } /** Gets the rudder command. - @return rudder command in radians */ + @return rudder command in percent */ inline double GetDrCmd(void) { return DrCmd; } /** Gets the flaps command. - @return flaps command in radians */ + @return flaps command in percent */ inline double GetDfCmd(void) { return DfCmd; } /** Gets the speedbrake command. - @return speedbrake command in radians */ + @return speedbrake command in percent */ inline double GetDsbCmd(void) { return DsbCmd; } /** Gets the spoiler command. - @return spoiler command in radians */ + @return spoiler command in percent */ inline double GetDspCmd(void) { return DspCmd; } /** Gets the throttle command. @@ -209,15 +209,15 @@ public: inline double GetPropAdvanceCmd(int engine) { return PropAdvanceCmd[engine]; } /** Gets the pitch trim command. - @return pitch trim command in radians */ + @return pitch trim command in percent */ inline double GetPitchTrimCmd(void) { return PTrimCmd; } /** Gets the rudder trim command. - @return rudder trim command in radians */ + @return rudder trim command in percent */ inline double GetYawTrimCmd(void) { return YTrimCmd; } /** Gets the aileron trim command. - @return aileron trim command in radians */ + @return aileron trim command in percent */ inline double GetRollTrimCmd(void) { return RTrimCmd; } /** Get the gear extend/retract command. 0 commands gear up, 1 down. @@ -296,39 +296,39 @@ public: /// @name Pilot input command setting //@{ /** Sets the aileron command - @param cmd aileron command in radians*/ + @param cmd aileron command in percent*/ inline void SetDaCmd(double cmd) { DaCmd = cmd; } /** Sets the elevator command - @param cmd elevator command in radians*/ + @param cmd elevator command in percent*/ inline void SetDeCmd(double cmd) { DeCmd = cmd; } /** Sets the rudder command - @param cmd rudder command in radians*/ + @param cmd rudder command in percent*/ inline void SetDrCmd(double cmd) { DrCmd = cmd; } /** Sets the flaps command - @param cmd flaps command in radians*/ + @param cmd flaps command in percent*/ inline void SetDfCmd(double cmd) { DfCmd = cmd; } /** Sets the speedbrake command - @param cmd speedbrake command in radians*/ + @param cmd speedbrake command in percent*/ inline void SetDsbCmd(double cmd) { DsbCmd = cmd; } /** Sets the spoilers command - @param cmd spoilers command in radians*/ + @param cmd spoilers command in percent*/ inline void SetDspCmd(double cmd) { DspCmd = cmd; } /** Sets the pitch trim command - @param cmd pitch trim command in radians*/ + @param cmd pitch trim command in percent*/ inline void SetPitchTrimCmd(double cmd) { PTrimCmd = cmd; } /** Sets the rudder trim command - @param cmd rudder trim command in radians*/ + @param cmd rudder trim command in percent*/ inline void SetYawTrimCmd(double cmd) { YTrimCmd = cmd; } /** Sets the aileron trim command - @param cmd aileron trim command in radians*/ + @param cmd aileron trim command in percent*/ inline void SetRollTrimCmd(double cmd) { RTrimCmd = cmd; } /** Sets the throttle command for the specified engine