]> git.mxchange.org Git - flightgear.git/commitdiff
Playing around with altitude hold settings.
authorcurt <curt>
Mon, 13 Dec 1999 21:44:21 +0000 (21:44 +0000)
committercurt <curt>
Mon, 13 Dec 1999 21:44:21 +0000 (21:44 +0000)
src/Autopilot/autopilot.cxx

index e00930cc9c7603aa3c5808a61ffeabe4e397c9d2..66b88a9cb3636f55444a79df93608ff9fe018a36 100644 (file)
 
 #define mySlider puSlider
 
+// Climb speed constants
+const double min_climb = 70.0; // kts
+const double best_climb = 75.0;        // kts
+const double ideal_climb_rate = 500.0; // fpm
+
 /// These statics will eventually go into the class
 /// they are just here while I am experimenting -- NHV :-)
 // AutoPilot Gain Adjuster members
@@ -1340,23 +1345,29 @@ int fgAPRun( void ) {
 
        speed = get_speed();
 
-       if ( speed < 90.0 ) {
+       if ( speed < min_climb ) {
            max_climb = 0.0;
-       } else if ( speed < 100.0 ) {
-           max_climb = ( speed - 90.0 ) * 20;
-           //        } else if ( speed < 150.0 ) {
+       } else if ( speed < best_climb ) {
+           max_climb = ((best_climb - min_climb) - (best_climb - speed)) 
+               * ideal_climb_rate 
+               / (best_climb - min_climb);
        } else {                        
-           max_climb = ( speed - 100.0 ) * 4.0 + 200.0;
-       } //else { // this is NHV hack
-       //            max_climb = ( speed - 150.0 ) * 6.0 + 300.0;
-       //        }
+           max_climb = ( speed - best_climb ) * 10.0 + ideal_climb_rate;
+       }
+
+       // this first one could be optional if we wanted to allow
+       // better climb performance assuming we have the airspeed to
+       // support it.
+       if ( APData->TargetClimbRate > ideal_climb_rate ) {
+           APData->TargetClimbRate = ideal_climb_rate;
+       }
 
        if ( APData->TargetClimbRate > max_climb ) {
            APData->TargetClimbRate = max_climb;
        }
 
-       else if ( APData->TargetClimbRate < -400.0 ) {
-           APData->TargetClimbRate = -400.0;
+       if ( APData->TargetClimbRate < -ideal_climb_rate ) {
+           APData->TargetClimbRate = -ideal_climb_rate;
        }
 
        error = fgAPget_climb() - APData->TargetClimbRate;
@@ -1377,11 +1388,15 @@ int fgAPRun( void ) {
        prop_adj = prop_error / 2000.0;
 
        total_adj = 0.9 * prop_adj + 0.1 * int_adj;
-       if ( total_adj > 0.6 ) {
-           total_adj = 0.6;
-       }
-       else if ( total_adj < -0.2 ) {
-           total_adj = -0.2;
+       // if ( total_adj > 0.6 ) {
+       //     total_adj = 0.6;
+       // } else if ( total_adj < -0.2 ) {
+       //     total_adj = -0.2;
+       // }
+       if ( total_adj > 1.0 ) {
+           total_adj = 1.0;
+       } else if ( total_adj < -1.0 ) {
+           total_adj = -1.0;
        }
 
        controls.set_elevator( total_adj );