1
0
Fork 0

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.
This commit is contained in:
curt 2006-06-24 00:52:20 +00:00
parent e7ed073c68
commit bcd9b071c5
2 changed files with 22 additions and 3 deletions

View 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;

View 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 ),