libstp
Robotics library for Botball
Loading...
Searching...
No Matches
control_loop.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <vector>
5
7
9{
10
21class ControlLoop final : public ControlElement
22{
23public:
24 ControlLoop(ControlElement& controller, ControlElement& controlPath);
25
26 [[nodiscard]] double u() const { return u_; }
27 [[nodiscard]] double yMin() const { return y_min_; }
28 [[nodiscard]] double yMax() const { return y_max_; }
29 [[nodiscard]] double amplitude() const { return (y_max_ - y_min_) / 2; }
30
31 [[nodiscard]] std::string getType() const override { return "ControlLoop"; }
32 [[nodiscard]] double getLowestTimeConstant() const override;
33 void initialize(double dt) override;
34 double calculate(double w, double dt) override;
35 [[nodiscard]] int optimizeGetNumParameters() const override;
36 void optimizeSetParameters(const std::vector<double>& params, int startIdx) override;
37
38private:
39 ControlElement& controller_;
40 ControlElement& control_path_;
41
42 double u_{0};
43 double y_n1_{0};
44 double y_min_{0};
45 double y_max_{0};
46 int direction_{1};
47};
48
49} // namespace libstp::autotune::control
Abstract base for every control element (P, I, D, PT1, ...).
ControlLoop(ControlElement &controller, ControlElement &controlPath)
void optimizeSetParameters(const std::vector< double > &params, int startIdx) override
Load parameters from params starting at startIdx.
std::string getType() const override
Short type tag, e.g. "P", "PT1", "ControlLoop".
int optimizeGetNumParameters() const override
Number of tunable parameters this element consumes.
double getLowestTimeConstant() const override
Lowest time constant of the element, or -1 if it has none.
void initialize(double dt) override
Reset internal state for a simulation run at sample time dt.
double calculate(double w, double dt) override
Advance one sample: feed input u, return output.