
搞自控的人大概率都听过这样一句话PID调得好下班走得早PID调不好头发掉得早。这句话戏谑归戏谑背后其实是很多工程师的真实处境——面对强耦合、大惯量、强扰动的被控对象固定增益的PID往往不够用于是不得不加前馈、加解耦、加自适应……系统越改越复杂参数越来越多最后连自己都说不清每个参数到底在干什么。这就是我当初转向线性自抗扰控制LADRCLinear Active Disturbance Rejection Control的原因。如果你也在跟扭矩波动、负载突变、模型不确定性较劲这篇文章就是写给你看的。LADRC不是凭空冒出来的新花样它脱胎于韩京清先生提出的自抗扰控制ADRC后由高志强教授在“带宽参数化”思路上做了线性化落地让这套理论从学术论文走进程控代码。它最核心的价值在于不再依赖精确的数学模型而是把内部动态和外部扰动统一当作“总扰动”用一个扩张状态观测器ESO把它估出来、再补偿掉。换句话说PID在跟误差打架LADRC在跟扰动的根因打架——方向完全不同。这篇博文是LADRC系列的第一篇我会从最基础的概念讲起把“为什么需要它”“它的框架是什么”“线性化怎么实现”“关键参数怎么整定”这些地基问题讲透给后面聊实际工程案例打好底子。适合正在做控制系统设计、读论文读到ADRC但不知道从哪下手的同学也适合已经在用PID、想给自己多留一条技术路线的工程师。1. 为什么LADRC值得学从三个让PID抓狂的场景说起1.1 场景一负载突变时积分项为什么“帮倒忙”先看一个非常典型的场景你负责一套卷绕张力控制系统卷径从空卷到满卷转动惯量可能变化好几倍而且物料换卷的瞬间张力会突然跳变。用常规PID比例项看到误差立刻出力但刚度有限积分项为了消除稳态误差一直在慢慢累积。问题是积分累积的速度永远赶不上扰动变化的速度——扰动是阶跃式的积分是斜坡式的两者之间永远隔着一层。更麻烦的是当张力传感器信号跳变或丢失时积分项会一路“冲顶”产生严重的积分饱和等信号恢复系统要花很长时间才能从饱和状态“退”回来误差反而被拉得更大。我见过不少工程师用抗积分饱和、条件积分、变速积分这些办法去修修补补能缓解但始终没解决本质问题PID本质是误差驱动它被误差拖着走永远在“追”误差而没有直接问“这个误差到底是谁造成的”。1.2 场景二模型不可靠前馈加了等于白加第二个让PID吃力的场景是“模型不完全可知”。做机电伺服的人最清楚一个看似简单的Jθ̈ Kt·i τd方程实际运行中J随负载变化摩擦系数随温度和速度变化电气时间常数随绕组温度漂移还有死区、滞环、间隙……如果按标称模型算一个前馈量模型一偏前馈方向甚至可能反了性能比不加还差。LADRC的思路在这里发生了根本转向既然精确模型搞不定那我就不依赖它。把模型偏差、未建模动态、外部扰动全部打包成一个“总扰动”用观测器实时估计、实时补偿。模型只需要提供一个大致的“控制增益b0”相当于知道踩油门的“大致反应比例”剩下的误差都靠观测器“摸”出来。1.3 场景三多回路级联参数交叉影响让人头皮发麻再有一个场景是层级嵌套。比如无人机姿态-速度-位置三环、电机电流-速度-位置三环层与层之间的带宽必须拉开才能稳定。普通PID三环每一环都有一堆参数改内环会影响外环改外环可能激发内环谐振调试顺序稍有不慎就要推倒重来。LADRC的优势在于每一层都可以用“观测器带宽控制器带宽”两个参数描述动态特性整个系统的带宽关系非常透明内环比外环快3~5倍的设计规则清清楚楚不再是一团乱麻。这也是很多团队尝到甜头后不愿意退回纯PID的原因。2. ADRC核心思想拆解TD、ESO和NLSEF分别干了什么2.1 跟踪微分器TD给信号安排一条“平稳路线”讲LADRC之前得先把ADRC的完整框架说清楚因为LADRC是从它简化来的。ADRC经典三件套跟踪微分器TD、扩张状态观测器ESO、非线性状态误差反馈NLSEF。跟踪微分器解决的是“参考信号跳变”的问题。比如机械臂末端要从A点快速走到B点如果直接给一个阶跃指令执行器会拼命冲但物理系统根本受不了这种加速度冲击。TD的作用就是同时输出的参考轨迹及其微分信号——也就是给参考信号“平滑化”规划出一条既快又稳的路径并把这条路径的“速度”也解算出来。工程上TD还承担一个额外职责提取信号的微分。直接对带噪声的传感器信号求导噪声会被放大到不可用TD通过跟踪过程间接获得微分相当于加了滤波提取出来的速度信号平滑可用。这个思想后来在LADRC里依然重要只是实现形式更简洁了。2.2 扩张状态观测器ESO控制系统的“雷达”ESO是整个ADRC框架的灵魂。普通状态观测器能估计系统状态变量但ESO多了一个“扩张”状态——把总扰动当作一个额外的状态变量一起估计出来。这个想法的巧妙之处在于我们不需要知道扰动从哪里来、长什么样、是线性的还是非线性的只要它可观测、有界ESO就能实时追着它跑。用一个类比来说ESO就像雷达不只看到目标状态还看到目标身后的“遮挡物”扰动然后实时上报“当前总扰动约等于多少请补偿。”在ADRC早期版本里ESO用的是非线性函数最典型的是fal函数带幂次和线性区间切换好处是收敛快、精度高缺点也很致命——参数多、稳定性分析困难、调参高度依赖经验。这就直接引出了后面的线性化。2.3 非线性状态误差反馈NLSEF用“大误差大增益、小误差小增益”取代积分ADRC的第三件套是非线性状态误差反馈。传统PID靠积分消除稳态误差但积分有滞后性。韩院士的洞察是误差大时用小增益防止超调误差中等时用大增益获得快速响应误差小时用大增益压住扰动——非线性增益曲线可以人为设计出“大误差小增益、小误差大增益”的非线性关系本质是近似一个变增益PD控制器从而在不需要积分项的前提下实现无静差控制。这打破了“必须用积分才能消静差”的惯性思维。只要观测器能把扰动补偿到位系统近似成为纯积分串联型PD就够用了积分带来的相位滞后和饱和问题自然消失。这是ADRC与PID在控制哲学上最根本的分野。3. 从非线性到线性LADRC的简化逻辑与带宽参数化3.1 高志强教授的关键一步为什么敢把非线性“砍掉”ADRC理论很优美但在2000年代初期很难进入工程界。原因非常现实fal函数里的幂指数α、线性区间δ、非线性反馈的增益β1、β2、β3……这些参数谁调谁知道彼此之间耦合严重没有一个清晰的物理意义调参基本靠“玄学”。而且非线性系统的收敛性证明非常困难学术界好发文章工程界不敢用。高志强教授做了一个“降维打击”式的简化把非线性ESO改成线性观测器把非线性状态反馈改成线性PD组合。从结构上LADRC退化成了“线性扩张状态观测器LESO PD控制器”的组合但它保留了ADRC最核心的思想——扰动估计与补偿。这一步的价值在于一个原本需要试凑很多参数的控制器被提炼成三个参数观测器带宽ωo、控制器带宽ωc、控制增益b0。这三个参数全部有明确的物理意义和整定规则。3.2 带宽参数化的推导为什么是“3倍、3倍、1倍”带宽参数化不是拍脑袋想出来的它源于一个非常朴素的数学目标让观测器的特征方程变成(λωo)的n次方标准形式。以二阶对象为例扩张后的系统是三阶的两个原状态一个总扰动状态。线性观测器的特征方程为λ³ β1·λ² β2·λ β3 0如果把期望的观测器极点都配置在同一个位置即λ -ωo处那么期望特征方程是(λ ωo)³ λ³ 3ωo·λ² 3ωo²·λ ωo³对比系数立刻得到β1 3ωoβ2 3ωo²β3 ωo³这就是“三倍、三倍一次方、一倍三次方”的来历。控制器的PD增益同样通过带宽参数化配置kp ωc²kd 2ωc这意味着整个LADRC参数整定从一个“搜索问题”变成了一个“选带宽问题”——你只需要回答“系统希望多快”再根据硬件约束定一个ωo和ωc的比例关系参数就齐了。3.3 线性化之后丢掉了什么、保留了什么很多对ADRC了解不深的人会担心把非线性变成线性是不是把精华也丢了这个问题要辩证看。丢掉的确实是“大误差小增益、小误差大增益”这种精细的非线性调节能力但换来的是稳定性分析工具丰富线性系统理论、频域分析、鲁棒控制理论都能用参数物理意义明确带宽就是带宽跟系统的响应速度直接挂钩实现成本极低不需要查表、不需要分段函数几行C代码就写完调参门槛大幅下降从“调5到6个参数”变成“调1到2个参数”。从大量工程实践来看LADRC在中低频段的表现与非线性ADRC几乎无差别只在极高速、极大扰动的工况下非线性版本略有优势。但对绝大多数工业对象来说那点优势不值得付出成倍的调参代价。4. LESO的数学原理与实现细节4.1 二阶对象的三阶扩张状态方程怎么列看一个最常见的二阶对象模型比如电机位置环ẍ f(x, ẋ, w, t) b·u其中f代表所有内部动态、未建模动态和外部扰动的总和b是控制增益的真实值。我们不知道f的精确表达式但假设它可观测。定义状态变量x1 x位置x2 ẋ速度x3 f总扰动扩张状态假设总扰动变化缓慢即ḟ约等于0这不是要求f恒定而是要求f的变化率相对于观测器收敛速度足够慢实际由观测器带宽兜底就可以写出扩张后的状态方程ẋ1 x2 ẋ2 x3 b·u ẋ3 04.2 LESO观测器方程与增益配置的实现逻辑根据状态方程构造线性扩张状态观测器LESOż1 z2 β1·(y − z1) ż2 z3 β2·(y − z1) b0·u ż3 β3·(y − z1)其中y是实际测量输出z1跟踪yz2跟踪ẋz3跟踪总扰动。β1、β2、β3按上一节带宽参数化的结果配置β1 3ωo β2 3ωo² β3 ωo³这里有一个工程上必须说清楚的细节模型里用的是b0控制增益的估计值而不是真实b。LESO在运行中会同时面对“b0与b不一致”带来的建模误差这个误差同样会被归入z3这个总扰动状态中去由观测器一并估计。这是LADRC对模型不确定性宽容的数学根源。4.3 离散化实现是初学者最常翻车的地方理论方程看着清爽写进代码就是另一回事了。连续域设计的观测器增益在离散化之后会引入一个非常隐蔽的问题观测器极点从连续域映射到离散域时位置会发生偏移。如果你的控制周期是1kHzωo取30 rad/s偏移还不明显但当你把ωo推到150甚至200 rad/s也就是控制周期的1/10以上时直接使用连续域增益会导致观测器实际行为与设计偏差越来越大极端情况下离散化后直接不稳定。工程中常用的离散化方法有三种前向欧拉、后向欧拉、双线性变换Tustin。我自己的习惯是控制器周期在1kHz以上、ωo小于采样频率的1/20时前向欧拉完全够用代码最简单控制器周期在500Hz到1kHz之间建议用双线性变换精度和实现复杂度平衡最好对快速系统比如电力电子变换器直接在设计时就把离散极点配置到指定位置不要通过连续域转换用MATLAB的place函数在离散域求解增益最稳。写代码时还有一个所有教程都不会提醒你的细节LESO的递推要使用上一时刻的u控制量不是当前时刻的u。因为实际代码中控制量是先算出来、后输出到执行器的如果写成先更新观测器再算控制律观测方程里用的u和实际作用于对象的u就差了整整一个周期。这个时序问题会导致观测误差在高带宽下急剧放大是我帮人排查LADRC调试问题时遇到过最多的低级错误。5. LADRC的完整控制律与闭环带宽整定5.1 控制律u (u0 − z3) / b0到底在干什么LADRC的控制律非常简单u (u0 − z3) / b0其中z3是LESO对总扰动的实时估计u0是一个虚拟控制量。把u代入原对象模型会得到有趣的约简ẍ f b·u ≈ f b·(u0 − z3) / b0如果b0近似等于b且z3近似等于f则f和z3相互抵消ẍ ≈ u0这就是LADRC最核心的魔法原本那个带扰动的复杂对象在控制器的视角里被“校正”成了一个简单的双重积分器。剩下的任务就简单了——设计u0去控制一个纯积分串联对象PD就绰绰有余u0 kp·(r − z1) − kd·z2注意这个等式的微妙之处不直接用测量值y和ẏ而用观测器输出z1和z2。原因是LESO自带滤波效果观测器输出的z1、z2比原始传感器信号更干净尤其是速度信号z2避免了直接微分的噪声放大问题。这一点在工程上价值巨大。经过带宽参数化kp和kd设置为kp ωc² kd 2ωc此时闭环系统的传递函数近似为一个标准的二阶系统G(s) ≈ ωc² / (s² 2ωc·s ωc²)阻尼比为1临界阻尼无超调调节时间约等于4.4/ωc。这个结论非常漂亮——你选一个ωc就精确知道系统会多快稳定不再需要反复试凑。5.2 观测器带宽ωo与控制器带宽ωc的整定关系LADRC参数整定的核心关系就一个观测器带宽必须明显高于控制器带宽。为什么因为LESO的作用是“实时供应”扰动估计和状态估计如果观测器本身反应慢控制律拿到的是一个滞后的补偿量扰动不但没被抵消反而可能被错误放大。从频域角度看观测器通道的滞后会降低相位裕度。经验法则是最简单ωo 3~5ωc。这是高志强教授在各种论文和课程里反复推荐的比例适用于大部分机电系统测量噪声小时可适当加大取ωo 5~10ωc扰动抑制更积极测量噪声大时反而要降低取ωo 2~3ωc通过牺牲一部分扰动估计带宽换取平滑性。还有一个反直觉的坑把ωo调得过高不一定会让系统更好。观测器带宽高于传感器采样频率的1/10时离散化误差和测量噪声会被放大z2速度估计和z3扰动估计可能出现高频抖振这些抖振通过控制律直接输入执行器造成不必要的发热和磨损。我调试某型转台时就踩过这个坑把ωo从80调到120扰动抑制确实好了但电流环开始出现明显的毛刺声最后不得不回调到100并加了低通滤波才平衡。5.3 控制增益b0的工程辨识技巧b0可以理解为“单位控制量能产生多大加速度”的估计值。它不要求精确但对系统稳定性影响很大b0偏大会导致补偿不足扰动抑制能力下降b0偏小会导致过补偿甚至引发振荡。工程上辨识b0有两条路离线辨识法给对象一个恒定的控制输入u等系统进入匀加速阶段后测量输出的二阶差分除以u就是近似的b0。比如位置环系统给定恒定速度指令记录位置曲线拟合二次项系数就得到b0。也可以在开环下给阶跃控制量直接测加速度变化率。在线自整定法渐近法先用一个偏保守的估计值让系统稳定运行然后观察LESO输出的z3总扰动估计是否呈现“脉冲样跳变”。如果z3在控制量突变时刻出现大的尖峰说明b0不准确此时根据z3尖峰的方向调整b0——若z3尖峰与控制量同符号说明b0偏小反符号则偏大。一般来说b0做到“真实值的60%到150%之间”LADRC都能稳定工作这个容错范围对工程应用非常友好。另一个不得不提的工程细节当控制量饱和比如PWM占空比打满时LESO的观测方程里用的u是饱和后的值还是计算值结果截然不同。如果用的是饱和前计算出来的u观测器会以为对象正在接受一个很大的输入从而低估补偿需求等退出饱和时z3已经偏离实际系统会出现延迟纠正的现象。正确做法是观测器必须使用饱和后的实际输入值在代码里就是clamp之后、送往执行器之前的值。这个问题在LADRC里与PID的积分饱和问题同样致命但比积分饱和更难察觉。6. 从理论到应用LADRC适合什么场景、不适合什么场景6.1 已经验证过的典型应用案例LADRC在工程上推广速度很快我梳理几个坡度较小的典型应用供刚开始接触的人找感觉电机伺服系统位置环/速度环这是LADRC最经典的试验田。负载转动惯量变化、摩擦转矩突变、齿槽转矩脉动这些扰动的频率和幅值都很适合LESO发挥作用。很多文献实现了“无速度传感器”的转速估计因为LESO的z2本质上就是一个速度估计器无人机/导弹姿态控制飞行器在飞行中气动参数变化剧烈模型不确定性大LADRC不需要精确知道气动导数就能稳住姿态而且姿态环和角速度环可以统一用LADRC实现结构比PID串级更简洁电源变换器Buck/Boost等输入电压突变和负载突变是电源设计最头疼的事LADRC的扰动补偿能力在电压环上有天然优势尤其是数字化电源里实现成本很低运动控制与机器人机械臂关节的惯量随姿态变化LADRC可以在不依赖精确动力学模型的前提下保持轨迹跟踪精度过程控制温度、压力、流量大惯性、纯滞后明显常规PID很难兼顾响应速度和超调LADRC配合适当的滤波器可以得到比PID更顺滑的过渡过程。6.2 工程边界什么情况下LADRC可能不是最优解再好的方案也有边界。LADRC不能包打天下以下情况你要特别警惕测量噪声极大或严重丢包LESO需要足够好的测量信号作为输入。如果传感器噪声和有效信号的比值很高观测器带宽只能压低而控制器带宽也跟着受限性能可能还不如调教精良的PID加滤波器执行器存在明显非对称性和强非线性比如液压系统的死区、伺服阀的滞环非常严重时LESO把非线性当作扰动估计没有问题但控制量饱和后系统可达性下降观测器可能被迫在无解的输入条件下工作系统存在纯滞后LADRC的扰动补偿模型默认控制量立即作用于加速度如果对象本身有大的纯滞后LESO的估计会明显超前于实际输出直接套用会出现超调。这时候需要引入Smith预估器或设计专门的滞后补偿结构不能拿LADRC硬套非常高的频段要求LADRC有源抑制中低频扰动很出色但在高频段观测器带宽受采样频率和噪声双重限制高频扰动抑制能力并不突出。对振动抑制要求极高的精密装备还是得结合专门的谐振控制器或陷波滤波器。6.3 学习LADRC的实操路径建议我的建议是别一上来就啃高志强教授的原始论文。按照“先会跑通仿真再理解为什么能跑通最后替换到真实系统”的路径用Simulink或Python搭一个二阶对象模型先不加扰动把LADRC闭环跑通观察z1、z2、z3三个观测变量是否分别跟踪位置、速度和总扰动。这是建立“观测器直觉”最重要的一步逐步加入模型不确定性、外部扰动、量测噪声观察LADRC的表现退化过程体会ωo和ωc的相对关系如何影响控制质量对比PID与LADRC在同一对象、同一扰动下把两套参数都调到“你认为的最佳”再对比阶跃响应和抗扰能力。这个对比过程会让你真正理解两种方法在思路上的差异在真实硬件上先跑位置环或转速环尽量选择你熟悉的对象这样可以把注意力集中在观测器时序、饱和处理这些实现细节上而不是被对象本身的问题干扰最后再回头读经典论文。有了“跑通”的经验再去读原理推导你会对每个公式背后的工程动机有更深的感受而不是停留在数学推导层面。我自己的体会是LADRC的入门最大障碍不是数学而是思维惯性。大多数用惯了PID的人潜意识里还是会去“调比例、调积分、调微分”遇到问题就下意识地去找“再加一个环路会不会更好”。LADRC要求你换一套坐标系去思考问题——不问“误差怎么变化”而问“扰动是什么、补偿到位没有”。一旦过了这个坎你会发现许多以前需要专门设计复杂控制结构才能解决的问题用LADRC一个框架就能统一处理系统的层次感一下子清晰了很多。后面的系列文章里我会接着聊LADRC的实际参数整定全流程、与PID串级的对比实验数据、以及在具体硬件平台上的离散化实现和调试技巧。如果你正打算把某个对象切换到LADRC控制建议先把这篇的基础概念吃透尤其是LESO的时序和b0的辨识方式这两块是实际项目中最容易出问题、也最能体现调试水平的地方。别急着抄代码先把“总扰动”这个概念在脑子里扎根后面所有的细节都会水到渠成。