X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FAutopilot%2Fxmlauto.hxx;h=73cee4906264343f67c4bb9eb0ad39280f5c991d;hb=73e70fdb29c4c512779b6759d1e6aa487818e841;hp=1e840d82446d65d8e90d148120d6cb0273e82996;hpb=da5ea10d5db9675e6a5d75db5b33edfc350566b1;p=flightgear.git diff --git a/src/Autopilot/xmlauto.hxx b/src/Autopilot/xmlauto.hxx index 1e840d824..73cee4906 100644 --- a/src/Autopilot/xmlauto.hxx +++ b/src/Autopilot/xmlauto.hxx @@ -83,36 +83,21 @@ public: /** - * A simple proportional controler + * Roy Ovesen's PID controller */ class FGPIDController : public FGXMLAutoComponent { private: - // proportional component data - bool proportional; - double factor; - SGPropertyNode *offset_prop; - double offset_value; - - // integral component data - bool integral; - double gain; - double int_sum; - - // prep functions for error term - bool one_eighty; - - // post functions for output - bool clamp; - // debug flag bool debug; // Input values double y_n; // measured process value double r_n; // reference (set point) value + double y_scale; // scale process input from property system + double r_scale; // scale reference input from property system // Configuration values double Kp; // proportional gain @@ -150,6 +135,79 @@ public: }; +/** + * A simplistic P [ + I ] PID controller + */ + +class FGPISimpleController : public FGXMLAutoComponent { + +private: + + // proportional component data + bool proportional; + double Kp; + SGPropertyNode *offset_prop; + double offset_value; + + // integral component data + bool integral; + double Ki; + double int_sum; + + // post functions for output + bool clamp; + + // debug flag + bool debug; + + // Input values + double y_n; // measured process value + double r_n; // reference (set point) value + double y_scale; // scale process input from property system + double r_scale; // scale reference input from property system + + double u_min; // Minimum output clamp + double u_max; // Maximum output clamp + + +public: + + FGPISimpleController( SGPropertyNode *node ); + ~FGPISimpleController() {} + + void update( double dt ); +}; + + +/** + * Predictor - calculates value in x seconds future. + */ + +class FGPredictor : public FGXMLAutoComponent { + +private: + + // proportional component data + double last_value; + double average; + double seconds; + double filter_gain; + + // debug flag + bool debug; + + // Input values + double ivalue; // input value + +public: + + FGPredictor( SGPropertyNode *node ); + ~FGPredictor() {} + + void update( double dt ); +}; + + /** * Model an autopilot system. *