#define _NEWAUTO_HXX
+#include <simgear/misc/props.hxx>
#include <simgear/route/waypoint.hxx>
+#include <Main/fg_props.hxx>
// Structures
class FGAutopilot {
public:
enum fgAutoHeadingMode {
- FG_DG_HEADING_LOCK = 0,
- FG_HEADING_LOCK = 1,
- FG_HEADING_NAV1 = 2,
- FG_HEADING_NAV2 = 3,
- FG_HEADING_WAYPOINT = 4
+ FG_DG_HEADING_LOCK = 0, // follow bug on directional gryo
+ FG_TC_HEADING_LOCK = 1, // keep turn coordinator zero'd
+ FG_TRUE_HEADING_LOCK = 2, // lock to true heading (i.e. a perfect world)
+ FG_HEADING_NAV1 = 3, // follow nav1 radial
+ FG_HEADING_NAV2 = 4, // follow nav2 radial
+ FG_HEADING_WAYPOINT = 5 // track next waypoint
};
enum fgAutoAltitudeMode {
- FG_ALTITUDE_LOCK = 0,
- FG_ALTITUDE_TERRAIN = 1,
- FG_ALTITUDE_GS1 = 2,
- FG_ALTITUDE_GS2 = 3
+ 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
};
private:
double TargetHeading; // the true heading the AP should steer to.
double TargetAltitude; // altitude to hold
double TargetAGL; // the terrain separation
- double TargetClimbRate; // climb rate to shoot for
+ 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 alt_error_accum; // altitude error accumulator
double climb_error_accum; // climb error accumulator (for GS)
double speed_error_accum; // speed error accumulator
char TargetHeadingStr[64];
char TargetAltitudeStr[64];
+ SGPropertyNode *latitude_node;
+ SGPropertyNode *longitude_node;
+ SGPropertyNode *altitude_node;
+ SGPropertyNode *altitude_agl_node;
+ SGPropertyNode *vertical_speed_node;
+ SGPropertyNode *heading_node;
+ SGPropertyNode *roll_node;
+
public:
+ // constructor
+ FGAutopilot();
+
+ // destructor
+ ~FGAutopilot();
+
// Initialize autopilot system
void init();
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_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; }
extern FGAutopilot *current_autopilot;
+#define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_DG_HEADING_LOCK
+// #define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_TRUE_HEADING_LOCK
#endif // _NEWAUTO_HXX