]> git.mxchange.org Git - flightgear.git/commitdiff
Create a "passive" mode for the autopilot. This is analogous to running the
authorcurt <curt>
Sat, 24 Jun 2006 00:52:20 +0000 (00:52 +0000)
committercurt <curt>
Sat, 24 Jun 2006 00:52:20 +0000 (00:52 +0000)
autopilot with the servos off.  In otherwords, the computer goes through the
motions of computing the desired behavior (pitch or roll) but doesn't actually
drive the outputs.  This is potentially useful when implimenting a flight
director.

src/Autopilot/xmlauto.cxx
src/Autopilot/xmlauto.hxx

index 2de17263ef9a59d46f8878b5f6a5411ac1b5867f..9594d5f07583dc23ed1856662f5d252d97eadf6b 100644 (file)
@@ -79,6 +79,10 @@ FGPIDController::FGPIDController( SGPropertyNode *node ):
             if ( val != NULL ) {
                 enable_value = val->getStringValue();
             }
+            SGPropertyNode *pass = child->getChild( "honor-passive" );
+            if ( pass != NULL ) {
+                honor_passive = pass->getBoolValue();
+            }
         } else if ( cname == "input" ) {
             SGPropertyNode *prop = child->getChild( "prop" );
             if ( prop != NULL ) {
@@ -338,9 +342,18 @@ void FGPIDController::update( double dt ) {
         edf_n_2 = edf_n_1;
         edf_n_1 = edf_n;
 
-        unsigned int i;
-        for ( i = 0; i < output_list.size(); ++i ) {
-            output_list[i]->setDoubleValue( u_n );
+        // passive_ignore == true means that we go through all the
+        // motions, but drive the outputs.  This is analogous to
+        // running the autopilot with the "servos" off.  This is
+        // helpful for things like flight directors which position
+        // their vbars from the autopilot computations.
+        if ( passive_mode->getBoolValue() && honor_passive ) {
+            // skip output step
+        } else {
+            unsigned int i;
+            for ( i = 0; i < output_list.size(); ++i ) {
+                output_list[i]->setDoubleValue( u_n );
+            }
         }
     } else if ( !enabled ) {
         ep_n  = 0.0;
index b4cfdbce4a6d978fe8253f7a95ad359d1dbbedd5..38cfef890dc4957409b05878a6a3c2846f4f5817 100644 (file)
@@ -45,6 +45,8 @@ SG_USING_STD(deque);
 #include <simgear/props/props.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
 
+#include <Main/fg_props.hxx>
+
 
 /**
  * Base class for other autopilot components
@@ -57,7 +59,9 @@ protected:
     string name;
 
     SGPropertyNode_ptr enable_prop;
+    SGPropertyNode_ptr passive_mode;
     string enable_value;
+    bool honor_passive;
     bool enabled;
 
     SGPropertyNode_ptr input_prop;
@@ -69,7 +73,9 @@ public:
 
     FGXMLAutoComponent() :
       enable_prop( NULL ),
+      passive_mode( fgGetNode("/autopilot/settings/passive-mode", true) ),
       enable_value( "" ),
+      honor_passive( false ),
       enabled( false ),
       input_prop( NULL ),
       r_n_prop( NULL ),