自抗扰控制(ADRC):概念、数学原理、核心功能与工程实践详解

一、什么是自抗扰控制(Active Disturbance Rejection Control,ADRC)?

1.1 基本定义

自抗扰控制(Active Disturbance Rejection Control,简称 ADRC)是一种以主动估计和补偿系统总扰动为核心思想的现代控制方法。

其核心思想可以概括为:

不必完全弄清楚被控对象内部发生了什么,只要能够实时观测系统受到的综合扰动,并及时进行补偿,就可以实现对系统的有效控制。

这里有三个关键词:

  • 主动(Active):不是被动地等待扰动发生后再进行调整,而是主动估计扰动,并实时采取补偿措施。
  • 自抗(Disturbance Rejection):控制系统能够主动抵抗外部扰动、内部不确定性以及模型误差。
  • 控制(Control):通过控制输入改变被控对象的行为,使其跟踪目标值,并保持稳定。

ADRC 并不是一种通信协议(Communication Protocol),而是一种控制理论与控制器设计方法。 它可以应用于电机控制、机器人控制、温度控制、飞行器控制、电力电子控制等领域。

例如,考虑一个电机转速控制系统:

我们希望电机始终保持在 1500 r/min,但实际运行时可能出现以下情况:

  • 电机负载突然增加,导致转速下降。
  • 电源电压发生波动,导致电机输出转矩变化。
  • 电机温度升高,导致绕组电阻发生变化。
  • 电机内部存在摩擦、死区以及其他非线性因素。
  • 实际电机与理论数学模型之间存在偏差。

传统控制方法通常需要针对这些因素建立数学模型,或者通过调整控制参数来改善控制效果。

而 ADRC 的思路有所不同:

它不要求事先精确知道每一种扰动的具体来源,而是把这些影响统一看作一个综合扰动,实时估计其大小,再通过控制输入抵消其影响。

这就是 ADRC 最重要的设计思想。

1.2 为什么会出现 ADRC?——设计背景与历史原因

要理解 ADRC 为什么出现,需要先理解传统控制理论面临的一个问题:现实世界中的被控对象往往没有理想的数学模型。

经典控制理论(Classical Control Theory)和现代控制理论(Modern Control Theory)通常建立在数学模型的基础上。

例如,一个简单的质量块运动系统可以表示为:

m x ¨ = F m\ddot{x}=F mx¨=F

其中:

  • m m m:物体质量。
  • x x x:物体位置。
  • x ˙ \dot{x} x˙:物体速度。
  • x ¨ \ddot{x} x¨:物体加速度。
  • F F F:施加在物体上的力。

如果我们希望控制物体的位置,就可以根据这个数学模型设计控制器。

但现实中的系统通常并不这么简单。

假设物体在运动时还受到摩擦力、风力和未知外力的影响,那么系统变成:

m x ¨ = F + F f + F w + F d m\ddot{x}=F+F_f+F_w+F_d mx¨=F+Ff​+Fw​+Fd​

其中:

  • F f F_f Ff​:摩擦力。
  • F w F_w Fw​:风力。
  • F d F_d Fd​:其他未知扰动力。

此时,控制器如果仍然按照理想模型 m x ¨ = F m\ddot{x}=F mx¨=F 进行设计,就会产生模型误差。

更麻烦的是,这些扰动可能随时间变化,甚至无法准确测量。

例如,机器人手臂在抓取物体时:

  • 空载时,机器人可以按照原来的控制参数正常运动;
  • 但当它抓起一个重量未知的物体时,机械臂的负载发生变化,原来的控制模型就不再准确。

如果每次负载变化都需要重新辨识模型、重新调整控制器,那么控制系统的设计和维护成本就会很高。

这就引出了一个重要问题:

能不能设计一种控制器,不需要精确掌握所有扰动的来源,也不需要每次扰动发生后重新建立模型,却依然能够保持良好的控制效果?

ADRC 正是围绕这个问题发展起来的。

1.3 ADRC 的历史发展

ADRC 的思想主要由中国控制理论专家**韩京清(Jingqing Han)**提出并发展。

其发展过程可以概括为:

经典控制理论:依赖数学模型

实际系统:存在模型误差和未知扰动

韩京清提出自抗扰控制思想

扩张状态观测器 ESO

跟踪微分器 TD 与非线性状态误差反馈 NLSEF

完整 ADRC 控制框架

高阶 ADRC 理论与参数化设计

线性 ADRC 与工程简化应用

几个重要的历史节点:

  • 20 世纪 80 年代末至 90 年代:韩京清开始系统研究自抗扰控制思想,重点解决模型不确定性和未知扰动问题。
  • 1998 年:韩京清发表《自抗扰控制器及其应用》,系统介绍 ADRC 的基本结构和应用思想。
  • 2003 年:Zhiqiang Gao 发表关于 ADRC 参数化设计的研究,将 ADRC 的工程设计和参数整定进一步系统化。
  • 2000 年代以后:ADRC 逐渐发展出**线性自抗扰控制(Linear ADRC,LADRC)**等形式,降低了工程应用中的参数整定难度。
  • 近年来:ADRC 被应用于运动控制、电机控制、机器人、航空航天以及新能源等领域。

这里需要特别强调:

ADRC 的重要理论贡献并不是简单地设计了一种新的 PID 算法,而是提出了通过扩张状态观测器(ESO)主动估计系统总扰动,并在控制过程中进行补偿的设计框架。

1.4 一个直观例子:为什么 ADRC 有价值?

考虑一个汽车定速巡航系统。

驾驶员设定车速为 100 km/h。

当汽车在平路行驶时,发动机输出功率能够维持目标速度。

当汽车突然进入上坡路段时,汽车受到的阻力增加,车速开始下降。

此时,控制系统面临的问题是:如何让车速重新回到 100 km/h?

传统 PID 控制器主要根据速度误差进行调节:

e ( t ) = v r e f ( t ) − v ( t ) e(t)=v_{\mathrm{ref}}(t)-v(t) e(t)=vref​(t)−v(t)

速度下降后,误差增大,PID 增加发动机输出。

而 ADRC 的思路是:

  1. 通过观测器监测汽车的速度及其变化趋势。
  2. 根据系统输入和实际响应,估计上坡阻力等综合扰动。
  3. 计算需要增加多少发动机输出才能抵消这部分扰动。
  4. 将扰动补偿与常规跟踪控制结合起来。

因此,ADRC 不仅关注汽车当前速度偏离目标值多少,还关注系统当前受到多大的综合扰动。

这也是它与传统误差反馈控制的一个重要区别。


二、ADRC 的技术原理与数学原理

这是理解 ADRC 最重要的部分。

要理解 ADRC,首先需要理解一个核心概念:

总扰动(Total Disturbance)。

2.1 什么是总扰动?

在传统控制系统中,我们通常把被控对象描述为:

x ˙ = f ( x , u ) \dot{x}=f(x,u) x˙=f(x,u)

其中:

  • x x x:系统状态。
  • u u u:控制输入。
  • f f f:系统动力学模型。

但真实系统可能还存在外部扰动和内部不确定性。

