Norman Vine:
This patch finally reenables the AutoPilot gain adjuster.
This commit is contained in:
parent
22d94b8273
commit
a857322d9c
1 changed files with 63 additions and 48 deletions
|
@ -40,19 +40,19 @@ class FGAutopilot : public FGSubsystem
|
||||||
public:
|
public:
|
||||||
|
|
||||||
enum fgAutoHeadingMode {
|
enum fgAutoHeadingMode {
|
||||||
FG_DG_HEADING_LOCK = 0, // follow bug on directional gryo (vacuum)
|
FG_DG_HEADING_LOCK = 0, // follow bug on directional gryo (vacuum)
|
||||||
FG_TC_HEADING_LOCK = 1, // keep turn coordinator zero'd
|
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_TRUE_HEADING_LOCK = 2, // lock to true heading (i.e. a perfect world)
|
||||||
FG_HEADING_NAV1 = 3, // follow nav1 radial
|
FG_HEADING_NAV1 = 3, // follow nav1 radial
|
||||||
FG_HEADING_NAV2 = 4, // follow nav2 radial
|
FG_HEADING_NAV2 = 4, // follow nav2 radial
|
||||||
FG_HEADING_WAYPOINT = 5 // track next waypoint
|
FG_HEADING_WAYPOINT = 5 // track next waypoint
|
||||||
};
|
};
|
||||||
|
|
||||||
enum fgAutoAltitudeMode {
|
enum fgAutoAltitudeMode {
|
||||||
FG_ALTITUDE_LOCK = 0, // lock to a specific altitude (indicated)
|
FG_ALTITUDE_LOCK = 0, // lock to a specific altitude (indicated)
|
||||||
FG_ALTITUDE_TERRAIN = 1, // try to maintain a specific AGL
|
FG_ALTITUDE_TERRAIN = 1, // try to maintain a specific AGL
|
||||||
FG_ALTITUDE_GS1 = 2, // follow glide slope 1
|
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
|
FG_ALTITUDE_ARM = 4, // ascend to selected altitude
|
||||||
FG_TRUE_ALTITUDE_LOCK = 5 // lock to a specific true altitude
|
FG_TRUE_ALTITUDE_LOCK = 5 // lock to a specific true altitude
|
||||||
// (i.e. a perfect world)
|
// (i.e. a perfect world)
|
||||||
|
@ -61,45 +61,45 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool heading_hold; // the current state of the heading hold
|
bool heading_hold; // the current state of the heading hold
|
||||||
bool altitude_hold; // the current state of the altitude hold
|
bool altitude_hold; // the current state of the altitude hold
|
||||||
bool auto_throttle; // the current state of the auto throttle
|
bool auto_throttle; // the current state of the auto throttle
|
||||||
|
|
||||||
fgAutoHeadingMode heading_mode;
|
fgAutoHeadingMode heading_mode;
|
||||||
fgAutoAltitudeMode altitude_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 TargetLatitude; // the latitude the AP should steer to.
|
||||||
// double TargetLongitude; // the longitude the AP should steer to.
|
// double TargetLongitude; // the longitude the AP should steer to.
|
||||||
double TargetDistance; // the distance to Target.
|
double TargetDistance; // the distance to Target.
|
||||||
double DGTargetHeading; // the apparent DG heading to steer towards.
|
double DGTargetHeading; // the apparent DG heading to steer towards.
|
||||||
double TargetHeading; // the true heading the AP should steer to.
|
double TargetHeading; // the true heading the AP should steer to.
|
||||||
double TargetAltitude; // altitude to hold
|
double TargetAltitude; // altitude to hold
|
||||||
double TargetAGL; // the terrain separation
|
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 alt_error_accum; // altitude error accumulator
|
||||||
double climb_error_accum; // climb error accumulator (for GS)
|
double climb_error_accum; // climb error accumulator (for GS)
|
||||||
double speed_error_accum; // speed error accumulator
|
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 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
|
// following for testing disengagement of autopilot upon pilot
|
||||||
// interaction with controls
|
// interaction with controls
|
||||||
double old_aileron;
|
double old_aileron;
|
||||||
double old_elevator;
|
double old_elevator;
|
||||||
double old_elevator_trim;
|
double old_elevator_trim;
|
||||||
double old_rudder;
|
double old_rudder;
|
||||||
|
|
||||||
// manual controls override beyond this value
|
// manual controls override beyond this value
|
||||||
double disengage_threshold;
|
double disengage_threshold;
|
||||||
|
|
||||||
|
@ -140,8 +140,8 @@ private:
|
||||||
SGPropertyNode *roll_out_node; // start rollout offset from desired heading 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 *roll_out_smooth_node; // rollout smoothing offset in degrees
|
||||||
|
|
||||||
SGPropertyNode *TargetClimbRate; // target climb rate
|
SGPropertyNode *TargetClimbRate; // target climb rate
|
||||||
SGPropertyNode *TargetDescentRate; // target decent rate
|
SGPropertyNode *TargetDescentRate; // target decent rate
|
||||||
SGPropertyNode *current_throttle; // current throttle (engine 0)
|
SGPropertyNode *current_throttle; // current throttle (engine 0)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -186,14 +186,14 @@ public:
|
||||||
void set_AutoThrottleEnabled( bool value );
|
void set_AutoThrottleEnabled( bool value );
|
||||||
|
|
||||||
/* inline void set_WayPoint( const double lon, const double lat,
|
/* inline void set_WayPoint( const double lon, const double lat,
|
||||||
const double alt, const string s ) {
|
const double alt, const string s ) {
|
||||||
waypoint = SGWayPoint( lon, lat, alt, SGWayPoint::WGS84, "Current WP" );
|
waypoint = SGWayPoint( lon, lat, alt, SGWayPoint::WGS84, "Current WP" );
|
||||||
} */
|
} */
|
||||||
inline double get_TargetLatitude() const {
|
inline double get_TargetLatitude() const {
|
||||||
return waypoint.get_target_lat();
|
return waypoint.get_target_lat();
|
||||||
}
|
}
|
||||||
inline double get_TargetLongitude() const {
|
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_lat( double val ) { old_lat = val; }
|
||||||
inline void set_old_lon( double val ) { old_lon = val; }
|
inline void set_old_lon( double val ) { old_lon = val; }
|
||||||
|
@ -231,15 +231,30 @@ public:
|
||||||
void update_old_control_values();
|
void update_old_control_values();
|
||||||
|
|
||||||
// accessors
|
// accessors
|
||||||
inline double get_MaxRoll() const { return MaxRoll; }
|
inline double get_MaxRoll() {
|
||||||
inline void set_MaxRoll( double val ) { MaxRoll = val; }
|
return fgGetFloat( "/autopilot/config/max-roll-deg" );
|
||||||
inline double get_RollOut() const { return RollOut; }
|
}
|
||||||
inline void set_RollOut( double val ) { RollOut = val; }
|
inline double get_RollOut() {
|
||||||
|
return fgGetFloat( "/autopilot/config/roll-out-deg" );
|
||||||
inline double get_MaxAileron() const { return MaxAileron; }
|
}
|
||||||
inline void set_MaxAileron( double val ) { MaxAileron = val; }
|
inline double get_MaxAileron() {
|
||||||
inline double get_RollOutSmooth() const { return RollOutSmooth; }
|
return fgGetFloat( "/autopilot/config/max-aileron" );
|
||||||
inline void set_RollOutSmooth( double val ) { RollOutSmooth = val; }
|
}
|
||||||
|
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:
|
private:
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue