oops , I do it every time ...
Index: xmlauto.cxx
===================================================================
RCS file: /var/cvs/FlightGear-0.9/source/src/Autopilot/xmlauto.cxx,v
retrieving revision 1.30
diff -B -b -w -i -U 3 -r1.30 xmlauto.cxx
--- xmlauto.cxx 24 Mar 2008 22:46:47 -0000 1.30
+++ xmlauto.cxx 30 Mar 2008 21:02:48 -0000
@@ -173,22 +173,102 @@
config = child->getChild( "Ti" );
if ( config != NULL ) {
+ SGPropertyNode *val = config->getChild( "value" );
+ if ( val != NULL ) {
+ Ti = val->getDoubleValue();
+ }
+
+ SGPropertyNode *prop = config->getChild( "prop" );
+ if ( prop != NULL ) {
+ Ti_prop = fgGetNode( prop->getStringValue(), true );
+ if ( val != NULL ) {
+ Ti_prop->setDoubleValue(Kp);
+ }
+ }
+
+ // output deprecated usage warning
+ if (val == NULL && prop == NULL) {
Ti = config->getDoubleValue();
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Deprecated Ti config.
Please use <prop> and/or <value> tags." );
+ if ( name.length() ) {
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Section = " << name );
+ }
+ }
}
config = child->getChild( "Td" );
if ( config != NULL ) {
+ SGPropertyNode *val = config->getChild( "value" );
+ if ( val != NULL ) {
+ Td = val->getDoubleValue();
+ }
+
+ SGPropertyNode *prop = config->getChild( "prop" );
+ if ( prop != NULL ) {
+ Td_prop = fgGetNode( prop->getStringValue(), true );
+ if ( val != NULL ) {
+ Td_prop->setDoubleValue(Kp);
+ }
+ }
+
+ // output deprecated usage warning
+ if (val == NULL && prop == NULL) {
Td = config->getDoubleValue();
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Deprecated Td config.
Please use <prop> and/or <value> tags." );
+ if ( name.length() ) {
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Section = " << name );
+ }
+ }
}
config = child->getChild( "u_min" );
if ( config != NULL ) {
+ SGPropertyNode *val = config->getChild( "value" );
+ if ( val != NULL ) {
+ u_min = val->getDoubleValue();
+ }
+
+ SGPropertyNode *prop = config->getChild( "prop" );
+ if ( prop != NULL ) {
+ umin_prop = fgGetNode( prop->getStringValue(), true );
+ if ( val != NULL ) {
+ umin_prop->setDoubleValue(u_min);
+ }
+ }
+
+ // output deprecated usage warning
+ if (val == NULL && prop == NULL) {
u_min = config->getDoubleValue();
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Deprecated u_min config.
Please use <prop> and/or <value> tags." );
+ if ( name.length() ) {
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Section = " << name );
+ }
+ }
}
config = child->getChild( "u_max" );
if ( config != NULL ) {
+ SGPropertyNode *val = config->getChild( "value" );
+ if ( val != NULL ) {
+ u_max = val->getDoubleValue();
+ }
+
+ SGPropertyNode *prop = config->getChild( "prop" );
+ if ( prop != NULL ) {
+ umax_prop = fgGetNode( prop->getStringValue(), true );
+ if ( val != NULL ) {
+ umax_prop->setDoubleValue(u_max);
+ }
+ }
+
+ // output deprecated usage warning
+ if (val == NULL && prop == NULL) {
u_max = config->getDoubleValue();
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Deprecated u_max config.
Please use <prop> and/or <value> tags." );
+ if ( name.length() ) {
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Section = " << name );
+ }
+ }
}
} else {
SG_LOG( SG_AUTOPILOT, SG_WARN, "Error in autopilot config logic" );
@@ -260,6 +340,10 @@
double delta_u_n = 0.0; // incremental output
double u_n = 0.0; // absolute output
double Ts; // sampling interval (sec)
+ if (umin_prop != NULL)u_min = umin_prop->getDoubleValue();
+ if (umax_prop != NULL)u_max = umax_prop->getDoubleValue();
+ if (Ti_prop != NULL)Ti = Ti_prop->getDoubleValue();
+ if (Td_prop != NULL)Td = Td_prop->getDoubleValue();
elapsedTime += dt;
if ( elapsedTime <= desiredTs ) {
@@ -466,7 +550,24 @@
prop = child->getChild( "Kp" );
if ( prop != NULL ) {
+ SGPropertyNode *val = prop->getChild( "value" );
+ if ( val != NULL ) {
+ Kp = val->getDoubleValue();
+ }
+
+ SGPropertyNode *prop1 = prop->getChild( "prop" );
+ if ( prop1 != NULL ) {
+ Kp_prop = fgGetNode( prop1->getStringValue(), true );
+ if ( val != NULL ) {
+ Kp_prop->setDoubleValue(Kp);
+ }
+ }
+
+ // output deprecated usage warning
+ if (val == NULL && prop1 == NULL) {
Kp = prop->getDoubleValue();
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Deprecated Kp config.
Please use <prop> and/or <value> tags." );
+ }
proportional = true;
}
@@ -478,13 +579,47 @@
prop = child->getChild( "u_min" );
if ( prop != NULL ) {
+ SGPropertyNode *val = prop->getChild( "value" );
+ if ( val != NULL ) {
+ u_min = val->getDoubleValue();
+ }
+
+ SGPropertyNode *prop1 = prop->getChild( "prop" );
+ if ( prop1 != NULL ) {
+ umin_prop = fgGetNode( prop1->getStringValue(), true );
+ if ( val != NULL ) {
+ umin_prop->setDoubleValue(u_min);
+ }
+ }
+
+ // output deprecated usage warning
+ if (val == NULL && prop1 == NULL) {
u_min = prop->getDoubleValue();
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Deprecated u_min config.
Please use <prop> and/or <value> tags." );
+ }
clamp = true;
}
prop = child->getChild( "u_max" );
if ( prop != NULL ) {
+ SGPropertyNode *val = prop->getChild( "value" );
+ if ( val != NULL ) {
+ u_max = val->getDoubleValue();
+ }
+
+ SGPropertyNode *prop1 = prop->getChild( "prop" );
+ if ( prop1 != NULL ) {
+ umax_prop = fgGetNode( prop1->getStringValue(), true );
+ if ( val != NULL ) {
+ umax_prop->setDoubleValue(u_max);
+ }
+ }
+
+ // output deprecated usage warning
+ if (val == NULL && prop1 == NULL) {
u_max = prop->getDoubleValue();
+ SG_LOG( SG_AUTOPILOT, SG_WARN, "Deprecated u_max config.
Please use <prop> and/or <value> tags." );
+ }
clamp = true;
}
} else {
@@ -498,6 +633,10 @@
void FGPISimpleController::update( double dt ) {
+ if (umin_prop != NULL)u_min = umin_prop->getDoubleValue();
+ if (umax_prop != NULL)u_max = umax_prop->getDoubleValue();
+ if (Kp_prop != NULL)Kp = Kp_prop->getDoubleValue();
+
if (enable_prop != NULL && enable_prop->getStringValue() == enable_value) {
if ( !enabled ) {
// we have just been enabled, zero out int_sum
Index: xmlauto.hxx
===================================================================
RCS file: /var/cvs/FlightGear-0.9/source/src/Autopilot/xmlauto.hxx,v
retrieving revision 1.16
diff -B -b -w -i -U 3 -r1.16 xmlauto.hxx
--- xmlauto.hxx 17 Feb 2008 09:44:03 -0000 1.16
+++ xmlauto.hxx 30 Mar 2008 21:02:48 -0000
@@ -122,10 +122,13 @@
// (usually 0.0)
double Ti; // Integrator time (sec)
+ SGPropertyNode_ptr Ti_prop;
double Td; // Derivator time (sec)
-
+ SGPropertyNode_ptr Td_prop;
double u_min; // Minimum output clamp
+ SGPropertyNode_ptr umin_prop;
double u_max; // Maximum output clamp
+ SGPropertyNode_ptr umax_prop;
// Previous state tracking values
double ep_n_1; // ep[n-1] (prop error)
@@ -159,6 +162,7 @@
// proportional component data
bool proportional;
double Kp;
+ SGPropertyNode_ptr Kp_prop;
SGPropertyNode_ptr offset_prop;
double offset_value;
@@ -180,7 +184,9 @@
double r_scale; // scale reference input from property system
double u_min; // Minimum output clamp
+ SGPropertyNode_ptr umin_prop;
double u_max; // Maximum output clamp
+ SGPropertyNode_ptr umax_prop;
public:
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Flightgear-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/flightgear-devel