X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAutopilot%2Fnewauto.hxx;h=a2670d319c61a1019440b20406e4aba6de03f7ac;hb=a682823adaf0fded092a7c6cfc5d099c27525ba8;hp=252280adeec9cf35d7c467d2fcb76cf38393901c;hpb=8998dbe0bb6f2a47c97033e2fb0f54ab7a6818d2;p=flightgear.git diff --git a/src/Autopilot/newauto.hxx b/src/Autopilot/newauto.hxx index 252280ade..a2670d319 100644 --- a/src/Autopilot/newauto.hxx +++ b/src/Autopilot/newauto.hxx @@ -30,10 +30,12 @@ #include #include +#include
#include
// Structures -class FGAutopilot { +class FGAutopilot : public FGSubsystem +{ public: @@ -50,9 +52,11 @@ public: FG_ALTITUDE_LOCK = 0, // lock to a specific altitude FG_ALTITUDE_TERRAIN = 1, // try to maintain a specific AGL FG_ALTITUDE_GS1 = 2, // follow glide slope 1 - FG_ALTITUDE_GS2 = 3 // follow glide slope 2 + FG_ALTITUDE_GS2 = 3, // follow glide slope 2 + FG_ALTITUDE_ARM = 4 // ascend to selected altitude }; + private: bool heading_hold; // the current state of the heading hold @@ -71,16 +75,7 @@ private: double TargetHeading; // the true heading the AP should steer to. double TargetAltitude; // altitude to hold double TargetAGL; // the terrain separation - SGPropertyNode *min_climb; // minimum climb speed - SGPropertyNode *best_climb; // best climb speed - SGPropertyNode *elevator_adj_factor; // factor to optimize altitude hold adjustments - SGPropertyNode *integral_contrib; // amount of contribution of the integral - // component of the pid - SGPropertyNode *zero_pitch_throttle; // amount of throttle at which the aircraft does not pitch up - SGPropertyNode *zero_pitch_trim_full_throttle; // amount of trim required to level at full throttle - SGPropertyNode *TargetClimbRate; // target climb rate - SGPropertyNode *TargetDescentRate; // target decent rate - SGPropertyNode *current_throttle; // current throttle (engine 0) + double TargetSpeed; // speed to shoot for double alt_error_accum; // altitude error accumulator double climb_error_accum; // climb error accumulator (for GS) @@ -120,6 +115,7 @@ private: char TargetHeadingStr[64]; char TargetAltitudeStr[64]; + // property nodes SGPropertyNode *latitude_node; SGPropertyNode *longitude_node; SGPropertyNode *altitude_node; @@ -127,6 +123,23 @@ private: SGPropertyNode *vertical_speed_node; SGPropertyNode *heading_node; SGPropertyNode *roll_node; + SGPropertyNode *pitch_node; + + SGPropertyNode *min_climb; // minimum climb speed + SGPropertyNode *best_climb; // best climb speed + SGPropertyNode *elevator_adj_factor; // factor to optimize altitude hold adjustments + SGPropertyNode *integral_contrib; // amount of contribution of the integral + // component of the pid + SGPropertyNode *zero_pitch_throttle; // amount of throttle at which the aircraft does not pitch up + SGPropertyNode *zero_pitch_trim_full_throttle; // amount of trim required to level at full throttle + SGPropertyNode *max_aileron_node; // maximum aileron setting range -1 ~ 1 + SGPropertyNode *max_roll_node; // maximum roll setting in degrees + SGPropertyNode *roll_out_node; // start rollout offset from desired heading in degrees + SGPropertyNode *roll_out_smooth_node; // rollout smoothing offset in degrees + + SGPropertyNode *TargetClimbRate; // target climb rate + SGPropertyNode *TargetDescentRate; // target decent rate + SGPropertyNode *current_throttle; // current throttle (engine 0) public: @@ -136,15 +149,19 @@ public: // destructor ~FGAutopilot(); - // Initialize autopilot system - void init(); + + //////////////////////////////////////////////////////////////////// + // Implementation of FGSubsystem. + //////////////////////////////////////////////////////////////////// + + void init (); + void bind (); + void unbind (); + void update (double dt); // Reset the autopilot system void reset(void); - // run an interation of the autopilot (updates control positions) - int run(); - void AltitudeSet( double new_altitude ); void AltitudeAdjust( double inc ); void HeadingAdjust( double inc ); @@ -221,12 +238,46 @@ public: inline double get_RollOutSmooth() const { return RollOutSmooth; } inline void set_RollOutSmooth( double val ) { RollOutSmooth = val; } -}; +private: + + bool getAPAltitudeLock () const; + void setAPAltitudeLock (bool lock); + double getAPAltitude () const; + void setAPAltitude (double altitude); + bool getAPGSLock () const; + void setAPGSLock (bool lock); + bool getAPTerrainLock () const; + void setAPTerrainLock (bool lock); + double getAPClimb () const; + void setAPClimb (double rate); + bool getAPHeadingLock () const; + void setAPHeadingLock (bool lock); + double getAPHeadingBug () const; + void setAPHeadingBug (double heading); + bool getAPWingLeveler () const; + void setAPWingLeveler (bool lock); + bool getAPNAV1Lock () const; + void setAPNAV1Lock (bool lock); + bool getAPAutoThrottleLock () const; + void setAPAutoThrottleLock (bool lock); + double getAPRudderControl () const; + void setAPRudderControl (double value); + double getAPElevatorControl () const; + void setAPElevatorControl (double value); + double getAPThrottleControl () const; + void setAPThrottleControl (double value); +}; -extern FGAutopilot *current_autopilot; #define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_DG_HEADING_LOCK // #define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_TRUE_HEADING_LOCK +#define DEFAULT_AP_ALTITUDE_LOCK FGAutopilot::FG_ALTITUDE_LOCK + + +/** + * static functions for autopilot properties + */ #endif // _NEWAUTO_HXX +