#include <simgear/misc/props.hxx>
#include <simgear/route/waypoint.hxx>
+#include <Main/fgfs.hxx>
#include <Main/fg_props.hxx>
// Structures
-class FGAutopilot {
+class FGAutopilot : public FGSubsystem
+{
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
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)
char TargetHeadingStr[64];
char TargetAltitudeStr[64];
+ // property nodes
SGPropertyNode *latitude_node;
SGPropertyNode *longitude_node;
SGPropertyNode *altitude_node;
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:
// destructor
~FGAutopilot();
- // Initialize autopilot system
- void init();
+\f
+ ////////////////////////////////////////////////////////////////////
+ // 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 );
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
+