X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAutopilot%2Fnewauto.hxx;h=a2670d319c61a1019440b20406e4aba6de03f7ac;hb=a682823adaf0fded092a7c6cfc5d099c27525ba8;hp=67ceb2b03a16fc5f4d0a03804e2e2fa182c5003b;hpb=d7ae38c0dd2e5ec0aeb8faa79528933f24c81970;p=flightgear.git diff --git a/src/Autopilot/newauto.hxx b/src/Autopilot/newauto.hxx index 67ceb2b03..a2670d319 100644 --- a/src/Autopilot/newauto.hxx +++ b/src/Autopilot/newauto.hxx @@ -30,9 +30,12 @@ #include #include +#include
+#include
// Structures -class FGAutopilot { +class FGAutopilot : public FGSubsystem +{ public: @@ -49,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 @@ -70,10 +75,9 @@ private: double TargetHeading; // the true heading the AP should steer to. double TargetAltitude; // altitude to hold double TargetAGL; // the terrain separation - double TargetClimbRate; // target climb rate - double TargetDecentRate; // target decent rate + double TargetSpeed; // speed to shoot for - double alt_error_accum; // altitude error accumulator + double alt_error_accum; // altitude error accumulator double climb_error_accum; // climb error accumulator (for GS) double speed_error_accum; // speed error accumulator @@ -111,6 +115,7 @@ private: char TargetHeadingStr[64]; char TargetAltitudeStr[64]; + // property nodes SGPropertyNode *latitude_node; SGPropertyNode *longitude_node; SGPropertyNode *altitude_node; @@ -118,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: @@ -127,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 ); @@ -176,8 +202,14 @@ public: inline void set_TargetDistance( double val ) { TargetDistance = val; } inline double get_TargetAltitude() const { return TargetAltitude; } inline void set_TargetAltitude( double val ) { TargetAltitude = val; } - inline double get_TargetClimbRate() const { return TargetClimbRate; } - inline void set_TargetClimbRate( double val ) { TargetClimbRate = val; } + inline double get_TargetAGL() const { return TargetAGL; } + inline void set_TargetAGL( double val ) { TargetAGL = val; } + inline double get_TargetClimbRate() const { + return TargetClimbRate->getFloatValue(); + } + inline void set_TargetClimbRate( double val ) { + fgSetFloat( "/autopilot/config/target-climb-rate-fpm", val); + } inline char *get_TargetLatitudeStr() { return TargetLatitudeStr; } inline char *get_TargetLongitudeStr() { return TargetLongitudeStr; } @@ -206,10 +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 +