#define _NEWAUTO_HXX
-#include <simgear/misc/props.hxx>
+#include <simgear/props/props.hxx>
#include <simgear/route/waypoint.hxx>
#include <Main/fgfs.hxx>
public:
enum fgAutoHeadingMode {
- 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_DG_HEADING_LOCK = 0, // follow bug on directional gryo (vacuum)
+ 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, // 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_ARM = 4 // ascend to selected altitude
+ FG_ALTITUDE_LOCK = 0, // lock to a specific altitude (indicated)
+ 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_ARM = 4, // ascend to selected altitude
+ FG_TRUE_ALTITUDE_LOCK = 5 // lock to a specific true altitude
+ // (i.e. a perfect world)
};
private:
- bool heading_hold; // the current state of the heading hold
- bool altitude_hold; // the current state of the altitude hold
- bool auto_throttle; // the current state of the auto throttle
+ bool heading_hold; // the current state of the heading hold
+ bool altitude_hold; // the current state of the altitude hold
+ bool auto_throttle; // the current state of the auto throttle
fgAutoHeadingMode heading_mode;
fgAutoAltitudeMode altitude_mode;
- SGWayPoint waypoint; // the waypoint the AP should steer to.
+ SGWayPoint waypoint; // the waypoint the AP should steer to.
- // double TargetLatitude; // the latitude the AP should steer to.
- // double TargetLongitude; // the longitude the AP should steer to.
- double TargetDistance; // the distance to Target.
+ // double TargetLatitude; // the latitude the AP should steer to.
+ // double TargetLongitude; // the longitude the AP should steer to.
+ double TargetDistance; // the distance to Target.
double DGTargetHeading; // the apparent DG heading to steer towards.
- double TargetHeading; // the true heading the AP should steer to.
- double TargetAltitude; // altitude to hold
- double TargetAGL; // the terrain separation
+ double TargetHeading; // the true heading the AP should steer to.
+ double TargetAltitude; // altitude to hold
+ double TargetAGL; // the terrain separation
- double TargetSpeed; // speed to shoot for
+ double TargetSpeed; // speed to shoot for
double alt_error_accum; // altitude error accumulator
- double climb_error_accum; // climb error accumulator (for GS)
- double speed_error_accum; // speed error accumulator
-
- double TargetSlope; // the glide slope hold value
-
- double MaxRoll ; // the max the plane can roll for the turn
- double RollOut; // when the plane should roll out
- // measured from Heading
- double MaxAileron; // how far to move the aleroin from center
- double RollOutSmooth; // deg to use for smoothing Aileron Control
- double MaxElevator; // the maximum elevator allowed
- double SlopeSmooth; // smoothing angle for elevator
-
+ double climb_error_accum; // climb error accumulator (for GS)
+ double speed_error_accum; // speed error accumulator
+
+ double TargetSlope; // the glide slope hold value
+
+ double MaxRoll ; // the max the plane can roll for the turn
+ double RollOut; // when the plane should roll out
+ // measured from Heading
+ double MaxAileron; // how far to move the aleroin from center
+ double RollOutSmooth; // deg to use for smoothing Aileron Control
+ double MaxElevator; // the maximum elevator allowed
+ double SlopeSmooth; // smoothing angle for elevator
+
// following for testing disengagement of autopilot upon pilot
// interaction with controls
double old_aileron;
double old_elevator;
double old_elevator_trim;
double old_rudder;
-
+
// manual controls override beyond this value
double disengage_threshold;
SGPropertyNode *altitude_agl_node;
SGPropertyNode *vertical_speed_node;
SGPropertyNode *heading_node;
+ SGPropertyNode *dg_heading_node;
SGPropertyNode *roll_node;
SGPropertyNode *pitch_node;
// 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 *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:
void set_AutoThrottleEnabled( bool value );
/* inline void set_WayPoint( const double lon, const double lat,
- const double alt, const string s ) {
- waypoint = SGWayPoint( lon, lat, alt, SGWayPoint::WGS84, "Current WP" );
+ const double alt, const string s ) {
+ waypoint = SGWayPoint( lon, lat, alt, SGWayPoint::WGS84, "Current WP" );
} */
inline double get_TargetLatitude() const {
- return waypoint.get_target_lat();
+ return waypoint.get_target_lat();
}
inline double get_TargetLongitude() const {
- return waypoint.get_target_lon();
+ return waypoint.get_target_lon();
}
inline void set_old_lat( double val ) { old_lat = val; }
inline void set_old_lon( double val ) { old_lon = val; }
void update_old_control_values();
// accessors
- inline double get_MaxRoll() const { return MaxRoll; }
- inline void set_MaxRoll( double val ) { MaxRoll = val; }
- inline double get_RollOut() const { return RollOut; }
- inline void set_RollOut( double val ) { RollOut = val; }
-
- inline double get_MaxAileron() const { return MaxAileron; }
- inline void set_MaxAileron( double val ) { MaxAileron = val; }
- inline double get_RollOutSmooth() const { return RollOutSmooth; }
- inline void set_RollOutSmooth( double val ) { RollOutSmooth = val; }
+ inline double get_MaxRoll() {
+ return fgGetFloat( "/autopilot/config/max-roll-deg" );
+ }
+ inline double get_RollOut() {
+ return fgGetFloat( "/autopilot/config/roll-out-deg" );
+ }
+ inline double get_MaxAileron() {
+ return fgGetFloat( "/autopilot/config/max-aileron" );
+ }
+ inline double get_RollOutSmooth() {
+ return fgGetFloat( "/autopilot/config/roll-out-smooth-deg" );
+ }
+ inline void set_MaxRoll( double val ) {
+ fgSetFloat( "/autopilot/config/max-roll-deg", val );
+ }
+ inline void set_RollOut( double val ) {
+ fgSetFloat( "/autopilot/config/roll-out-deg", val );
+ }
+ inline void set_MaxAileron( double val ) {
+ fgSetFloat( "/autopilot/config/max-aileron", val );
+ }
+ inline void set_RollOutSmooth( double val ) {
+ fgSetFloat( "/autopilot/config/roll-out-smooth-deg", val );
+ }
private:
void setAPHeadingLock (bool lock);
double getAPHeadingBug () const;
void setAPHeadingBug (double heading);
+ const char * getAPwaypoint () const;
+ void setAPwaypoint (const char * apt);
bool getAPWingLeveler () const;
void setAPWingLeveler (bool lock);
bool getAPNAV1Lock () const;
#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
-
+//#define DEFAULT_AP_HEADING_LOCK FGAutopilot::FG_TRUE_HEADING_LOCK
+//#define DEFAULT_AP_ALTITUDE_LOCK FGAutopilot::FG_TRUE_ALTITUDE_LOCK
/**
* static functions for autopilot properties
*/
#endif // _NEWAUTO_HXX
+