初探自抗扰控制(ADRC)

  1. 1. 跟踪微分器TD
  2. 2. 扩张状态观测器ESO
  3. 3. 非线性状态误差反馈控制率NLSEF

学习控制的小伙伴们大概都听说过自抗扰控制ADRC,但你未必知晓自抗扰控制的提出者——韩京清先生。是的,自抗扰控制这一理论方法,正是由我们中国科学家发明的。
韩京清,系统与控制专家,我国控制理论和应用的早期开拓者之一。用最优控制理论提出了拦截问题中新的制导概念和方法;在国内率先推动控制系统计算机辅助设计软件的开发和研究。
这次我们就来初步了解一下自抗扰控制。
韩老提出的自抗扰控制由三部分组成:

  1. 跟踪微分器(TD)
  2. 扩张状态观测器(ESO)
  3. 非线性状态误差反馈控制率(NLSEF)

v2-ba80e3fe72af3e5b746f1919c596f827_r.jpg
这三部分一起,构成了ADRC自抗扰控制理论,但是,这三部分不仅仅只能用在ADRC技术中,还可以单独提取出来,与其他控制理论相结合使用。例如跟踪微分器TD就可以用来产生平滑信号来跟踪输入,并且还可以计算该平滑信号的微分,扩张状态观测器ES还可用在观测系统除状态变量外的一些扰动上等等。由此可见,自抗扰控制不仅是一种控制方法,同时还为工程师们提供了解决工程问题的方法。
下面我们分别讨论ADRC这三个重要组成部分。

跟踪微分器TD

在讲跟踪微分器之前,想一想平常我们是怎样对数字信号作微分的?是不是用差分替代呢?
常用的几种方法:
z变换方法:Snipaste_2020-04-15_14-41-42.png
后向差分法:Snipaste_2020-04-15_14-37-57.png
前向差分法:Snipaste_2020-04-15_14-39-22.png
双线性法:Snipaste_2020-04-15_14-39-59.png
使用这些方法可以将连续系统传函(s域)转化为离散系统传函(z域),这样即可离散地描述微分,但是往往这样面临着局限性,通常由于传感器测量噪声导致微分噪声明显。

再让我们来看一下TD是什么样子的,
Snipaste_2020-04-15_14-56-05.png
其中:
Snipaste_2020-04-15_15-06-21.png
代码实现:

void TD_Function(TD *tdtd)
{
float d,d0,y,a0,a=0;
tdtd->x = tdtd->x1 - tdtd->aim;
d = tdtd->r*tdtd->h;    d0=tdtd->h * d;    y = tdtd->x + tdtd->h*tdtd->x2;
a0 = sqrt(d*d+8*tdtd->r*fabs(y));
if(fabs(y)>d0)    
{
    a = tdtd->x2+(a0-d)*Sgn(y)/2;
}
else
{
    a = tdtd->x2 + y/tdtd->h;
}

    if(fabs(a)>d)    
{
    y=-1*tdtd->r*Sgn(a);
}
else
{
    y=-1*tdtd->r*a/d;
}
tdtd->x1 +=  0.001f*tdtd->x2;
tdtd->x2 +=  0.001f*y; 
}

跟踪微分器的参数主要有两个:快速因子r和滤波因子h。其中,r与跟踪速度呈正相关,然而,随之带来的是噪声放大的副作用; h与滤波效果呈正相关,但当h增大时,跟踪信号的相位损失也会随之增加。
简单来讲,可以将TD理解为一个低通滤波器,输出的x1就是滤波后的结果,它是跟踪输入信号的。输出的x2则代表对x1的微分,这样降低了输入信号噪声对微分效果的影响。
在自抗扰控制中,使用跟踪微分器获得状态变量的微分,是用来在系统动态跟踪目标时,前馈掉系统输出中关于x的微分项的。比如在电机伺服控制中,可以通过跟踪微分器跟踪x_des的微分,在速度目标中加以补偿,以达到更好的动态效果,这样的方法常称为速度前馈。

扩张状态观测器ESO

为了进一步地消除扰动对系统的影响,我们通过扩张状态观测器对扰动进行观测,通过前馈补偿到系统模型中,这样的方法就叫做扩张状态观测器ESO。在系统微分方程中加入扰动项,并且将扰动视作状态变量(通常视扰动的导数为0),这样构造的新的状态方程就叫做扩张(Extend)的状态方程。使用这个状态方程构建观测器,通过测量量来观测状态量,就能得到扰动。这就是扩张状态观测器ESO的中心思想。
当然,与此同时,此观测器还可得到其他状态变量的观测值。
20190318105009907.png

非线性状态误差反馈控制率NLSEF

非线性状态误差反馈控制器结构如下:
Snipaste_2020-04-15_15-46-46.png
韩老论文中这样描述这个状态变量非线性组合:
Snipaste_2020-04-15_15-56-11.png
简单理解的话,NLSEF可以看作是一个非线性PID控制器。