因此,更实际的模型是:

x ˙ = f ( x , u ) + d ( t ) \dot{x}=f(x,u)+d(t) x˙=f(x,u)+d(t)

这里的 d ( t ) d(t) d(t) 表示未知扰动。

问题在于,真实系统中的未知因素往往很多。

例如:

  • 外部负载变化。
  • 摩擦力变化。
  • 参数漂移。
  • 非线性因素。
  • 未建模动态。
  • 环境变化。

ADRC 的关键思想是:不必分别建模这些未知因素,而是把它们统一合并成一个总扰动。

例如,考虑一个二阶系统:

y ¨ = f ( y , y ˙ , t ) + b u \ddot{y}=f(y,\dot{y},t)+bu y¨​=f(y,y˙​,t)+bu

其中:

  • y y y:系统输出。
  • u u u:控制输入。
  • b b b:控制输入对应的实际增益。
  • f ( y , y ˙ , t ) f(y,\dot y,t) f(y,y˙​,t):系统中未知或不确定的动态部分。

由于 f f f 难以精确获取,我们可以引入一个已知的控制增益估计值 b 0 b_0 b0​,然后重新整理:

y ¨ = f ( y , y ˙ , t ) + b 0 u + ( b − b 0 ) u \ddot{y}=f(y,\dot{y},t)+b_0u+(b-b_0)u y¨​=f(y,y˙​,t)+b0​u+(b−b0​)u

定义总扰动:

d ( t ) = f ( y , y ˙ , t ) + ( b − b 0 ) u \boxed{d(t)=f(y,\dot{y},t)+(b-b_0)u} d(t)=f(y,y˙​,t)+(b−b0​)u​

于是系统可以改写为:

y ¨ = d ( t ) + b 0 u \boxed{\ddot{y}=d(t)+b_0u} y¨​=d(t)+b0​u​

这就是 ADRC 的一个基本建模形式。

注意,这里的 d ( t ) d(t) d(t) 不只是外部扰动,它还包含:

  • 原始系统未知动态。
  • 系统参数误差。
  • 控制增益估计误差。
  • 其他未建模因素。

ADRC 最重要的建模技巧,就是把复杂的未知系统转换为一个结构简单、但包含未知总扰动的等效系统。

2.2 ADRC 的核心架构

经典 ADRC 通常由三个核心部分组成:

  1. 跟踪微分器(Tracking Differentiator,TD)。
  2. 扩张状态观测器(Extended State Observer,ESO)。
  3. 非线性状态误差反馈(Nonlinear State Error Feedback,NLSEF)。

最后还包括扰动补偿环节(Disturbance Compensation)。

它们分别负责不同的任务:

组成部分核心任务直观理解
TD处理参考输入,生成平滑信号及其导数给控制系统规划平滑的目标轨迹
ESO估计系统状态和总扰动给系统安装一个能够估计未知因素的观察器
NLSEF根据状态误差生成控制量根据偏差决定应该施加多大的控制力度
扰动补偿抵消估计得到的总扰动提前抵消未知因素对系统的影响

下面逐个解释。

2.3 跟踪微分器(TD)

跟踪微分器的主要作用是生成平滑的参考信号,并估计参考信号的微分信息。

为什么需要它?

假设我们希望电机转速从 0 r/min 突然变化到 3000 r/min。

如果直接把 3000 r/min 作为控制目标,那么参考输入会产生一个阶跃变化。

阶跃信号在数学上具有很大的瞬时变化率,这可能导致控制输入剧烈变化。

尤其是在机械系统中,突然加速可能引起:

  • 机械冲击。
  • 电机电流突变。
  • 结构振动。
  • 控制器输出饱和。

TD 的作用就是把突然变化的目标值转化为平滑的目标轨迹。

例如:

原始目标:0 到 3000 r/min 阶跃变化

跟踪微分器 TD

平滑目标转速

目标转速变化率

控制器

对于二阶跟踪微分器,可以使用以下形式理解:

