From: curt Date: Sat, 24 Jun 2006 00:52:20 +0000 (+0000) Subject: Create a "passive" mode for the autopilot. This is analogous to running the X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=bcd9b071c549f5d71159d54817e17ad3fbbb972c;p=flightgear.git Create a "passive" mode for the autopilot. This is analogous to running the 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. --- diff --git a/src/Autopilot/xmlauto.cxx b/src/Autopilot/xmlauto.cxx index 2de17263e..9594d5f07 100644 --- a/src/Autopilot/xmlauto.cxx +++ b/src/Autopilot/xmlauto.cxx @@ -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; diff --git a/src/Autopilot/xmlauto.hxx b/src/Autopilot/xmlauto.hxx index b4cfdbce4..38cfef890 100644 --- a/src/Autopilot/xmlauto.hxx +++ b/src/Autopilot/xmlauto.hxx @@ -45,6 +45,8 @@ SG_USING_STD(deque); #include #include +#include
+ /** * 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 ),