0 ADRC的核心思想

  通过扩张状态观测器ESO估计出原系统各个状态量和内外总扰动,然后利用线性状态反馈,即误差和误差的各阶导数的线性组合,也即是PD控制器,使系统镇定在平衡点。

1 参考链接

Chenglin Li:自抗扰控制理论(一)ADRC的原理

Chenglin Li:自抗扰控制理论(七)自抗扰设计流程

2 N阶含慢时变扰动的非线性系统

(1)y(n)=f(t,y(t),y˙(t),...,y(n1)(t))+bu.

3 自抗扰控制器示意图

  • 在不考虑滤波作用时,忽略跟踪微分器;
二阶系统自抗扰控制器示意图

4 LESO状态重构

(1)选取状态变量

(2)x1=y,x2=y˙,...,xn=y(n1).

(2)扩展状态变量

(3)xn+1=f(t,y(t),y˙(t),...,y(n1)(t)).

(3)状态空间形式

(4){x˙=Ax+Bu+Ew.y=Cx,AR(n+1)×(n+1)

(5)A=(01...00001...0...............00000),B=(0...b00),E=(0...01),C=(10...0).

(4)LESO方程

(6){x^˙=Ax^+Bu+G(yy^).y^=Cx^G=(β1β2...βn1βn).

 x~=xx^ ,可以推导出LESO的误差方程,证明LESO是有界输入-有界输出的,并且误差上界可以由参数 βi 调节。

  • 使用matlab描述LESO微分方程
function sys=mdlDerivatives(t,x,u,N,Wc,Wo,b0)
    global beta_Wo
    
    y=u(1); %输出反馈
    ucon=u(2) ;
    e=y-x(1);
    dx=zeros(N+1, 1) ;
    for i=1: N-1
        dx(i)=beta_Wo(i)*e+x(i+1) ; %LESO微分方描述   
        
    end
    
    dx(N)=beta_Wo(N)*e +x(N+1)+b0*ucon ;
    dx(N+1)=beta_Wo(N+1)*e ;
    
    
sys = dx ;

(5)选择适当的G,可以使观测器近似跟踪系统状态变量

(7)xix^i.

(6)LESO增益系数

特征方程:

(8)LLESO(s)=sn+1+β1sn+β2sn1+...+βn1.

将LESO极点统一配置到左半实轴同一位置,可将调节参数缩减为一个(LESO带宽 ωo 

(9)LLESO(s)=(s+ωo)n+1.

得到特征多项式系数:

(10)βi=Cn+1iωoi.(i=1,2,3...,n+1).

(7)C++程序计算LESO系数

//组合数计算公式
double LADRC::comb(int n, int m)
{
	if (n < 0 || n < 0)
		return 0;
	else
		return jiecheng(n) / jiecheng(m) / jiecheng(n - m);

}
//计算阶乘子函数
double LADRC::jiecheng(int n)
{
	if (n < 0)
		return 0;
	else if (n == 0 || n == 1)
		return 1.0;
	else
		return n*jiecheng(n - 1);
}
double LADRC::powj(double Wo, int n)
{
	int i;
	double z=1;
	if (n == 0)
		return 1;
	else
	{
		for (i = n; i >= 1; i--)
		{
			z = z*Wo;
		}
	}
	return z;

}
//生成控制器系数
//生成LESO系数
for (i = 0; i < ODE_NUM + 1; i++)
{
		beta_Wo[i] = powj(this->Wc, i + 1)*comb(ODE_NUM + 1, i + 1);
}

5 线性控制律设计

(1)估计补偿扰动控制律(11)u=1b0(a1(x^1ref)+a2x^2+...+an1x^n1+anx^n+x^n+1).

  • 描述控制器
function sys=mdlOutputs(t,x,u,N,Wc,Wo,b0)
global beta_Wc

    ref=u(1);
    e=u(2)- ref;
    u0=e*beta_Wc(1)+u(N+2);
    for i=2 : N
        u0=u0+beta_Wc( i )*u(i+1) ;
        
    end
    

sys = -u0/b0 ;

(2)将控制器生成的控制量 u 代入系统可得:

(12)x(n)+an1x(n1)+...+a2x˙+a1x=0.

(3)控制器特征方程

(12)sn+ans(n1)+...+a2s+a1s0=0.

(4)将特征值统一配置在左半实轴同一位置(控制器带宽 ωc 

(13)(s+ωc)n=0.

(5)比较可得控制器系数

(14)ai=Cnn+1iωcn+1i.(i=1,2,3...,n).

(6)C++程序计算控制律系数

	//控制律系数
	for (i = 0; i < ODE_NUM;i++)
	{
		beta_Wc[i] = powj(this->Wc, ODE_NUM-i)*comb(ODE_NUM , ODE_NUM-i);
	}

——2020.12.01——

Note:

(1)LESO带宽 ωo 增大,有助于LADRC的稳定性和鲁棒性,但过大的 ωo 可能导致控制器输出过大,不利于工程应用,实际调参需要折中[1]

(2)对于二阶系统,带宽 ωo 虽然不会影响超调量的大小,但是会影响LESO的跟踪速度,ωo 越大,系统响应越快,但是在实际系统中, ωo 的提高受观测噪声等的限制。增大 ωo ,同时高频带增益也随之增加,噪声放大作用明显;

(3)约定当且仅当系统的状态 xi 和LESO跟踪误差 x~ 都稳定时,称LADRC系统稳定;

(4)假设 KG=b0/b, KG 偏离1越远,系统相角裕度越小。当 KG=4 时,系统不稳定,因此为了改善控制性能,参数 b0 的选取应该尽可能接近真实参数 b [2]

(5)实际调试参数时,首先确定系统的阶数N, 其次确定一个Wo, Wc不变(如Wo=50, Wc=20),再按照数量级,依次调试b0, 如0.01, 0.1, 1, 10, 100,..., 直到系统输出满足期望状态;

(6)增大带宽会导致系统噪声过大,因此可在LESO前端设置滤波器来抑制其影响;

(7)LESO的微分方程的求解,一般依赖初始值(RungeKutta),初值对系统输出的超调量有一定影响;

(8)Wo和Wc的单位都是rad/sec.

一阶系统的自抗扰控制器仿真
三阶系统的自抗扰控制器仿真
LESO微分方程RungeKutta初值为rand(4,1)
LESO微分方程RungeKutta初值为[0,0,0,1]

——2020.12.14——

参考

  1. ^二阶系统线性自抗扰控制的稳定性条件.自动化学报.金辉宇
  2. ^二阶系统线性自抗扰控制器频带特性与参数配置研究.控制理论与应用,袁东等。