{ v ˙ 1 = v 2 v ˙ 2 = f T D ( v 1 , v 2 , r ) \begin{cases} \dot v_1=v_2\\ \dot v_2=f_{\mathrm{TD}}(v_1,v_2,r) \end{cases} {v˙1​=v2​v˙2​=fTD​(v1​,v2​,r)​

其中:

  • r r r:原始参考输入。
  • v 1 v_1 v1​:跟踪后的平滑参考信号。
  • v 2 v_2 v2​:参考信号的一阶微分估计。
  • f T D f_{\mathrm{TD}} fTD​:微分器的非线性调节函数。

这里最重要的是:

TD 并不是简单地对目标信号求导,而是通过动态系统生成一个平滑的跟踪信号,同时获得其变化率。

对于很多不需要复杂轨迹规划的系统,也可以直接使用外部轨迹规划器提供的平滑参考信号,因此 TD 并非所有 ADRC 实现都必须单独使用。

2.4 扩张状态观测器(ESO)

这是 ADRC 最核心、最具有代表性的技术。

ESO 的主要作用是实时估计系统的状态以及系统受到的总扰动。

先看一个简单问题。

假设有一个电机,控制器知道自己施加了多大的电压,也能够测量电机转速,但不知道当前负载发生了什么变化。

如果电机转速突然下降,控制器仅从速度误差中只能知道结果,却不一定知道原因。

ESO 的作用就是根据系统输入和输出的变化,估计系统内部不可直接测量的状态和综合扰动。

(1)为什么叫扩张状态观测器?

我们之前得到:

y ¨ = d ( t ) + b 0 u \ddot y=d(t)+b_0u y¨​=d(t)+b0​u

其中, d ( t ) d(t) d(t) 是未知总扰动。

现在定义一个新的状态:

x 1 = y x_1=y x1​=y

x 2 = y ˙ x_2=\dot y x2​=y˙​

x 3 = d ( t ) x_3=d(t) x3​=d(t)

于是原来的二阶系统被扩展为三阶系统:

{ x ˙ 1 = x 2 x ˙ 2 = x 3 + b 0 u x ˙ 3 = d ˙ ( t ) \begin{cases} \dot x_1=x_2\\ \dot x_2=x_3+b_0u\\ \dot x_3=\dot d(t) \end{cases} ⎩ ⎨ ⎧​x˙1​=x2​x˙2​=x3​+b0​ux˙3​=d˙(t)​

其中:

  • x 1 x_1 x1​:系统输出。
  • x 2 x_2 x2​:系统输出速度。
  • x 3 x_3 x3​:总扰动。

为什么叫扩张?

因为原来的系统只有两个状态变量,现在人为增加了一个状态变量 x 3 x_3 x3​,用于描述总扰动。

也就是说,ESO 把原本未知的扰动变成了一个需要观测的系统状态。

这就是 Extended State Observer 中 Extended 的含义。

(2)ESO 如何估计状态?

实际中,我们无法直接测量所有状态。

因此,需要设计一个观测器,根据系统输出和控制输入估计这些状态。

对于上面的二阶系统,可以构建三阶线性扩张状态观测器:

{ z ˙ 1 = z 2 − β 1 ( z 1 − y ) z ˙ 2 = z 3 + b 0 u − β 2 ( z 1 − y ) z ˙ 3 = − β 3 ( z 1 − y ) \begin{cases} \dot z_1=z_2-\beta_1(z_1-y)\\ \dot z_2=z_3+b_0u-\beta_2(z_1-y)\\ \dot z_3=-\beta_3(z_1-y) \end{cases} ⎩ ⎨ ⎧​z˙1​=z2​−β1​(z1​−y)z˙2​=z3​+b0​u−β2​(z1​−y)z˙3​=−β3​(z1​−y)​

其中:

  • y y y:系统实际测量输出。
  • z 1 z_1 z1​:对系统输出的估计。
  • z 2 z_2 z2​:对系统输出一阶导数的估计。
  • z 3 z_3 z3​:对系统总扰动的估计。
  • β 1 , β 2 , β 3 \beta_1,\beta_2,\beta_3 β1​,β2​,β3​:观测器增益。

注意:

e o = z 1 − y e_o=z_1-y eo​=z1​−y

这里的 e o e_o eo​ 是观测误差。

ESO 会根据观测误差不断修正自己的估计值。

例如:

  • 如果 z 1 z_1 z1​ 比实际输出 y y y 大,观测器就会调整估计值。
  • 如果系统输出的变化趋势与 z 2 z_2 z2​ 不一致,观测器就会进一步修正状态估计。
  • 如果系统表现出的加速度与控制输入无法解释,ESO 就会通过 z 3 z_3 z3​ 估计这部分未知影响。

直观来说,ESO 就像一个不断观察系统行为的工程师:

它知道系统施加了多少控制量,也知道系统实际产生了什么响应,于是根据两者之间的关系,推断系统还受到哪些未知因素影响。

(3)ESO 的参数如何设计?

线性 ESO(Linear ESO,LESO)通常可以通过**带宽法(Bandwidth Parameterization)**设计。

假设希望 ESO 的三个特征极点都配置在:

s = − ω o s=-\omega_o s=−ωo​

其中, ω o \omega_o ωo​ 为观测器带宽。

那么观测器特征多项式为:

( s + ω o ) 3 (s+\omega_o)^3 (s+ωo​)3

展开后:

s 3 + 3 ω o s 2 + 3 ω o 2 s + ω o 3 s^3+3\omega_os^2+3\omega_o^2s+\omega_o^3 s3+3ωo​s2+3ωo2​s+ωo3​

与观测器特征多项式比较,可以得到:

β 1 = 3 ω o β 2 = 3 ω o 2 β 3 = ω o 3 \boxed{ \begin{aligned} \beta_1&=3\omega_o\\ \beta_2&=3\omega_o^2\\ \beta_3&=\omega_o^3 \end{aligned} } β1​β2​β3​​=3ωo​=3ωo2​=ωo3​​​

这使得工程师可以通过一个参数 ω o \omega_o ωo​ 调整观测器的整体响应速度。

不过,观测器带宽并不是越大越好:

  • 带宽过低:扰动估计不够及时。
  • 带宽过高:容易放大测量噪声,并对未建模高频动态更加敏感。

因此,需要在估计速度和抗噪能力之间进行平衡。

2.5 非线性状态误差反馈(NLSEF)

ESO 负责估计系统状态和扰动,但它本身并不决定应该施加多少控制量。

这就需要 NLSEF。

NLSEF 的主要任务是根据目标状态与实际状态之间的误差,计算控制输入。

假设:

e 1 = v 1 − z 1 e_1=v_1-z_1 e1​=v1​−z1​

e 2 = v 2 − z 2 e_2=v_2-z_2 e2​=v2​−z2​

其中:

  • v 1 , v 2 v_1,v_2 v1​,v2​:TD 输出的参考位置和参考速度。
  • z 1 , z 2 z_1,z_2 z1​,z2​:ESO 估计的实际位置和实际速度。

最简单的线性反馈形式为:

u 0 = k p e 1 + k d e 2 u_0=k_pe_1+k_de_2 u0​=kp​e1​+kd​e2​

其中:

  • k p k_p kp​:比例增益。
  • k d k_d kd​:微分增益。
  • u 0 u_0 u0​:反馈控制量。

它与经典 PID 中的比例和微分控制思想有相似之处。

但经典 ADRC 还可以使用非线性误差反馈函数,例如:

f a l ( e , α , δ ) = { e δ 1 − α , ∣ e ∣ ≤ δ ∣ e ∣ α sgn ⁡ ( e ) , ∣ e ∣ > δ fal(e,\alpha,\delta)= \begin{cases} \dfrac{e}{\delta^{1-\alpha}},&|e|\leq\delta\\ |e|^\alpha\operatorname{sgn}(e),&|e|>\delta \end{cases} fal(e,α,δ)={δ1−αe​,∣e∣αsgn(e),​∣e∣≤δ∣e∣>δ​

其中:

  • α \alpha α:非线性指数。
  • δ \delta δ:小误差区间阈值。

这种函数可以在不同误差区间提供不同的反馈特性。

不过需要注意,NLSEF 并不是必须采用非线性形式。线性 ADRC 可以使用线性状态误差反馈(LSEF)。

2.6 扰动补偿:ADRC 的关键闭环机制

现在我们已经具备了:

  • 状态估计: z 1 , z 2 z_1,z_2 z1​,z2​。
  • 扰动估计: z 3 z_3 z3​。
  • 反馈控制量: u 0 u_0 u0​。

接下来就可以把它们组合起来。

对于前面建立的二阶系统:

y ¨ = d ( t ) + b 0 u \ddot y=d(t)+b_0u y¨​=d(t)+b0​u

控制器可以设计为:

u = u 0 − z 3 b 0 \boxed{u=\frac{u_0-z_3}{b_0}} u=b0​u0​−z3​​​

其中, z 3 z_3 z3​ 是 ESO 对总扰动的估计。

将控制输入代入系统:

y ¨ = d ( t ) + b 0 u 0 − z 3 b 0 \ddot y=d(t)+b_0\frac{u_0-z_3}{b_0} y¨​=d(t)+b0​b0​u0​−z3​​

得到:

y ¨ = u 0 + d ( t ) − z 3 \boxed{\ddot y=u_0+d(t)-z_3} y¨​=u0​+d(t)−z3​​

如果 ESO 估计准确,即:

z 3 ≈ d ( t ) z_3\approx d(t) z3​≈d(t)

那么:

y ¨ ≈ u 0 \boxed{\ddot y\approx u_0} y¨​≈u0​​

这意味着:

原来受到未知扰动影响的复杂系统,经过扰动估计与补偿之后,在控制器看来就近似变成了一个简单的二阶积分系统。

这就是 ADRC 最核心的数学机制。


三、ADRC 主要用来做什么?

ADRC 的应用范围非常广,但如果从核心能力来看,可以归纳为两个最重要的功能:

  1. 未知扰动的实时估计与主动补偿。
  2. 模型不确定条件下的高性能跟踪控制。

其他功能,例如抑制参数变化、改善动态响应、降低对精确数学模型的依赖等,实际上也主要围绕这两个核心能力展开。

3.1 核心功能一:未知扰动的实时估计与补偿

这是 ADRC 最具代表性的功能。

假设一个电机的转速控制系统:

J ω ˙ = K t i − T L − B ω J\dot{\omega}=K_t i-T_L-B\omega Jω˙=Kt​i−TL​−Bω

其中:

  • J J J:电机转动惯量。
  • ω \omega ω:电机角速度。
  • K t K_t Kt​:转矩常数。
  • i i i:电枢电流。
  • T L T_L TL​:外部负载转矩。
  • B B B:阻尼系数。

如果我们希望维持恒定转速,那么必须抵消负载转矩和阻尼造成的影响。

但是在实际工作中, T L T_L TL​ 可能不断变化。

例如:

  • 电机空载运行时,负载转矩很小。
  • 电机开始驱动传送带时,负载转矩增加。
  • 传送带上的货物数量增加时,负载转矩进一步增加。
  • 货物突然卡住时,负载转矩可能瞬间增大。

ADRC 可以将这些变化综合到总扰动中,通过 ESO 估计。

其控制过程可以理解为:

设定目标转速

计算速度误差

状态误差反馈控制

电机实际运行

采集实际转速

ESO 扩张状态观测器

控制输入

估计负载等总扰动

扰动补偿

例如,假设电机在 1500 r/min 下稳定运行,突然增加负载。

普通 PID 控制器需要等到转速偏差出现后,再逐渐增加控制输出。

ADRC 则可以利用 ESO 估计系统受到的综合扰动,并将其纳入补偿控制量。

需要注意:ADRC 并不是能够在扰动发生之前预知扰动,而是通过系统响应和输入输出信息,实时估计扰动并进行补偿。 对于观测器无法及时估计的快速突变,仍然会存在瞬态误差。

3.2 核心功能二:模型不确定情况下的跟踪控制

第二个重要功能是让系统能够在模型不准确的情况下,仍然实现较好的目标跟踪。

例如,一个机械臂需要跟踪一条预定运动轨迹:

r ( t ) = [ x r ( t ) y r ( t ) z r ( t ) ] r(t)= \begin{bmatrix} x_r(t)\\ y_r(t)\\ z_r(t) \end{bmatrix} r(t)= ​xr​(t)yr​(t)zr​(t)​ ​

实际机械臂的位置为:

y ( t ) = [ x ( t ) y ( t ) z ( t ) ] y(t)= \begin{bmatrix} x(t)\\ y(t)\\ z(t) \end{bmatrix} y(t)= ​x(t)y(t)z(t)​ ​

跟踪误差为:

e ( t ) = r ( t ) − y ( t ) e(t)=r(t)-y(t) e(t)=r(t)−y(t)

机械臂在运动过程中可能受到:

  • 关节摩擦。
  • 负载变化。
  • 机械结构弹性。
  • 传动间隙。
  • 外部碰撞。
  • 未知动力学耦合。

传统模型驱动控制方法通常需要比较准确的机械臂动力学模型。

ADRC 则可以通过较低阶的等效模型描述主要输入输出关系,将剩余的不确定动力学合并为总扰动。

这样,即使机械臂的负载发生变化,控制器也能够通过 ESO 估计变化带来的影响,并调整控制量。

其主要价值在于:

控制器不需要完全依赖一份固定不变的精确动力学模型,而是通过在线观测和补偿,适应系统运行过程中出现的变化。

3.3 其他应用功能

除以上两个核心功能外,ADRC 还可以用于:

功能具体说明典型应用
参数变化适应抵消参数变化引起的综合影响电机、电池系统
非线性系统控制将未知非线性部分纳入总扰动机器人、伺服系统
动态性能改善通过反馈带宽和观测器带宽调节响应精密运动控制
抗外部干扰估计并补偿外部负载变化飞行器、车辆
轨迹跟踪结合 TD 或轨迹规划器实现平滑跟踪机械臂、无人机
过程控制对复杂工业过程进行调节温度、压力、流量控制

需要明确的是:ADRC 不是对所有扰动都能完全消除。 其效果受到观测器带宽、测量噪声、执行器能力、模型阶次以及扰动变化速度等因素限制。


四、实际工程中如何使用 ADRC?

这一部分从工程实现的角度出发,介绍如何把 ADRC 从数学公式转化为能够运行的控制程序。

为了让原理更容易理解,我们选择一个典型的二阶系统:

直流电机转速等效模型。

4.1 建立被控对象模型

假设我们使用一个简化的二阶系统表示电机转速动态:

y ¨ = d ( t ) + b 0 u \ddot y=d(t)+b_0u y¨​=d(t)+b0​u

其中:

  • y y y:电机转速。
  • u u u:控制输入。
  • b 0 b_0 b0​:估计的控制增益。
  • d ( t ) d(t) d(t):总扰动。

为了方便仿真,假设:

b 0 = 2 b_0=2 b0​=2

实际系统的总扰动设为:

d ( t ) = { 0 , t < 2 − 2 , t ≥ 2 d(t)= \begin{cases} 0,&t<2\\ -2,&t\geq2 \end{cases} d(t)={0,−2,​t<2t≥2​

这意味着系统在运行 2 秒后,受到一个突变的负向扰动。

控制目标是:

y r e f = 1 y_{\mathrm{ref}}=1 yref​=1

即让系统输出稳定在 1 个单位。

4.2 设计 LADRC 控制器

这里选择线性自抗扰控制(Linear Active Disturbance Rejection Control,LADRC)。

LADRC 是 ADRC 的一个重要工程化形式,其特点是使用线性观测器和线性状态误差反馈,降低参数整定和理论分析的复杂度。

对于二阶系统,定义:

x 1 = y x_1=y x1​=y

x 2 = y ˙ x_2=\dot y x2​=y˙​

x 3 = d ( t ) x_3=d(t) x3​=d(t)

建立线性扩张状态观测器:

{ z ˙ 1 = z 2 − β 1 ( z 1 − y ) z ˙ 2 = z 3 + b 0 u − β 2 ( z 1 − y ) z ˙ 3 = − β 3 ( z 1 − y ) \begin{cases} \dot z_1=z_2-\beta_1(z_1-y)\\ \dot z_2=z_3+b_0u-\beta_2(z_1-y)\\ \dot z_3=-\beta_3(z_1-y) \end{cases} ⎩ ⎨ ⎧​z˙1​=z2​−β1​(z1​−y)z˙2​=z3​+b0​u−β2​(z1​−y)z˙3​=−β3​(z1​−y)​

其中:

β 1 = 3 ω o \beta_1=3\omega_o β1​=3ωo​

β 2 = 3 ω o 2 \beta_2=3\omega_o^2 β2​=3ωo2​

β 3 = ω o 3 \beta_3=\omega_o^3 β3​=ωo3​

接下来设计线性状态误差反馈:

u 0 = k p ( r − z 1 ) − k d z 2 u_0=k_p(r-z_1)-k_dz_2 u0​=kp​(r−z1​)−kd​z2​

如果采用期望闭环带宽 ω c \omega_c ωc​,可以选择:

k p = ω c 2 k_p=\omega_c^2 kp​=ωc2​

k d = 2 ω c k_d=2\omega_c kd​=2ωc​

最后加入扰动补偿:

u = k p ( r − z 1 ) − k d z 2 − z 3 b 0 \boxed{ u=\frac{k_p(r-z_1)-k_dz_2-z_3}{b_0} } u=b0​kp​(r−z1​)−kd​z2​−z3​​​

这就是一个完整的二阶 LADRC 控制器。

4.3 ADRC 的工程实施流程

否

是

确定控制目标

分析被控对象

确定系统近似阶次

估计控制增益 b0

选择控制带宽 wc

选择观测器带宽 wo

构建 ESO

构建状态反馈和扰动补偿

离散化并部署控制程序

仿真与参数调整

硬件测试

性能是否满足要求?

检查噪声、饱和及参数

投入实际运行

具体来说:

第一步:确定系统阶次。

工程中通常不是要求完全辨识系统,而是确定系统主要动态特征可以用几阶积分环节近似。

例如:

  • 温度系统通常可以使用一阶近似。
  • 电机位置系统可以使用二阶近似。
  • 某些复杂机械系统可能需要更高阶模型。

第二步:估计控制增益 b 0 b_0 b0​。

它是工程中非常重要的参数。

如果 b 0 b_0 b0​ 估计不合理,扰动补偿和控制输出都会受到影响。

一种简单方法是进行开环阶跃测试。

对于二阶系统:

b 0 ≈ 2 Δ y u t e s t Δ t 2 b_0\approx\frac{2\Delta y}{u_{\mathrm{test}}\Delta t^2} b0​≈utest​Δt22Δy​

这里要求在选取的短时间区间内,输出响应可以近似为恒定加速度,并且其他扰动影响相对较小。

第三步:选择控制器带宽。

控制器带宽 ω c \omega_c ωc​ 决定系统希望达到的闭环响应速度。

一般而言:

  • 带宽较大:响应更快,但更容易产生较大的控制动作。
  • 带宽较小:响应更平缓,但跟踪速度下降。

第四步:选择观测器带宽。

观测器带宽 ω o \omega_o ωo​ 决定 ESO 估计状态和总扰动的速度。

通常会从:

ω o > ω c \omega_o>\omega_c ωo​>ωc​

开始考虑,但这不是无条件适用的固定规律,最终需要根据采样频率、传感器噪声和执行器特性调整。

4.4 Python 仿真:观察 ADRC 如何抵抗扰动

下面使用 Python 的 numpy 和 matplotlib,建立一个简化的二阶 LADRC 仿真。

仿真包含三个阶段:

  • 0~2 秒:系统正常运行。
  • 2 秒:施加突变扰动。
  • 2 秒之后:观察 ESO 如何估计扰动,以及 ADRC 如何进行补偿。
import numpy as np
import matplotlib.pyplot as plt

# =========================
# 1. 仿真参数
# =========================
dt = 0.0005
T = 5.0
t = np.arange(0, T, dt)

b0 = 2.0
wc = 5.0       # 控制器带宽
wo = 25.0      # 观测器带宽

kp = wc ** 2
kd = 2 * wc

beta1 = 3 * wo
beta2 = 3 * wo ** 2
beta3 = wo ** 3

# =========================
# 2. 初始化状态
# =========================
y = 0.0
v = 0.0

z1 = 0.0
z2 = 0.0
z3 = 0.0

u = 0.0

# 数据记录
Y = []
U = []
D = []
D_est = []
R = []

# =========================
# 3. ADRC 控制循环
# =========================
for ti in t:

    # 目标值
    r = 1.0

    # 外部扰动:2秒时突然增加
    d = -2.0 if ti >= 2.0 else 0.0

    # 实际输出测量(此处先不添加测量噪声)
    e_obs = z1 - y

    # ESO 状态更新
    dz1 = z2 - beta1 * e_obs
    dz2 = z3 + b0 * u - beta2 * e_obs
    dz3 = -beta3 * e_obs

    z1 += dz1 * dt
    z2 += dz2 * dt
    z3 += dz3 * dt

    # 线性状态误差反馈 + 扰动补偿
    u0 = kp * (r - z1) - kd * z2
    u = (u0 - z3) / b0

    # 实际被控对象
    acceleration = d + b0 * u

    v += acceleration * dt
    y += v * dt

    # 记录数据
    Y.append(y)
    U.append(u)
    D.append(d)
    D_est.append(z3)
    R.append(r)

# =========================
# 4. 绘制仿真结果
# =========================
fig, axes = plt.subplots(3, 1, figsize=(10, 9))

axes[0].plot(t, R, '--', label='Reference')
axes[0].plot(t, Y, label='ADRC Output')
axes[0].axvline(2, color='red', linestyle=':')
axes[0].set_ylabel('Output')
axes[0].legend()
axes[0].grid()

axes[1].plot(t, D, label='Actual Disturbance')
axes[1].plot(t, D_est, '--', label='Estimated Disturbance')
axes[1].set_ylabel('Disturbance')
axes[1].legend()
axes[1].grid()

axes[2].plot(t, U, label='Control Input')
axes[2].set_ylabel('Control')
axes[2].set_xlabel('Time (s)')
axes[2].legend()
axes[2].grid()

plt.tight_layout()
plt.show()
如何理解仿真结果?

运行代码后,重点观察三个图。

图 1:系统输出(Output)

  • 初始阶段,系统逐渐跟踪目标值 1。
  • 在 2 秒时,系统受到突变扰动。
  • 扰动出现后,输出会产生一定程度的偏离。
  • ESO 逐渐估计出扰动,补偿控制开始发挥作用。
  • 在参数合理且执行器能力足够的情况下,输出能够重新趋近目标值。

图 2:实际扰动与估计扰动

这是整个仿真最重要的一张图。

实际扰动是 d ( t ) d(t) d(t),估计扰动是 z 3 z_3 z3​。

当两条曲线逐渐接近时,说明 ESO 已经比较准确地估计了总扰动。

图 3:控制输入(Control Input)

当系统受到扰动时,控制器会调整控制输入,以抵消扰动的影响。

这也体现了 ADRC 的主动补偿思想。

注意: 该代码是用于解释算法原理的理想化连续系统数值仿真,使用欧拉积分,未包含传感器噪声、执行器饱和、计算延迟和真实电机电气动态。实际工程部署前还需要考虑离散化、采样周期、限幅、抗积分饱和之外的执行器保护以及稳定性验证。

4.5 实际工程部署时需要注意什么?

在真实设备上运行 ADRC,不能只把上述数学公式直接复制到控制器中。

还需要考虑以下问题:

工程问题可能造成的影响解决思路
传感器噪声ESO 将噪声误认为扰动合理降低带宽、滤波
执行器饱和控制器计算值无法真正施加加入输出限幅和饱和处理
采样周期过长扰动估计滞后提高采样频率
b 0 b_0 b0​ 估计错误补偿方向或幅度不准确重新测试输入输出增益
扰动变化过快ESO 无法及时跟踪改善观测器设计,检查系统带宽
高频未建模动态观测器可能激发振荡限制带宽,考虑滤波与结构改进
执行器存在延迟补偿作用出现时间偏差建模延迟并设计相应补偿

尤其需要注意:

ADRC 并不意味着可以忽略被控对象的所有物理特性。 它依然需要对系统的主要阶次、输入增益、执行器约束和可测量输出有合理认识。


五、ADRC 与其他控制理论的对比

ADRC 经常与 PID、状态反馈控制、滑模控制以及模型预测控制(MPC)进行比较。

它们并不是完全相互替代的关系,而是采用了不同的控制思想。

5.1 ADRC 与 PID 对比

这是最值得理解的一组对比。

对比维度PID 控制ADRC 控制
英文名称Proportional-Integral-DerivativeActive Disturbance Rejection Control
核心思想根据误差及误差变化调节控制量估计总扰动并进行主动补偿
控制依据误差 e e e、积分、微分状态估计、误差反馈、扰动估计
是否需要精确模型通常不需要不需要精确模型,但需要合理的低阶近似
扰动处理通过反馈间接抑制ESO 估计后主动补偿
内部状态估计标准 PID 不需要通常需要 ESO
参数数量通常 3 个主要参数还需设置模型增益、控制带宽、观测器带宽等
参数整定相对简单相对复杂
噪声敏感性微分环节可能放大噪声ESO 的高带宽也可能放大噪声
适用场景常规工业过程扰动较强、模型不确定的系统

举个简单的例子:

电机运行过程中突然增加负载。

PID 的主要处理逻辑是:

e ( t ) = r ( t ) − y ( t ) e(t)=r(t)-y(t) e(t)=r(t)−y(t)

根据速度误差调整控制量。

而 ADRC 的控制逻辑是:

u = u 0 − z 3 b 0 u=\frac{u_0-z_3}{b_0} u=b0​u0​−z3​​

它除了根据误差生成反馈控制量,还通过 z 3 z_3 z3​ 补偿估计到的总扰动。

因此,ADRC 可以看作是在传统误差反馈思想基础上,引入了一个主动估计和补偿未知扰动的机制。

不过,不能简单认为 ADRC 在所有场景中都优于 PID。 对于结构简单、扰动较小、参数变化有限的系统,PID 往往更加经济、易于维护。

5.2 ADRC 与其他控制方法对比

控制方法核心思想是否依赖精确模型扰动处理方式主要特点
PID误差反馈否误差反馈抑制简单、成熟
ADRC总扰动估计与补偿不需要精确模型ESO 实时估计和补偿对未知扰动具有较强适应能力
状态反馈控制根据系统状态设计反馈通常需要状态空间模型通过反馈调节理论体系成熟
滑模控制(SMC)设计滑模面并驱动状态到达滑模面需要一定的系统结构信息利用不连续控制增强鲁棒性鲁棒性较强,但可能出现抖振
模型预测控制(MPC)利用模型预测未来行为并优化控制输入通常需要预测模型通过优化和约束处理适合多变量、约束优化问题
鲁棒控制在不确定性范围内保证性能需要不确定性模型或边界通过鲁棒设计理论保证明确,但设计可能复杂
自适应控制在线调整模型参数或控制参数通常需要参数化模型参数在线调整适合参数缓慢变化的系统

5.3 ADRC 与 MPC 的本质区别

ADRC 和 MPC 都是现代控制领域的重要方法,但它们的设计目标和工作机制存在明显差异。

MPC 的核心是:

min ⁡ u ∑ k = 0 N − 1 ( ∥ x k − r k ∥ Q 2 + ∥ u k ∥ R 2 ) \min_{u} \sum_{k=0}^{N-1} \left( \|x_k-r_k\|_Q^2+ \|u_k\|_R^2 \right) umin​k=0∑N−1​(∥xk​−rk​∥Q2​+∥uk​∥R2​)

即通过预测未来一段时间的系统行为,寻找最优控制序列。

ADRC 的核心则是:

d ^ ( t ) ≈ d ( t ) \hat d(t)\approx d(t) d^(t)≈d(t)

然后通过:

u = u 0 − d ^ ( t ) b 0 u=\frac{u_0-\hat d(t)}{b_0} u=b0​u0​−d^(t)​

主动补偿总扰动。

简单来说:

  • MPC 更关注:未来怎么控制才最优?
  • ADRC 更关注:当前系统受到什么未知影响?如何把它抵消?

在某些复杂系统中,两者还可以组合使用,例如使用 MPC 生成控制目标或参考轨迹,再利用 ADRC 增强底层执行系统的抗扰能力。

5.4 ADRC 的优点与缺点

优点
  1. 对精确数学模型的依赖程度较低。
    ADRC 只需要对被控对象建立合理的低阶近似,不必完全掌握复杂的系统动力学。

  2. 能够主动估计并补偿未知扰动。
    这是 ADRC 最重要的优势,也是它区别于普通误差反馈控制的重要特点。

  3. 对内部不确定性和外部扰动具有统一处理能力。
    它可以把摩擦、参数变化、负载变化和未建模动态纳入总扰动。

  4. 具有较好的工程可移植性。
    LADRC 的结构相对清晰,可以通过数字控制器实现,适合嵌入式控制和实时控制系统。

  5. 参数化设计相对方便。
    在线性 ADRC 中,可以通过控制器带宽和观测器带宽进行系统化整定。

缺点
  1. 仍然需要一定的系统先验信息。
    虽然不需要精确模型,但需要确定主要系统阶次,并合理估计控制增益 b 0 b_0 b0​。

  2. ESO 对测量噪声比较敏感。
    尤其是观测器带宽较高时,噪声可能被放大。

  3. 参数整定存在一定难度。
    需要综合考虑控制器带宽、观测器带宽、采样频率和系统实际动态。

  4. 无法突破执行器物理约束。
    如果电机最大电流不足,或者执行器已经达到最大输出,ADRC 也无法凭空产生额外控制能力。

  5. 对快速变化和高频扰动的补偿能力有限。
    扰动变化速度超过观测器和执行器能够响应的范围时,估计和补偿都会出现滞后。

  6. 复杂系统的稳定性分析可能比较困难。
    尤其是非线性、高阶、时变、多输入多输出系统,需要针对具体结构开展理论分析和验证。


六、ADRC 作为一个控制概念,其内涵与外延

这一部分从控制理论的角度进一步分析 ADRC。

理解一个技术概念,不能只知道它由哪些模块组成,还需要理解它的理论边界、适用条件、衍生方向以及与其他技术的关系。

可以从两个维度理解:

  • 内涵(Intension):ADRC 本身包含哪些核心思想和技术特征?
  • 外延(Extension):哪些技术、应用场景和研究方向属于 ADRC 或与 ADRC 密切相关?

6.1 ADRC 的内涵:它究竟是一种什么样的控制思想?

ADRC 的内涵可以归纳为五个层次。

第一层:弱模型依赖(Weak Model Dependence)

传统模型驱动控制通常希望建立尽可能准确的系统模型。

而 ADRC 的设计思想是:

不必完全掌握被控对象的全部动力学,只需要掌握主要的输入输出动态关系。

例如:

y ¨ = f ( y , y ˙ , t ) + b u \ddot y=f(y,\dot y,t)+bu y¨​=f(y,y˙​,t)+bu

ADRC 不要求精确知道 f f f 的具体表达式,而是把未知部分统一纳入总扰动。

这意味着 ADRC 并不是完全不需要模型,而是不需要精确、完整的数学模型。

第二层:总扰动思想(Total Disturbance)

ADRC 最重要的理论创新之一,就是总扰动的概念。

传统方法通常会分别处理:

  • 参数不确定性。
  • 外部扰动。
  • 内部摩擦。
  • 未建模动态。
  • 非线性因素。

ADRC 则将这些因素进行统一处理:

d ( t ) = d e x t e r n a l + d i n t e r n a l + d m o d e l d(t)=d_{\mathrm{external}}+ d_{\mathrm{internal}}+ d_{\mathrm{model}} d(t)=dexternal​+dinternal​+dmodel​

这是一个概念性表达,实际的总扰动还可能包含输入增益误差等项。

它的价值在于:

把复杂的未知因素转化为一个统一的观测对象。

这是一种非常重要的工程抽象思想。

第三层:扩张状态观测(Extended State Observation)

总扰动本身无法直接测量,因此需要设计 ESO。

例如:

x 3 = d ( t ) x_3=d(t) x3​=d(t)

把总扰动看作一个扩张状态,并通过输入输出数据实时估计:

z 3 ≈ x 3 z_3\approx x_3 z3​≈x3​

这一层体现了现代控制理论中**状态观测器(State Observer)**的思想。

它将原本无法直接测量的系统信息,通过数学模型和反馈误差间接估计出来。

第四层:主动补偿(Active Compensation)

估计扰动并不是最终目的。

真正的目的在于利用估计结果改善系统行为:

u = u 0 − z 3 b 0 u=\frac{u_0-z_3}{b_0} u=b0​u0​−z3​​

这里, z 3 z_3 z3​ 就是补偿项。

这一层体现了 ADRC 的主动控制思想。

第五层:闭环性能优化(Closed-loop Performance)

经过扰动补偿后,控制器可以在近似积分器串联的模型上进行设计。

例如二阶系统:

y ¨ ≈ u 0 \ddot y\approx u_0 y¨​≈u0​

这样就可以使用相对简单的线性或非线性反馈方法,实现目标跟踪、稳定控制以及动态性能调节。

综合来看:

ADRC 的五层核心内涵概览
  • 弱模型依赖:不要求完整、精确的被控对象模型。
  • 总扰动建模:将未知因素统一为总扰动。
  • 扩张状态观测:通过 ESO 估计不可测状态和总扰动。
  • 主动扰动补偿:利用估计结果抵消未知扰动。
  • 闭环性能优化:实现稳定、快速、准确的控制。

6.2 ADRC 的外延:它衍生出了哪些技术?

随着研究的发展,ADRC 已经不再局限于最初的经典结构,而是形成了一个相对丰富的技术体系。

下面介绍几个重要方向。

(1)经典非线性 ADRC(Nonlinear ADRC)

这是较早期、较完整的 ADRC 形式。

主要组成:

  • 非线性跟踪微分器(Nonlinear TD)。
  • 非线性扩张状态观测器(Nonlinear ESO)。
  • 非线性状态误差反馈(NLSEF)。

特点:

  • 使用非线性函数进行状态反馈。
  • 能够针对不同误差范围设计不同反馈特性。
  • 参数设计和理论分析相对复杂。
(2)线性 ADRC(Linear ADRC,LADRC)

LADRC 是 ADRC 工程应用中非常重要的一个方向。

其核心是将经典 ADRC 中的主要非线性模块进行线性化处理。

例如,使用线性 ESO:

{ z ˙ 1 = z 2 − β 1 ( z 1 − y ) z ˙ 2 = z 3 + b 0 u − β 2 ( z 1 − y ) z ˙ 3 = − β 3 ( z 1 − y ) \begin{cases} \dot z_1=z_2-\beta_1(z_1-y)\\ \dot z_2=z_3+b_0u-\beta_2(z_1-y)\\ \dot z_3=-\beta_3(z_1-y) \end{cases} ⎩ ⎨ ⎧​z˙1​=z2​−β1​(z1​−y)z˙2​=z3​+b0​u−β2​(z1​−y)z˙3​=−β3​(z1​−y)​

同时使用线性状态误差反馈:

u 0 = k p e 1 + k d e 2 u_0=k_pe_1+k_de_2 u0​=kp​e1​+kd​e2​

特点:

  • 结构相对简单。
  • 参数整定相对容易。
  • 方便进行频域和时域分析。
  • 容易实现数字化部署。

对于初学者来说,建议先学习 LADRC,再深入理解经典非线性 ADRC。

(3)离散 ADRC(Discrete ADRC)

实际控制器通常运行在数字处理器上,例如:

  • STM32。
  • DSP。
  • FPGA。
  • 工业 PLC。
  • 工控机。

这些设备通常按照固定采样周期运行,因此需要将连续时间 ADRC 离散化。

假设采样周期为 T s T_s Ts​,可以采用前向欧拉法:

z 1 ( k + 1 ) = z 1 ( k ) + T s z ˙ 1 ( k ) z_1(k+1)=z_1(k)+T_s\dot z_1(k) z1​(k+1)=z1​(k)+Ts​z˙1​(k)

z 2 ( k + 1 ) = z 2 ( k ) + T s z ˙ 2 ( k ) z_2(k+1)=z_2(k)+T_s\dot z_2(k) z2​(k+1)=z2​(k)+Ts​z˙2​(k)

z 3 ( k + 1 ) = z 3 ( k ) + T s z ˙ 3 ( k ) z_3(k+1)=z_3(k)+T_s\dot z_3(k) z3​(k+1)=z3​(k)+Ts​z˙3​(k)

将 ESO 的微分方程代入即可得到离散观测器。

需要注意: 对于较高带宽的 ESO,简单欧拉离散化可能造成精度和稳定性问题,工程上应结合采样周期采用更合适的离散化方法,并验证离散闭环稳定性。

(4)自适应 ADRC(Adaptive ADRC)

传统 LADRC 通常需要人工选择 b 0 b_0 b0​、控制器带宽和观测器带宽。

但如果被控对象的参数变化很大,固定参数可能无法在所有工况下保持良好的控制效果。

因此出现了自适应 ADRC。

它可以根据系统运行状态,动态调整:

  • 控制增益。
  • 观测器参数。
  • 控制器带宽。
  • 扰动估计参数。

例如,一个电机在低速和高速状态下的动态特性可能不同,自适应 ADRC 可以根据运行工况调整控制器参数。

(5)滑模 ADRC(Sliding Mode ADRC)

滑模控制(SMC)与 ADRC 具有不同的核心思想:

  • ADRC:通过 ESO 估计扰动并补偿。
  • SMC:通过滑模面和不连续控制增强鲁棒性。

将两者结合,可以构造滑模扩张状态观测器或滑模自抗扰控制器。

这种组合在部分强扰动、非线性系统中具有研究价值,但也需要处理滑模抖振和观测噪声等问题。

(6)智能 ADRC(Intelligent ADRC)

随着人工智能的发展,也出现了将神经网络、模糊控制、强化学习等方法与 ADRC 结合的研究。

例如:

  • 神经网络辅助估计未知非线性。
  • 模糊逻辑辅助调整观测器参数。
  • 强化学习辅助优化控制参数。
  • 数据驱动方法辅助估计总扰动。

这类方法通常不是对 ADRC 核心机制的替代,而是对参数优化、建模和控制性能的进一步扩展。

6.3 ADRC 的技术体系结构

可以通过下面这张图理解 ADRC 的技术外延:

自抗扰控制 ADRC

经典非线性 ADRC

线性自抗扰控制 LADRC

扩展研究方向

非线性 TD

非线性 ESO

非线性状态反馈

线性 ESO

线性状态反馈

带宽参数化设计

自适应 ADRC

滑模 ADRC

智能 ADRC

分数阶 ADRC

预测 ADRC

工程实现形式

连续时间 ADRC

离散时间 ADRC

多输入多输出 ADRC

需要说明,图中的分类并非严格互斥的树状分类。例如,自适应 LADRC 可以同时属于线性 ADRC 和自适应 ADRC;离散 ADRC 则是实现形式,可以与上述多种结构结合。

6.4 ADRC 的应用领域外延

ADRC 的应用范围可以按照行业划分。

1. 电机与运动控制

解决电机负载变化、转速波动、位置跟踪和机械摩擦等问题。

2. 机器人控制

用于机械臂位置跟踪、关节控制以及外部扰动补偿。

3. 工业过程控制

用于温度、压力、液位、流量等过程变量的控制。

4. 电力电子

用于 DC-DC 变换器、电压调节和电流控制。

5. 航空航天与无人机

用于飞行器姿态控制、轨迹跟踪和外部气流扰动补偿。

6.5 ADRC 的理论边界:哪些问题不能简单依靠 ADRC 解决?

这是理解 ADRC 外延时容易忽略的地方。

ADRC 能够统一估计很多未知因素,但并不意味着它能够处理所有未知问题。

主要有以下几个边界。

第一,扰动必须具有一定的可观测性。

如果系统输出中完全没有体现某个扰动的影响,那么 ESO 就无法仅凭输出估计它。

第二,控制输入必须具有足够的控制能力。

如果系统已经达到执行器最大输出,控制器无法通过补偿突破物理约束。

第三,扰动不能变化得过快。

实际 ESO 存在有限带宽,不能无延迟地跟踪任意快速变化的扰动。

第四,系统必须满足适当的结构条件。

对于复杂系统,需要分析输入输出关系、相对阶次、输入增益方向和系统内部动态等问题。

第五,观测器与控制器需要联合设计。

如果 ESO 参数不合理,即使控制律设计得很好,也可能因为扰动估计误差而影响整体控制效果。

所以,ADRC 的真正优势不是消除所有模型和设计问题,而是用更容易处理的总扰动估计问题,替代一部分复杂的精确建模工作。


七、总结与学习资料

7.1 核心知识总结

如果要用一张表总结 ADRC,可以归纳为:

核心问题ADRC 的解决方式
系统模型不准确怎么办?使用低阶等效模型
内部参数变化怎么办?将影响合并为总扰动
外部扰动无法测量怎么办?使用 ESO 实时估计
如何处理估计出的扰动?通过控制律主动补偿
如何实现目标跟踪?使用状态误差反馈
如何让参考信号平滑?使用 TD 或外部轨迹规划
如何应用到数字控制器?离散化并进行实时计算

可以把 ADRC 的整个逻辑浓缩成下面的过程:

ADRC = 估计 + 补偿 + 反馈

核心数学关系(二阶系统):

y ¨ = d ( t ) + b 0 u \ddot y=d(t)+b_0u y¨​=d(t)+b0​u

d ^ ( t ) = z 3 \hat d(t)=z_3 d^(t)=z3​

u = u 0 − d ^ ( t ) b 0 u=\frac{u_0-\hat d(t)}{b_0} u=b0​u0​−d^(t)​

最终目标:

y ¨ ≈ u 0 \ddot y\approx u_0 y¨​≈u0​

将复杂的未知影响尽可能抵消,使系统表现为便于设计的近似积分器串联系统。

7.2 官方文档及权威学习资料

下面整理了一些适合进一步学习的资料,分为工程文档、经典论文和开源实现。

  1. MathWorks:Active Disturbance Rejection Control
    工程实现推荐介绍 ADRC 的一阶、二阶模型逼近,ESO 结构、带宽参数化和控制器配置。
    MathWorks 官方 ADRC 文档
    适合:Simulink 仿真、工程参数设计、实际控制器搭建。

  2. MathWorks:Design Active Disturbance Rejection Control
    Simulink ADRC 模块与设计说明
    适合:理解控制器模块、配置模型阶次及控制带宽。

  3. Jingqing Han:From PID to Active Disturbance Rejection Control
    经典论文,2009 年发表于 IEEE Transactions on Industrial Electronics,介绍 ADRC 的理论动机,以及它如何从 PID 思想发展而来。
    阅读论文 PDF

  4. pyadrc:Python ADRC Documentation
    代码实践推荐提供 Python 环境下的 ADRC 实现、基本原理和参数整定说明。
    pyadrc 官方文档
    适合:Python 仿真、算法实现和控制参数学习。

  5. Active disturbance rejection control: Methodology and theoretical analysis
    介绍 ADRC 的方法体系、数学理论和稳定性研究。
    阅读理论综述
    适合:深入研究 ESO 收敛性、控制稳定性和理论边界。

  6. 自抗扰控制技术及其实际应用综述
    阅读中文综述
    适合:了解 ADRC、LADRC 的发展及工程应用现状。


八、最终总结:ADRC 带来的控制思想启示

ADRC 的价值不只是提供了一套新的控制算法,更重要的是改变了我们处理复杂系统的思考方式。

传统控制设计往往倾向于:

先尽可能准确地理解系统,再根据系统模型设计控制器。

ADRC 则提供了另一种思路:

当系统无法被完全理解时,可以先建立合理的简化模型,再通过实时观测和反馈,处理那些无法准确建模的部分。

从技术角度看,ADRC 最核心的三个关键词是:

  • 总扰动(Total Disturbance):统一描述未知因素。
  • 扩张状态观测器(ESO):实时估计未知状态和总扰动。
  • 主动补偿(Active Compensation):利用估计结果抵消扰动。

真正的控制能力,不一定来自对世界的完全认知,也可以来自对未知的持续观测、及时反馈,以及对不确定性的主动管理。

这也是 ADRC 最值得理解的地方:不必等到完全掌握一个复杂系统,才开始控制它;关键在于建立合理的认知边界,并持续修正自己对系统的判断。

ADRC 的本质,就是把未知变成可观测,把扰动变成可估计,再把估计结果变成控制能力。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