#include <simgear/compiler.h>
-#include STL_STRING
+#include <string>
#include <vector>
#include <deque>
-SG_USING_STD(string);
-SG_USING_STD(vector);
-SG_USING_STD(deque);
+using std::string;
+using std::vector;
+using std::deque;
#include <simgear/props/props.hxx>
#include <simgear/structure/subsystem_mgr.hxx>
* Base class for other autopilot components
*/
-class FGXMLAutoComponent {
+class FGXMLAutoComponent : public SGReferenced {
protected:
// Configuration values
double Kp; // proportional gain
+ SGPropertyNode_ptr Kp_prop;
double alpha; // low pass filter weighing factor (usually 0.1)
double beta; // process value weighing factor for
// (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)
// proportional component data
bool proportional;
double Kp;
+ SGPropertyNode_ptr Kp_prop;
SGPropertyNode_ptr offset_prop;
double offset_value;
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:
double Tf; // Filter time [s]
unsigned int samples; // Number of input samples to average
double rateOfChange; // The maximum allowable rate of change [1/s]
+ double gainFactor;
+ double output_min_clamp;
+ double output_max_clamp;
+ SGPropertyNode_ptr gain_prop;
+
deque <double> output;
deque <double> input;
- enum filterTypes { exponential, doubleExponential, movingAverage, noiseSpike };
+ enum filterTypes { exponential, doubleExponential, movingAverage,
+ noiseSpike, gain, reciprocal };
filterTypes filterType;
bool debug;
protected:
- typedef vector<FGXMLAutoComponent *> comp_list;
+ typedef vector<SGSharedPtr<FGXMLAutoComponent> > comp_list;
private: