ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

LADRC与PID的Simulink仿真对比:原理、建模与参数整定

2026/9/12 7:53:38 拓冰建站 浏览量
LADRC与PID的Simulink仿真对比:原理、建模与参数整定 做控制的人一定绕不开PID但这两年搞运动控制、机器人、电力电子的人开始越来越多地讨论另一个缩写——LADRC。我最早接触LADRC线性自抗扰控制是在做伺服电机位置环的时候项目要求高响应低超调还得扛得住负载突变传统PID调来调去总差口气后来对着Simulink把LADRC搭起来一比才真正理解这东西为什么在工业界和学术界同时火起来。这篇内容不是教科书式的理论推导也不打算把韩京清先生的原始论文再复述一遍。我基于自己的实际仿真经验带你把LADRC和PID放进同一个Simulink模型里从原理、建模、调参到结果对比走一遍完整流程。无论你是在校学生做课程设计还是工程师评估控制方案这篇指南都能帮你降低入门门槛快速建立对两种算法的直观认知。1. 控制方案对比为什么偏偏是LADRC和PID放在一起比1.1 从PID说起误差驱动的直觉与控制局限PID控制器的逻辑极其朴素且有效它完全围绕“误差”做文章。把期望值和你实测值之间的差值算出来对这个差值做比例、积分、微分三种运算然后加权求和作为控制量。这个思路直观到几乎不需要数学模型你只需要知道“偏了多少”和“偏差怎么变化的”就能拼出一个能用的控制器。正是因为这种简单和通用性PID在工业现场统治了几十年。温度控制、流量调节、电机调速大到发电机组小到加热棒到处都有它的身影。调试一套PID参数有临界比例度法、衰减曲线法再有经验丰富的工程师拿着上位机软件看趋势曲线手动微调基本都能取得可以接受的效果。但PID的局限也很明显。首先它是一个“被动”的控制器必须先出现误差控制器才有动作依据所以被控对象本身的滞后或惯性常常导致超调和振荡。其次PID对“总扰动”没有主动抑制能力。所谓总扰动是内部参数变化、外部负载突变、未建模动态的总和PID只能靠积分项慢慢去磨遇到强扰动时动态性能会变得很拉胯。第三PID参数之间相互耦合P大了超调增加D大了噪声放大I大了容易积分饱和调参很多时候是在多个相互冲突的目标之间妥协。1.2 LADRC的破局思路观测并补偿总扰动LADRC的本质思路是与其被动地等误差出现再纠正不如主动估计出系统当前受到的“总扰动”然后把这个估计值直接补偿掉。核心部件叫扩张状态观测器ESO它把系统的内部动态和外部扰动统一看作一个“扩张状态”通过被控对象的输入输出数据实时观测出来。这句话听起来有点绕我用一个生活类比来讲。你开车上坡如果不知道是上坡还是按照平路的油门开度踩车速就会掉下来。PID的做法是看到车速降了再加大油门追回来属于事后补偿。LADRC的做法是ESO就像你坐在副驾上实时感觉车身倾斜然后告诉你“现在在上坡斜率大约5%”你直接提前把油门加上去速度几乎不掉。这个“坐在副驾上实时感觉”的过程就是观测器在起作用。LADRC把一个复杂的、不确定的受控对象通过总扰动的估计和补偿强行拉回一个简单的“线性积分串联型”结构然后再用简单的PD控制器去控制这个被“净化”后的对象。这样一来它不需要精确的数学模型却能把模型失配和外部扰动统统当作扰动处理掉。这正是它和PID放在一起对比时最有意思的地方两者的信息利用方式完全不在一个层次上。1.3 入门学习者能从这份对比中获得什么对刚接触控制理论的读者来说做LADRC和PID的仿真对比价值不止是“看看谁更好”这么简单。它至少能帮你在几个维度建立起控制系统的工程直觉。第一你会直观理解“反馈”和“观测/补偿”这两种对抗扰动的不同哲学。第二你会亲眼看到同一个被控对象在面对阶跃给定、负载突变、模型失配时两种算法的动态响应差异。第三你会通过亲手搭建Simulink模型掌握现代控制算法从公式到仿真的转化能力。这个能力比单纯背会几个控制算法的公式有用得多因为实际工作中你面对的绝大多数问题都是“能不能快速验证一个想法”的问题。我在带新人做控制算法入门时一直推荐用这个方法先选一个难度适中的被控对象然后分别实现PID和LADRC最后通过仿真对比体会差异。这篇文章就是照着这个思路来安排的。2. Simulink仿真环境搭建与核心模型实现2.1 被控对象与仿真参数设定做对比仿真的第一步是选一个难度适中、又足够有代表性的被控对象。难度太低体现不出LADRC的优势难度太高又会让初学者的注意力全放在调参而非理解算法上。我常用的选择是一个带惯性的二阶系统这种结构在电机、机械传动、热工对象里非常普遍既有二阶振荡特性又有纯滞后环节可以模拟现实系统的延迟。我用一个直流电机速度控制模型来作为示范对象它的传递函数是一个典型的一阶惯性加积分结构G(s) K / (s(Ts 1))其中K是增益常数T是机电时间常数。为了模拟实际系统中的非线性我还会在反馈通道加入量测噪声并在模型输入端加入一个可开关的负载扰动信号。这样搭建出来的被控对象既有代表性又不会复杂到让读者失去耐心。仿真步长这里我特别提醒一下我使用定步长求解器步长设为0.001秒仿真时长设为10秒。定步长求解器更贴近实际嵌入式控制系统运行的离散节奏避免使用变步长求解器时由于步长自动缩小而出现的“仿真收敛但实测定发散”的假象。这一点对初学者来说是很容易忽略却至关重要的细节。如果计划后续做代码生成或硬件在环测试仿真步长从一开始就要按目标硬件实际控制周期来设置。2.2 PID控制器的实现与参数初值设定PID控制器在Simulink里的搭建方式很多最基础的方式是从Simulink库中拖入“PID Controller”模块。但为了对比实验的公平性我建议使用标准公式的子系统模型u(t) Kp * e(t) Ki * ∫e(t)dt Kd * de(t)/dt在这个公式里Kp决定响应速度Ki负责消除稳态误差Kd抑制超调和振荡。三个参数既相互配合又相互制约这是PID调参的艺术所在。为了贴近实际工程我在PID子系统中加入了三个细节处理输出限幅防止积分饱和、微分项滤波防止高频噪声被微分放大、积分分离在偏差较大时暂时禁用积分作用。这三个细节在理论推导中通常被跳过但在实际系统中它们是PID能正常工作的关键保障。很多学生仿真的PID在理想环境下表现得很好一旦加入噪声或限幅就发散问题往往出在这几处。PID参数的初始值我采用经验法设定先令Ki和Kd为零只保留比例环节从小到大增加Kp直到系统产生等幅振荡记录此时Kp和振荡周期再根据Ziegler-Nichols经验公式计算 Ki 和 Kd 的初始值。这种整定流程保证后续对比实验中的PID参数不是一个随意拍的“凑数”值而是一个经过调试、具备合理基准的参数集。2.3 LADRC控制器的核心实现ESO与被控对象的模型化LADRC的实现没有像PID那样方便的现成模块需要自己动手搭建但步骤并不复杂。最核心的部分是扩张状态观测器ESO它负责实时估计系统的状态和总扰动。LADRC的一个关键优势是它不需要精确的被控对象模型但需要知道对象的“相对阶”。所谓相对阶简单理解就是“控制量要经过多少层积分才能到达输出量”。对于二阶系统输入需要经过两次积分才能影响输出因此我们可以把被控对象近似看作一个二阶积分串联型系统。基于这个二阶假设我搭建一个三阶ESO两个系统状态一个扩张状态e z1 - ydz1/dt z2 - β1 * edz2/dt z3 - β2 * e b0 * udz3/dt -β3 * e其中z1、z2是系统状态比如速度和加速度的估计值z3是总扰动的估计值u是控制器的输出b0是控制增益的估计值β1、β2、β3是观测器的增益。这三个观测器增益的确定有个经典方法就是带宽参数化。把观测器增益配置到以观测器带宽ωo为唯一参数的期望极点位置β1 3 * ωoβ2 3 * ωo²β3 ωo³这样的参数化方法把三个增益的整定问题简化为一个参数ωo的整定问题工程上极其方便。控制器部分则采用一个简单的PD控制器u0 Kp * (r - z1) - Kd * z2然后再把ESO估计出的总扰动z3补偿掉u (u0 - z3) / b0。Kp和Kd根据控制器带宽ωc来设计Kp ωc²Kd 2 * ωc通过这个“带宽法”整个LADRC也只需要整定两个参数观测器带宽ωo和控制器带宽ωc。对比PID的三个参数LADRC在参数整定难度上反而更简单。我用Simulink中的“MATLAB Function”模块完成了ESO和PD控制器的实现这样既能保持模型的清晰度又便于后续修改带宽参数做对比实验。3. 参数整定方法与调参实操记录3.1 基于临界比例度法的PID参数整定完整流程PID参数整定的第一步是先得到一组合理的初始参数。我用的临界比例度法流程如下在纯比例作用下从较小的Kp开始逐渐增大。当系统输出曲线出现等幅振荡时记录临界比例度Kp,crit和振荡周期Tcrit然后根据Ziegler-Nichols整定公式得到P、I、D参数Kp 0.6 * Kp,critKi Kp / (0.5 * Tcrit)Kd Kp * (0.125 * Tcrit)。我在仿真中测得的临界参数为Kp,crit 8.5Tcrit 0.45秒计算得到初始PID参数为Kp 5.1Ki 22.7Kd 0.57。拿到初始值后在Simulink中运行观察阶跃响应曲线根据趋势做微调超调量过大优先减小Kp或增大Kd稳态误差久调不掉则增大Ki响应速度过慢则增大Kp。经过几轮试凑最终确定三组PID参数分别对应“保守”“平衡”“激进”三种性能表现。这三组参数对理解PID的特性非常有帮助你可以在仿真中切换查看不同参数组合对系统指标的影响。调试时注意一个规律Kp增大会加快响应但会增加超调Ki增大会消除稳态误差但可能增加振荡Kd增大会抑制超调但会将高频噪声放大。三者之间的权衡曲线亲自拉一下比看十篇教程都管用。3.2 LADRC带宽参数化的调参逻辑与实操LADRC的整定比PID更符合“直觉”它的两个参数分工明确。控制器带宽ωc决定了闭环回路的响应速度ωc越大响应越快但超调也会增加。观测器带宽ωo决定了ESO估计扰动的速度和精度ωo越大估计越快、越准但同时对噪声越敏感。整定的顺序有讲究我建议先整定ωc再整定ωo最后两个人配合微调。先设置ωo为ωc的5至10倍再从小到大增加ωc直到阶跃响应接近期望的速度。然后固定ωc从小到大调整ωo观察扰动抑制效果。当系统受到阶跃扰动时ESO估计出的z3能否快速跟踪真实扰动是判断ωo是否合适的直观标准。我最终确定的参数为ωc 8ωo 40b0 12.5。之所以让ωo远大于ωc是为了保证观测器的收敛速度远快于控制回路否则ESO对扰动的估计滞后补偿效果会大打折扣。这个5至10倍的经验比例在大多数控制周期为1ms至10ms的系统里都能作为起步参考。3.3 调参中容易踩的坑与个人经验调参过程中我遇到过几个典型问题在这里提前给你打个预防针。第一个坑是观测器带宽ωo取得过大。初学时容易想当然地认为观测器带宽越大越好其实不然。当ωo过大时ESO会把测量噪声也当成了系统的真实状态表面上z3的曲线很“灵敏”实际上控制量u在剧烈抖动执行机构会非常受伤。我习惯用控制量曲线来判断ωo是否过大的如果控制量出现高频抖动而系统输出没有明显改善大概率是ωo过大了需要降下来。第二个坑是b0的取值与物理实际相差太远。b0是控制器对“控制输入对被控量的影响程度”的估计值它并不要求精确等于真实值但偏差过大会让ESO的补偿量出现稳态偏置导致系统输出存在残差。一个简便的判定标准是在仿真开头给控制量u一个阶跃记录被控量y的变化率用这个变化率作为b0的参考值实测一般偏差在正负30%以内问题不大。第三个坑是仿真步长与系统带宽不匹配。LADRC的ESO天然是高带宽的如果仿真步长取得太大会出现ESO计算发散的假象。当发现仿真的数值振荡与步长相关时检查是否有足够的时间分辨率和数值精度而不是急着去调参。4. 仿真结果对比与性能差异分析4.1 阶跃响应对比超调量、调节时间与稳态误差完成参数整定后进入最关键的对比环节。我首先给系统施加一个单位阶跃给定信号观察两种控制器的闭环响应曲线统计三个关键指标超调量、调节时间进入稳态值正负5%范围所需时间和稳态误差。从仿真结果来看PID的阶跃响应有约18%的超调量调节时间约为0.62秒稳态误差基本为零。LADRC的超调量明显更小约为4%调节时间约为0.35秒稳态误差同样为零。在响应速度上LADRC领先了将近一倍而超调量只有PID的五分之一左右。超调量减小和响应速度提升同时实现这在PID框架下是很难做到的但在LADRC中却很自然。原因在于PID本质上是“误差驱动”的误差大时控制器拼命加大输出惯性系统又来不及停下来于是就只能眼睁睁看着超调发生。而LADRC中的ESO会同时估计当前的系统状态和扰动提前感知到系统的“冲劲”反馈控制环节会把这种冲劲提前收住。有一点值得一提PID也不是完全处于劣势。如果把PID调得特别保守比如大幅降低Kp也能得到很小的超调量但代价是调节时间会拖慢到1秒以上。也就是说PID必须在超调量和调节时间之间做取舍而LADRC由于补偿机制的存在同时把两个指标都照顾得更好这才是真正的差距所在。4.2 抗扰动性能对比负载突变时的系统表现控制系统的优劣关键看它面对扰动时的表现。我在仿真进行到4秒时在控制器的输出端叠加一个大小为2的阶跃负载扰动模拟电机突然加载的场景观察两种控制器的抗扰动能力。对比结果十分明显PID需要约0.8秒才能把速度拉回到给定值期间最大速度跌落达到11%。LADRC的恢复时间只有不到0.2秒最大速度跌落只有3%。在抗扰动能力上LADRC全面碾压PID这不是参数调得好不好的问题而是两种控制器对抗扰动的工作原理存在本质差异。PID面对扰动时唯一的“感知渠道”是误差信号只有在速度确实掉下来之后控制器才能得知扰动发生了。LADRC则不同ESO的扰动估计通道会以远高于系统动态的频率持续监视输入输出数据扰动发生后极短时间内就能在z3状态中反映出扰动的大小然后通过前馈补偿直接把扰动抵消掉。你可以把它理解成一个是“被打了一拳才发现还手”另一个是“对方刚抬手就知道要出拳”。4.3 鲁棒性对比被控对象参数改变后两种算法的表现前面两组对比中被控对象模型是固定的参数也是按这个模型整定的。但实际系统中对象参数可能会因为温度、磨损、工况变化而改变。为了检验两种算法对模型失配的容忍度我把被控对象的增益K从原始值调大了40%时间常数T调大了20%保持控制器的参数不变重新运行仿真。实验结果显示PID的超调量从此前的18%增加到接近35%调节时间拉长到1秒以上出现了明显的振荡倾向。LADRC虽然也出现性能退化但整体仍保持稳定超调量为9%调节时间约0.5秒。这种鲁棒性上的差异同样源于两种控制器的“世界观”不同。PID把被控对象当作“固定的、已知的”对象变了系统性能变差是必然的。LADRC则默认被控对象是“不确定的”任何模型偏差和外部变化都视为总扰动的一部分通过ESO实时估计并补偿掉。我可以这么说对象的真实参数变得越多LADRC的相对优势就越明显。但在系统稳定的前提下它的表现依旧可以接受。4.4 噪声敏感性对比测量噪声下的公平对决完美的传感器是不存在的为了对比的公平性我给反馈回路加入了幅值为0.05的高斯白噪声模拟真实的量测环境。这一项对比的结果很有意思也最能体现LADRC调参时“高带宽双刃剑”的特性。PID在噪声影响下控制量出现小幅的高频波动但系统输出曲线依旧平稳因为默认情况下的PID微分项已经带滤波对噪声不太敏感。LADRC在ωo 40的配置下控制量的高频抖动比PID更明显这是因为ESO的高增益把一部分量测噪声带进了状态估计中进而反映在控制器的输出上。这里不是要得出“LADRC不如PID”的结论而是要给各位提个醒在实际工程中LADRC需要通过适当降低ωo、增加量测滤波或采用级联的滤波结构来抑制噪声影响。那些在纯仿真环境中把LADRC吹得神乎其神的案例往往没有认真考虑噪声因素。如果不考虑这项对比直接把仿真模型用于实物系统ESO的带宽不重新设计系统大概率一上电就开始振荡这是我实际踩过的坑。5. 常见问题与仿真排查技巧实录5.1 仿真发散与数值振荡问题我在调试Simulink模型时遇到过不少仿真发散的情况处理这些问题的经验对初学者来说极有价值。最常见的问题是代数环报警。当Simulink模型中存在直通路径时输出会直接影响同一采样步内的输入形成代数环。解决办法是在反馈通道串联一个“Memory”模块或“Unit Delay”模块打破这种直接回路。控制系统里最常见的代数环位置是ESO的输出经过控制器后直接作用于同一个ESO的状态计算这种情况下一个“Unit Delay”就能解决。另一个常见问题是观测器增益β值过大导致的数值发散。当你把ωo设置得很大时ESO的增益矩阵中会出现ωo²和ωo³项在定步长仿真中极易出现数值刚性表现为仿真在中途报错或出现NaN。遇到这种情况时先降低ωo到原先的三分之一确认系统稳定后再逐步往上加这是最简单的排查方法。5.2 参数整定中的典型误区调参阶段的典型误区主要集中在几个地方一是忽视了输出限幅。实际的执行机构都有物理极限如果仿真模型中不加入限幅环节控制量可以无限增大参数调出来在仿真里表现得很好移植到实际系统后立刻失效。我建议从一开始就在控制器输出端加Saturation模块把控制量限制在合理范围内这样仿真结果才具有工程参考价值。二是只看系统输出曲线不看控制量曲线。控制量是系统“累不累”最直观的体现一个看似完美的输出曲线如果控制量在高频剧烈抖动说明系统实际上处于不健康的运行状态。在对比两种算法时一定要把控制量曲线也拉出来看这往往是发现问题的关键。三是忽略了初始条件的设置。ESO的初始状态应该和被控对象的实际初始状态对齐否则仿真初期会有一段不短的“动态误差调整期”这段时间的数据会对性能指标统计产生污染。我在仿真中把ESO的初始状态设置为被控对象的初始输出值可以让曲线开头就处于正常状态。5.3 仿真与实物差距的经验心得用Simulink做仿真对比最终的目的是要指导实际应用。仿真和实物之间存在天然差距有几点体会我想单独拎出来聊一聊。第一仿真的信号是理想的没有传感器延迟、通信延迟以及量化误差。在搭建模型时不妨在反馈通道加入Transport Delay模块用20到50毫秒的延迟模拟真实系统的信号传输延时。加了延迟之后你会发现控制系统的相角裕度会显著下降实际感受完全不同。这一点对评估LADRC时特别重要因为ESO依赖高质量的即时输出反馈延迟会直接影响观测器的收敛速度和稳定性边界。第二Simulink中搭建的控制算法最终要跑在MCU或DSP上用C代码生成才能部署。我现在做算法方案验证时从一开始就以“能否生成高效C代码”为标准来选择模型结构。具体来说优先用基本运算模块而非复杂的封装模块避免使用需要大量动态内存分配的高级函数注意数据类型的统一。这样在需要做产品化开发时可以省掉大量的代码移植时间这个习惯我现在强烈推荐大家尽早养成。第三如果要进行更接近实物的验证可以试试Simulink的外部模式实时仿真把实际硬件连到Simulink模型里进行硬件在环测试。外部模式可以让模型与硬件实时交互调整参数无需重新编译极大缩短开发周期。我在一个温控项目中就用过外部模式对参数进行硬件在线调整效果很好。如果后续要进一步做联合仿真还可以考虑与Carsim、Amesim等专业软件进行联合仿真把车辆动力学模型或液压模型引入控制系统的验证中。6. 总结与扩展这套对比方案的后续延展方向如果你跟着本文完成了这个仿真对比实验我可以确信你对LADRC和PID的理解已经不再停留在公式层面而是建立起了真实的工程直觉。接下来你可以按自己的方向做进一步延展这里有几个我强烈推荐的扩展方向。如果你想深入控制算法领域可以在LADRC的基础上做改进把控制器带宽ωo和ωc做成自适应调节的形式根据误差大小动态调整参数或者引入模糊逻辑让参数整定过程自动化。模糊PID和模糊LADRC结合这几年比较热门热度词里也有人搜索“模糊PID控制”沿着这个方向做既能发论文也有实际工程参考价值。如果你想贴近工程应用可以尝试用LADRC替换实际系统中某个常规PID回路比如无人机的高度控制或车辆的纵向速度控制。先把本文的仿真模型与被控对象耦合起来再通过外部模式与实物进行对接。不过要提醒的是从仿真到实物的过程中务必关注控制量限幅、故障保护、观测器初值处理等工程需求这些细节决定系统能否安全切换。如果你对代码生成本身感兴趣可以研究一下如何从本文的Simulink模型生成嵌入式C代码配合自动代码生成工具部署到真实的MCU上。这个方向能把算法能力转化为产品能力对职业发展大有帮助。做代码生成时注意模型配置中的硬件实现设置、代码生成优化级别、以及在目标MCU上验证数值精度每一步都值得单独写一篇长文展开讨论。最后我再分享一个实际使用过程中的小技巧在做对比仿真时建议把两种控制器的所有参数放在一个模型工作区中并使用Simulink的“参数扫描”功能一次性运行多组参数组合。这样可以大幅提升参数寻优的效率也能让你通过一次运行看清楚整个参数空间内的性能分布。我在调参时就是用这种方式把PID参数从“一组能用的数值”升级为“一个能理解参数空间的地图”对算法理解的帮助是巨大的。