自抗扰控制(ADRC):概念、数学原理、核心功能与工程实践详解
自抗扰控制(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)**提出并发展。
其发展过程可以概括为:
几个重要的历史节点:
- 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 的思路是:
- 通过观测器监测汽车的速度及其变化趋势。
- 根据系统输入和实际响应,估计上坡阻力等综合扰动。
- 计算需要增加多少发动机输出才能抵消这部分扰动。
- 将扰动补偿与常规跟踪控制结合起来。
因此,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)+b0u+(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)+b0u
这就是 ADRC 的一个基本建模形式。
注意,这里的 d ( t ) d(t) d(t) 不只是外部扰动,它还包含:
- 原始系统未知动态。
- 系统参数误差。
- 控制增益估计误差。
- 其他未建模因素。
ADRC 最重要的建模技巧,就是把复杂的未知系统转换为一个结构简单、但包含未知总扰动的等效系统。
2.2 ADRC 的核心架构
经典 ADRC 通常由三个核心部分组成:
- 跟踪微分器(Tracking Differentiator,TD)。
- 扩张状态观测器(Extended State Observer,ESO)。
- 非线性状态误差反馈(Nonlinear State Error Feedback,NLSEF)。
最后还包括扰动补偿环节(Disturbance Compensation)。
它们分别负责不同的任务:
| 组成部分 | 核心任务 | 直观理解 |
|---|---|---|
| TD | 处理参考输入,生成平滑信号及其导数 | 给控制系统规划平滑的目标轨迹 |
| ESO | 估计系统状态和总扰动 | 给系统安装一个能够估计未知因素的观察器 |
| NLSEF | 根据状态误差生成控制量 | 根据偏差决定应该施加多大的控制力度 |
| 扰动补偿 | 抵消估计得到的总扰动 | 提前抵消未知因素对系统的影响 |
下面逐个解释。
2.3 跟踪微分器(TD)
跟踪微分器的主要作用是生成平滑的参考信号,并估计参考信号的微分信息。
为什么需要它?
假设我们希望电机转速从 0 r/min 突然变化到 3000 r/min。
如果直接把 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=v2v˙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)+b0u
其中, 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=x2x˙2=x3+b0ux˙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+b0u−β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ωos2+3ωo2s+ω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=kpe1+kde2
其中:
- 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)+b0u
控制器可以设计为:
u = u 0 − z 3 b 0 \boxed{u=\frac{u_0-z_3}{b_0}} u=b0u0−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)+b0b0u0−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 的应用范围非常广,但如果从核心能力来看,可以归纳为两个最重要的功能:
- 未知扰动的实时估计与主动补偿。
- 模型不确定条件下的高性能跟踪控制。
其他功能,例如抑制参数变化、改善动态响应、降低对精确数学模型的依赖等,实际上也主要围绕这两个核心能力展开。
3.1 核心功能一:未知扰动的实时估计与补偿
这是 ADRC 最具代表性的功能。
假设一个电机的转速控制系统:
J ω ˙ = K t i − T L − B ω J\dot{\omega}=K_t i-T_L-B\omega Jω˙=Kti−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 估计。
其控制过程可以理解为:
例如,假设电机在 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)+b0u
其中:
- 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+b0u−β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)−kdz2
如果采用期望闭环带宽 ω 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=b0kp(r−z1)−kdz2−z3
这就是一个完整的二阶 LADRC 控制器。
4.3 ADRC 的工程实施流程
具体来说:
第一步:确定系统阶次。
工程中通常不是要求完全辨识系统,而是确定系统主要动态特征可以用几阶积分环节近似。
例如:
- 温度系统通常可以使用一阶近似。
- 电机位置系统可以使用二阶近似。
- 某些复杂机械系统可能需要更高阶模型。
第二步:估计控制增益 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-Derivative | Active 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=b0u0−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) umink=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=b0u0−d^(t)
主动补偿总扰动。
简单来说:
- MPC 更关注:未来怎么控制才最优?
- ADRC 更关注:当前系统受到什么未知影响?如何把它抵消?
在某些复杂系统中,两者还可以组合使用,例如使用 MPC 生成控制目标或参考轨迹,再利用 ADRC 增强底层执行系统的抗扰能力。
5.4 ADRC 的优点与缺点
优点
-
对精确数学模型的依赖程度较低。
ADRC 只需要对被控对象建立合理的低阶近似,不必完全掌握复杂的系统动力学。 -
能够主动估计并补偿未知扰动。
这是 ADRC 最重要的优势,也是它区别于普通误差反馈控制的重要特点。 -
对内部不确定性和外部扰动具有统一处理能力。
它可以把摩擦、参数变化、负载变化和未建模动态纳入总扰动。 -
具有较好的工程可移植性。
LADRC 的结构相对清晰,可以通过数字控制器实现,适合嵌入式控制和实时控制系统。 -
参数化设计相对方便。
在线性 ADRC 中,可以通过控制器带宽和观测器带宽进行系统化整定。
缺点
-
仍然需要一定的系统先验信息。
虽然不需要精确模型,但需要确定主要系统阶次,并合理估计控制增益 b 0 b_0 b0。 -
ESO 对测量噪声比较敏感。
尤其是观测器带宽较高时,噪声可能被放大。 -
参数整定存在一定难度。
需要综合考虑控制器带宽、观测器带宽、采样频率和系统实际动态。 -
无法突破执行器物理约束。
如果电机最大电流不足,或者执行器已经达到最大输出,ADRC 也无法凭空产生额外控制能力。 -
对快速变化和高频扰动的补偿能力有限。
扰动变化速度超过观测器和执行器能够响应的范围时,估计和补偿都会出现滞后。 -
复杂系统的稳定性分析可能比较困难。
尤其是非线性、高阶、时变、多输入多输出系统,需要针对具体结构开展理论分析和验证。
六、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=b0u0−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+b0u−β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=kpe1+kde2
特点:
- 结构相对简单。
- 参数整定相对容易。
- 方便进行频域和时域分析。
- 容易实现数字化部署。
对于初学者来说,建议先学习 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)+Tsz˙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)+Tsz˙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)+Tsz˙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 的技术外延:
需要说明,图中的分类并非严格互斥的树状分类。例如,自适应 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)+b0u
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=b0u0−d^(t)
最终目标:
y ¨ ≈ u 0 \ddot y\approx u_0 y¨≈u0
将复杂的未知影响尽可能抵消,使系统表现为便于设计的近似积分器串联系统。
7.2 官方文档及权威学习资料
下面整理了一些适合进一步学习的资料,分为工程文档、经典论文和开源实现。
-
MathWorks:Active Disturbance Rejection Control
工程实现推荐介绍 ADRC 的一阶、二阶模型逼近,ESO 结构、带宽参数化和控制器配置。
MathWorks 官方 ADRC 文档
适合:Simulink 仿真、工程参数设计、实际控制器搭建。 -
MathWorks:Design Active Disturbance Rejection Control
Simulink ADRC 模块与设计说明
适合:理解控制器模块、配置模型阶次及控制带宽。 -
Jingqing Han:From PID to Active Disturbance Rejection Control
经典论文,2009 年发表于 IEEE Transactions on Industrial Electronics,介绍 ADRC 的理论动机,以及它如何从 PID 思想发展而来。
阅读论文 PDF -
pyadrc:Python ADRC Documentation
代码实践推荐提供 Python 环境下的 ADRC 实现、基本原理和参数整定说明。
pyadrc 官方文档
适合:Python 仿真、算法实现和控制参数学习。 -
Active disturbance rejection control: Methodology and theoretical analysis
介绍 ADRC 的方法体系、数学理论和稳定性研究。
阅读理论综述
适合:深入研究 ESO 收敛性、控制稳定性和理论边界。 -
自抗扰控制技术及其实际应用综述
阅读中文综述
适合:了解 ADRC、LADRC 的发展及工程应用现状。
八、最终总结:ADRC 带来的控制思想启示
ADRC 的价值不只是提供了一套新的控制算法,更重要的是改变了我们处理复杂系统的思考方式。
传统控制设计往往倾向于:
先尽可能准确地理解系统,再根据系统模型设计控制器。
ADRC 则提供了另一种思路:
当系统无法被完全理解时,可以先建立合理的简化模型,再通过实时观测和反馈,处理那些无法准确建模的部分。
从技术角度看,ADRC 最核心的三个关键词是:
- 总扰动(Total Disturbance):统一描述未知因素。
- 扩张状态观测器(ESO):实时估计未知状态和总扰动。
- 主动补偿(Active Compensation):利用估计结果抵消扰动。
真正的控制能力,不一定来自对世界的完全认知,也可以来自对未知的持续观测、及时反馈,以及对不确定性的主动管理。
这也是 ADRC 最值得理解的地方:不必等到完全掌握一个复杂系统,才开始控制它;关键在于建立合理的认知边界,并持续修正自己对系统的判断。
ADRC 的本质,就是把未知变成可观测,把扰动变成可估计,再把估计结果变成控制能力。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)