JSBSim Flight Dynamics Model
1.0 (02 March 2017)
An Open Source Flight Dynamics and Control Software Library in C++
|
Models a helicopter rotor. More...
#include <FGRotor.h>
Public Member Functions | |
FGRotor (FGFDMExec *exec, Element *rotor_element, int num) | |
Constructor for FGRotor. More... | |
~FGRotor () | |
Destructor for FGRotor. | |
double | Calculate (double EnginePower) |
Returns the scalar thrust of the rotor, and adjusts the RPM value. | |
double | GetA0 (void) const |
Retrieves the rotor's coning angle. | |
double | GetA1 (void) const |
Retrieves the longitudinal flapping angle with respect to the rotor shaft. | |
double | GetB1 (void) const |
Retrieves the lateral flapping angle with respect to the rotor shaft. | |
double | GetCollectiveCtrl (void) const |
Retrieves the collective control input in radians. | |
double | GetCT (void) const |
Retrieves the thrust coefficient. | |
double | GetEngineRPM (void) const |
Retrieves the RPMs of the Engine, as seen from this rotor. | |
double | GetGearRatio (void) |
Tells the rotor's gear ratio, usually the engine asks for this. | |
double | GetGroundEffectScaleNorm (void) const |
Retrieves the ground effect scaling factor. | |
double | GetLambda (void) const |
Retrieves the inflow ratio. | |
double | GetLateralCtrl (void) const |
Retrieves the lateral control input in radians. | |
double | GetLongitudinalCtrl (void) const |
Retrieves the longitudinal control input in radians. | |
double | GetMu (void) const |
Retrieves the tip-speed (aka advance) ratio. | |
double | GetNu (void) const |
Retrieves the induced inflow ratio. | |
double | GetPhiDW (void) const |
Downwash angle - positive values point leftward (given a horizontal spinning rotor) | |
double | GetPowerRequired (void) const |
Returns the power required by the rotor. | |
double | GetRPM (void) const |
Retrieves the RPMs of the rotor. | |
double | GetThetaDW (void) const |
Downwash angle - positive values point forward (given a horizontal spinning rotor) | |
double | GetThrust (void) const |
Retrieves the thrust of the rotor. | |
std::string | GetThrusterLabels (int id, const std::string &delimeter) |
std::string | GetThrusterValues (int id, const std::string &delimeter) |
double | GetTorque (void) const |
Retrieves the torque. | |
double | GetVi (void) const |
Retrieves the induced velocity. | |
void | SetCollectiveCtrl (double c) |
Sets the collective control input in radians. | |
void | SetEngineRPM (double rpm) |
void | SetGroundEffectScaleNorm (double g) |
Sets the ground effect scaling factor. | |
void | SetLateralCtrl (double c) |
Sets the lateral control input in radians. | |
void | SetLongitudinalCtrl (double c) |
Sets the longitudinal control input in radians. | |
void | SetRPM (double rpm) |
Public Member Functions inherited from FGThruster | |
FGThruster (FGFDMExec *FDMExec, Element *el, int num) | |
Constructor. | |
virtual | ~FGThruster () |
Destructor. | |
double | GetGearRatio (void) |
std::string | GetName (void) |
virtual double | GetPowerRequired (void) |
double | GetReverserAngle (void) const |
double | GetThrust (void) const |
eType | GetType (void) |
virtual void | ResetToIC (void) |
void | SetName (std::string name) |
void | SetReverserAngle (double angle) |
Public Member Functions inherited from FGForce | |
FGForce (FGFDMExec *FDMExec) | |
Constructor. | |
FGForce (const FGForce &force) | |
~FGForce () | |
Destructor. | |
const FGColumnVector3 & | GetActingLocation (void) const |
double | GetActingLocationX (void) const |
double | GetActingLocationY (void) const |
double | GetActingLocationZ (void) const |
const FGColumnVector3 & | GetAnglesToBody (void) const |
double | GetAnglesToBody (int axis) const |
virtual const FGColumnVector3 & | GetBodyForces (void) |
double | GetBodyXForce (void) const |
double | GetBodyYForce (void) const |
double | GetBodyZForce (void) const |
const FGColumnVector3 & | GetLocation (void) const |
double | GetLocationX (void) const |
double | GetLocationY (void) const |
double | GetLocationZ (void) const |
const FGColumnVector3 & | GetMoments (void) const |
double | GetPitch (void) const |
TransformType | GetTransformType (void) const |
double | GetYaw (void) const |
void | SetActingLocation (double x, double y, double z) |
Acting point of application. More... | |
void | SetActingLocation (const FGColumnVector3 &vv) |
double | SetActingLocationX (double x) |
double | SetActingLocationY (double y) |
double | SetActingLocationZ (double z) |
void | SetAnglesToBody (double broll, double bpitch, double byaw) |
void | SetAnglesToBody (const FGColumnVector3 &vv) |
void | SetLocation (double x, double y, double z) |
void | SetLocation (const FGColumnVector3 &vv) |
void | SetLocationX (double x) |
void | SetLocationY (double y) |
void | SetLocationZ (double z) |
void | SetPitch (double pitch) |
void | SetTransformType (TransformType ii) |
void | SetYaw (double yaw) |
const FGMatrix33 & | Transform (void) const |
void | UpdateCustomTransformMatrix (void) |
Public Member Functions inherited from FGJSBBase | |
FGJSBBase () | |
Constructor for FGJSBBase. | |
virtual | ~FGJSBBase () |
Destructor for FGJSBBase. | |
void | disableHighLighting (void) |
Disables highlighting in the console output. | |
std::string | GetVersion (void) |
Returns the version number of JSBSim. More... | |
void | PutMessage (const Message &msg) |
Places a Message structure on the Message queue. More... | |
void | PutMessage (const std::string &text) |
Creates a message with the given text and places it on the queue. More... | |
void | PutMessage (const std::string &text, bool bVal) |
Creates a message with the given text and boolean value and places it on the queue. More... | |
void | PutMessage (const std::string &text, int iVal) |
Creates a message with the given text and integer value and places it on the queue. More... | |
void | PutMessage (const std::string &text, double dVal) |
Creates a message with the given text and double value and places it on the queue. More... | |
int | SomeMessages (void) |
Reads the message on the queue (but does not delete it). More... | |
void | ProcessMessage (void) |
Reads the message on the queue and removes it from the queue. More... | |
Message * | ProcessNextMessage (void) |
Reads the next message on the queue and removes it from the queue. More... | |
Additional Inherited Members | |
Public Types inherited from FGThruster | |
enum | eType { ttNozzle, ttRotor, ttPropeller, ttDirect } |
Public Types inherited from FGForce | |
enum | TransformType { tNone, tWindBody, tLocalBody, tCustom } |
Public Types inherited from FGJSBBase | |
enum | { eL = 1, eM, eN } |
Moments L, M, N. | |
enum | { eP = 1, eQ, eR } |
Rates P, Q, R. | |
enum | { eU = 1, eV, eW } |
Velocities U, V, W. | |
enum | { eX = 1, eY, eZ } |
Positions X, Y, Z. | |
enum | { ePhi = 1, eTht, ePsi } |
Euler angles Phi, Theta, Psi. | |
enum | { eDrag = 1, eSide, eLift } |
Stability axis forces, Drag, Side force, Lift. | |
enum | { eRoll = 1, ePitch, eYaw } |
Local frame orientation Roll, Pitch, Yaw. | |
enum | { eNorth = 1, eEast, eDown } |
Local frame position North, East, Down. | |
enum | { eLat = 1, eLong, eRad } |
Locations Radius, Latitude, Longitude. | |
enum | { inNone = 0, inDegrees, inRadians, inMeters, inFeet } |
Conversion specifiers. | |
Static Public Member Functions inherited from FGJSBBase | |
static double | CelsiusToFahrenheit (double celsius) |
Converts from degrees Celsius to degrees Fahrenheit. More... | |
static double | CelsiusToKelvin (double celsius) |
Converts from degrees Celsius to degrees Kelvin. More... | |
static double | CelsiusToRankine (double celsius) |
Converts from degrees Celsius to degrees Rankine. More... | |
static double | Constrain (double min, double value, double max) |
Constrain a value between a minimum and a maximum value. | |
static bool | EqualToRoundoff (double a, double b) |
Finite precision comparison. More... | |
static bool | EqualToRoundoff (float a, float b) |
Finite precision comparison. More... | |
static bool | EqualToRoundoff (float a, double b) |
Finite precision comparison. More... | |
static bool | EqualToRoundoff (double a, float b) |
Finite precision comparison. More... | |
static double | FahrenheitToCelsius (double fahrenheit) |
Converts from degrees Fahrenheit to degrees Celsius. More... | |
static double | FeetToMeters (double measure) |
Converts from feet to meters. More... | |
static double | GaussianRandomNumber (void) |
static double | KelvinToCelsius (double kelvin) |
Converts from degrees Kelvin to degrees Celsius. More... | |
static double | KelvinToFahrenheit (double kelvin) |
Converts from degrees Kelvin to degrees Fahrenheit. More... | |
static double | KelvinToRankine (double kelvin) |
Converts from degrees Kelvin to degrees Rankine. More... | |
static double | MachFromVcalibrated (double vcas, double p, double psl, double rhosl) |
Calculate the Mach number from the calibrated airspeed. More... | |
static double | PitotTotalPressure (double mach, double p) |
Compute the total pressure in front of the Pitot tube. More... | |
static double | RankineToCelsius (double rankine) |
Converts from degrees Rankine to degrees Celsius. More... | |
static double | RankineToKelvin (double rankine) |
Converts from degrees Rankine to degrees Kelvin. More... | |
static double | sign (double num) |
static double | VcalibratedFromMach (double mach, double p, double psl, double rhosl) |
Calculate the calibrated airspeed from the Mach number. More... | |
Public Attributes inherited from FGThruster | |
struct JSBSim::FGThruster::Inputs | in |
Static Public Attributes inherited from FGJSBBase | |
static short | debug_lvl = 1 |
static char | highint [5] = {27, '[', '1', 'm', '\0' } |
highlights text | |
static char | halfint [5] = {27, '[', '2', 'm', '\0' } |
low intensity text | |
static char | normint [6] = {27, '[', '2', '2', 'm', '\0' } |
normal intensity text | |
static char | reset [5] = {27, '[', '0', 'm', '\0' } |
resets text properties | |
static char | underon [5] = {27, '[', '4', 'm', '\0' } |
underlines text | |
static char | underoff [6] = {27, '[', '2', '4', 'm', '\0' } |
underline off | |
static char | fgblue [6] = {27, '[', '3', '4', 'm', '\0' } |
blue text | |
static char | fgcyan [6] = {27, '[', '3', '6', 'm', '\0' } |
cyan text | |
static char | fgred [6] = {27, '[', '3', '1', 'm', '\0' } |
red text | |
static char | fggreen [6] = {27, '[', '3', '2', 'm', '\0' } |
green text | |
static char | fgdef [6] = {27, '[', '3', '9', 'm', '\0' } |
default text | |
Protected Member Functions inherited from FGJSBBase | |
void | Debug (int) |
Static Protected Member Functions inherited from FGJSBBase | |
static std::string | CreateIndexedPropertyName (const std::string &Property, int index) |
Protected Attributes inherited from FGThruster | |
int | EngineNum |
double | GearRatio |
std::string | Name |
double | PowerRequired |
double | ReverserAngle |
double | Thrust |
double | ThrustCoeff |
eType | Type |
Protected Attributes inherited from FGForce | |
FGFDMExec * | fdmex |
FGMatrix33 | mT |
TransformType | ttype |
FGColumnVector3 | vActingXYZn |
FGColumnVector3 | vFn |
FGColumnVector3 | vH |
FGColumnVector3 | vMn |
FGColumnVector3 | vOrient |
FGColumnVector3 | vXYZn |
Static Protected Attributes inherited from FGJSBBase | |
static const double | degtorad = 0.017453292519943295769236907684886 |
static const double | fpstokts = 1.0/ktstofps |
static const double | fttom = 0.3048 |
static int | gaussian_random_number_phase = 0 |
static const double | hptoftlbssec = 550.0 |
static const double | in3tom3 = 1.638706E-5 |
static const double | inchtoft = 0.08333333 |
static const double | inhgtopa = 3386.38 |
static const std::string | JSBSim_version = "1.0 " __DATE__ " " __TIME__ |
static const double | kgtolb = 2.20462 |
static const double | kgtoslug = 0.06852168 |
static const double | ktstofps = 1.68781 |
static const double | lbtoslug = 1.0/slugtolb |
static Message | localMsg |
static const double | m3toft3 = 1.0/(fttom*fttom*fttom) |
static double | Mair = 28.9645 |
static unsigned int | messageId = 0 |
static std::queue< Message > | Messages |
static const std::string | needed_cfg_version = "2.0" |
static const double | psftoinhg = 0.014138 |
static const double | psftopa = 47.88 |
static const double | radtodeg = 57.295779513082320876798154814105 |
static double | Reng = 1716.56 |
static double | Rstar = 1545.348 |
static const double | SHRatio = 1.40 |
static const double | slugtolb = 32.174049 |
Models a helicopter rotor.
Brief description and the symbol frequently found in the literature.
<diameter> - Rotor disk diameter (2x R). <numblades> - Number of blades (b). <gearratio> - Ratio of (engine rpm) / (rotor rpm), usually > 1. <nominalrpm> - RPM at which the rotor usally operates. <minrpm> - Lowest RPM used in the model, optional and defaults to 1. <maxrpm> - Largest RPM used in the model, optional and defaults to 2 x nominalrpm. <chord> - Blade chord, (c). <liftcurveslope> - Slope of curve of section lift against section angle of attack, per rad (a). <twist> - Blade twist from root to tip, (theta_1). <hingeoffset> - Rotor flapping-hinge offset (e). <flappingmoment> - Flapping moment of inertia (I_b). <massmoment> - Blade mass moment. Mass of a single blade times the blade's cg-distance from the hub, optional. <polarmoment> - Moment of inertia for the whole rotor disk, optional. <inflowlag> - Rotor inflow time constant, sec. Smaller values yield to quicker responses (typical values for main rotor: 0.1 - 0.2 s). <tiplossfactor> - Tip-loss factor. The Blade fraction that produces lift. Value usually ranges between 0.95 - 1.0, optional (B).
<maxbrakepower> - Rotor brake, 20-30 hp should work for a mid size helicopter. <gearloss> - Friction in gear, 0.2% to 3% of the engine power, optional (see notes). <gearmoment> - Approximation for the moment of inertia of the gear (and engine), defaults to 0.1 * polarmoment, optional.
<controlmap> - Defines the control inputs used (see notes).
<ExternalRPM> - Links the rotor to another rotor, or an user controllable property.
Experimental properties
<groundeffectexp> - Exponent for ground effect approximation. Values usually range from 0.04 for large rotors to 0.1 for smaller ones. As a rule of thumb the effect vanishes at a height 2-3 times the rotor diameter. formula used: exp ( - groundeffectexp * (height+groundeffectshift) ) Omitting or setting to 0.0 disables the effect calculation. <groundeffectshift> - Further adjustment of ground effect, approx. hub height or slightly above (This lessens the influence of the ground effect).
The behavior of the rotor is controlled/influenced by following inputs.
fdm
property propulsion/engine[x]/collective-ctrl-rad
. See below for tail rotor propulsion/engine[x]/lateral-ctrl-rad
. propulsion/engine[x]/longitudinal-ctrl-rad
. The tail rotor collective (aka antitorque, aka pedal) control input. Read from propulsion/engine[x]/antitorque-ctrl-rad
or propulsion/engine[x]/tail-collective-ctrl-rad
.
Providing <ExternalRPM> 0 </ExternalRPM>
the tail rotor's RPM is linked to to the main (=first, =0) rotor, and specifing <controlmap> TAIL </controlmap>
tells this rotor to read the collective input from propulsion/engine[1]/antitorque-ctrl-rad
(The TAIL-map ignores lateral and longitudinal input). The rotor needs to be attached to a dummy engine, e.g. an 1HP electrical engine. A tandem rotor is setup analogous.
The 'sense' parameter from the thruster is interpreted as follows, sense=1 means counter clockwise rotation of the main rotor, as viewed from above. This is as a far as I know more popular than clockwise rotation, which is defined by setting sense to -1. Concerning coaxial designs - by setting 'sense' to zero, a Kamov-style rotor is modeled (i.e. the rotor produces no torque).
In order to keep the rotor/engine speed constant, use of a RPM-Governor system is encouraged (see examples).
In case the model requires the manual use of a clutch the <gearloss>
property might need attention.
Turboprop: Here the default value might be a bit too small. Also it's advisable to adjust the power table for rpm values that are far beyond the nominal value.
The property propulsion/engine[x]/groundeffect-scale-norm
allows fdm based scaling of the ground effect influence. For instance the effect vanishes at speeds above approx. 50kts, or one likes to land on a 'perforated' helipad.
Setting <ExternalRPM> -1 </ExternalRPM>
the rotor's RPM is controlled by the propulsion/engine[x]/x-rpm-dict
property. This feature can be useful when developing a FDM.
<dl> <dt>/SH79/</dt><dd>Shaugnessy, J. D., Deaux, Thomas N., and Yenni, Kenneth R., "Development and Validation of a Piloted Simulation of a Helicopter and External Sling Load", NASA TP-1285, 1979.</dd> <dt>/BA41/</dt><dd>Bailey,F.J.,Jr., "A Simplified Theoretical Method of Determining the Characteristics of a Lifting Rotor in Forward Flight", NACA Rep.716, 1941.</dd> <dt>/AM50/</dt><dd>Amer, Kenneth B.,"Theory of Helicopter Damping in Pitch or Roll and a Comparison With Flight Measurements", NACA TN-2136, 1950.</dd> <dt>/TA77/</dt><dd>Talbot, Peter D., Corliss, Lloyd D., "A Mathematical Force and Moment Model of a UH-1H Helicopter for Flight Dynamics Simulations", NASA TM-73,254, 1977.</dd> <dt>/GE49/</dt><dd>Gessow, Alfred, Amer, Kenneth B. "An Introduction to the Physical Aspects of Helicopter Stability", NACA TN-1982, 1949.</dd> </dl> @author Thomas Kreitler @version $Id: FGRotor.h,v 1.17 2015/09/27 10:03:53 bcoconni Exp $
Constructor for FGRotor.
exec | a pointer to the main executive object |
rotor_element | a pointer to the thruster config file XML element |
num | the number of this rotor |
Definition at line 77 of file FGRotor.cpp.