ADRC控制用C++写出代码
时间: 2024-02-21 13:59:02 浏览: 42
ADRC(Active Disturbance Rejection Control,主动干扰抑制控制)是一种新型的控制方法,可以有效地抑制多种干扰,具有很高的控制精度和稳定性。以下是一个简单的ADRC控制器的C++代码示例:
```c++
#include <iostream>
using namespace std;
class ADRC
{
public:
ADRC(double h, double r1, double r2, double r3, double b0, double b1, double b2, double b3, double a1, double a2, double a3)
{
h_ = h;
r1_ = r1;
r2_ = r2;
r3_ = r3;
b0_ = b0;
b1_ = b1;
b2_ = b2;
b3_ = b3;
a1_ = a1;
a2_ = a2;
a3_ = a3;
z1_ = 0;
z2_ = 0;
z3_ = 0;
u0_ = 0;
u1_ = 0;
u2_ = 0;
u3_ = 0;
e0_ = 0;
e1_ = 0;
e2_ = 0;
e3_ = 0;
u_ = 0;
}
double get_control(double y, double yd)
{
e0_ = yd - y;
e1_ = e0_ - e1_;
e2_ = e1_ - e2_;
e3_ = e2_ - e3_;
z1_ = z1_ + h_ * z2_;
z2_ = z2_ + h_ * z3_;
z3_ = z3_ + h_ * (b0_ * e0_ + b1_ * e1_ + b2_ * e2_ + b3_ * e3_ - a1_ * z1_ - a2_ * z2_ - a3_ * z3_);
u0_ = r1_ * z1_ + r2_ * z2_ + r3_ * z3_;
u1_ = u0_ - u1_;
u2_ = u1_ - u2_;
u3_ = u2_ - u3_;
u_ = u3_;
return u_;
}
private:
double h_;
double r1_, r2_, r3_;
double b0_, b1_, b2_, b3_;
double a1_, a2_, a3_;
double z1_, z2_, z3_;
double u0_, u1_, u2_, u3_;
double e0_, e1_, e2_, e3_;
double u_;
};
int main()
{
double y = 0, yd = 1;
double t = 0, h = 0.01;
ADRC adrc(h, 1, 0.5, 0.2, 1, -1.3067, 0.4789, 0.0641, 2.8702, -2.3042, 0.4686);
while (t < 10)
{
double u = adrc.get_control(y, yd);
y = y + h * u;
cout << t << " " << y << " " << u << endl;
t += h;
}
return 0;
}
```
在这个示例中,我们定义了一个名为`ADRC`的类,该类包含了ADRC控制器的各个参数和状态变量。`get_control`函数接收当前系统输出`y`和期望输出`yd`作为输入,并返回控制量`u`。在`main`函数中,我们使用一个简单的欧拉积分方法对系统进行模拟,并输出系统的状态和控制量。