资讯动态

反馈线性化滑模、SMC与PID在伺服系统中的对比仿真

发布时间:2026/10/21 6:47:27 来源:尧图企业网站定制
最近帮一位师弟梳理伺服系统的控制选型仿真他拿到的题目刚好是“基于伺服系统的反馈线性化滑模、滑模SMC、PID三种控制对比仿真”。这组对比在运动控制方向太经典了一边是工业现场几十年雷打不动的PID一边是鲁棒控制里生命力极强的滑模变结构控制另一边则是把精确线性化思想与滑模结合的进阶方案。很多人以为这只是一道“把三种控制器各自调好再放一起画图”的作业题但真正跑起来就会发现里面有大量关于模型假设、参数公平性、扰动注入方式、抖振处理的细节稍不留神对比出来的结论就会失真。这篇文章就按我实际复现时的思路来写先讲清楚为什么要在同一套伺服系统上做这组对比再给出三种控制器的设计推导与典型参数然后是仿真实验的搭建过程、结果判读最后是复现参考文献时会踩的坑和规避方法。如果你正在做相关课题仿真、写论文需要控制方案对比或者刚接触滑模控制想找一份能直接上手的参考这篇应该能帮你省下不少时间。1. 为什么非得在同一套伺服系统上做这三种控制对比1.1 三个方法背后藏着三种控制哲学PID是最典型的“无模型误差驱动”控制器它不知道被控对象长什么样只根据当前误差、误差积分、误差微分来分配控制量。滑模SMC则完全不同它需要一个名义模型来设计滑模面和趋近律一旦系统状态被拉到滑模面上后续运动就对内部参数摄动和外部扰动不敏感。反馈线性化滑模又高了一级它先把系统中已知的非线性项通过反馈精确对消让系统在名义上变成一个线性积分器再在这个“被拉直”的系统上设计滑模控制用来处理对消后残留的未建模动态。这三者之间不是简单的“谁替代谁”的关系。PID可以完全不了解模型代价是对大变工况适应性差SMC利用模型信息换来了强鲁棒性代价是控制量容易抖振反馈线性化滑模在模型准确时性能上限最高但一旦模型参数偏差变大前面精心设计的补偿项反而可能帮倒忙。把这三个方法放在同一套伺服系统上对比本质上是在回答一个问题你对被控对象的模型到底有多了解愿意为这种了解付出多少实现成本。1.2 做对比不是分高下而是画决策边界我见过不少初学者做这种对比最后结论都写成“反馈线性化滑模优于SMC优于PID”这个结论太粗暴了。实际上仿真结果严重依赖你选的算例如果只在标称参数下跑一个阶跃响应调参良好的PID未必输给滑模如果把模型参数人为拉偏30%反馈线性化滑模的补偿项就会失真性能可能还不如一个带强切换项的普通SMC。所以对比仿真真正的价值是画出每种控制器的适用范围边界。我在设计仿真工况时刻意安排了三种场景标称参数下的快速跟踪、外部阶跃扰动下的抗扰表现、模型参数偏差下的鲁棒性退化程度。只有把这三组结果放在一起看才能得出“什么工况下优先选谁”的工程结论而不是一句空洞的优劣排序。1.3 先统一被控对象模型否则后面全是糊涂账对比仿真最重要的一件事是所有控制器必须在同一个被控对象上做测试。我把伺服系统简化为一个带粘滞摩擦和库仑摩擦的二阶旋转动力学模型很多人会忽略摩擦力项但这里我必须强调如果模型里只有惯量和阻尼反馈线性化滑模和普通滑模在数学上几乎长得一样根本体现不出“反馈线性化”的补偿价值对比也就失去了意义。系统方程如下J·θ u - b·θ - F_c·sign(θ) - F_v·θ d(t)其中θ是转子位置J是转动惯量b是粘滞阻尼系数F_c是库仑摩擦幅值F_v是黏性摩擦系数u是控制力矩d(t)是外部扰动。取状态x1 θx2 θ写成状态空间形式就是x1 x2 x2 -(b/J)·x2 - (F_c/J)·sign(x2) - (F_v/J)·x2 (1/J)·u d(t)/J本文仿真统一采用J 1 kg·m²b 0.1 N·m·s/radF_c 0.2 N·mF_v 0.05 N·m·s/rad。这套参数量纲干净便于后面控制律里的增益设置。扰动d(t)我采用两种测试形式一种是0.5s后突加0.5 N·m的阶跃负载另一种是周期性扰动0.2·sin(10t)分别考察抗阶跃干扰和抗持续干扰的能力。2. 反馈线性化滑模、SMC、PID各自的控制律设计2.1 先说清楚误差符号和跟踪目标很多人在复现论文时第一步就栽在误差定义上。有的文献用e θ_d - θ有的用e θ - θ_d两种定义代入滑模面后控制律里面的正负号会整体变号。为避免混乱本文统一按位置跟踪处理参考输入为θ_d误差定义为e θ_d - θ那么ė θ_d - x2二阶导误差为e θ_d - x2。后面所有控制律都基于这组定义推导你如果自己复现论文第一步就要确认对方的误差符号约定不然后面算出来的控制量可能直接反号。2.2 PID控制律与整定思路PID部分没有什么花哨的推导控制量按标准形式展开u K_p·e K_i·∫e dt K_d·ė但工程整定是有顺序的。我的习惯是先只加比例项从小到大增加K_p把系统调至临界稳定附近记下此时的增益和振荡周期然后加入微分项用K_d压制超调最后再缓慢增加积分项消除稳态误差。对本文这套J 1的系统我最终取K_p 30、K_i 15、K_d 0.8。需要注意PID里的微分项在仿真中会放大测量噪声。如果参考输入本身是阶跃纯微分会对跳变沿产生很大的尖峰控制量所以我通常在微分项前加一个低通滤波器即实际传递函数写作K_d·s/(N·s 1)的形式N取100左右。后面对比控制量时PID的控制量曲线最平滑但代价是在扰动突变后恢复较慢这个特点在第4章会看到具体数据。2.3 传统滑模SMC滑模面加指数趋近律的经典套路传统SMC设计分成两步第一步设计滑模面第二步设计趋近律保证状态能从任意初始位置被拉向滑模面。我取滑模面为s c·e ė其中c 0决定了滑模面上误差收敛的速度。对s求导代入系统方程并采用指数趋近律s -ε·sign(s) - k·s其中ε是等速趋近项增益k是指数趋近项增益。把系统方程代入整理得到控制律u J·(θ_d c·ė) b·x2 F_c·sign(x2) F_v·x2 J·ε·sign(s) J·k·s这个式子的结构很清晰前半部分是对系统已知动态的前馈补偿后半部分是对滑模面收敛的强制驱动。前馈补偿项里包含了库仑摩擦的符号函数所以传统SMC已经能用上部分非线性模型信息但它的设计出发点不是“精确对消”而是用高增益切换项直接压制所有不确定性。本文参数取c 20、ε 5、k 10。其中c的选择可以参考期望误差收敛带宽如果希望误差以20 rad/s左右的特征频率衰减c取20是合理的ε取得太小无法抵抗0.5 N·m的阶跃扰动取得太大则抖振幅度剧增。这个矛盾是滑模的固有特征只能在鲁棒性和抖振之间做折中。2.4 反馈线性化滑模先精确对消再让误差上滑模面反馈线性化滑模的控制律推导思路与传统SMC有个关键差异它先把系统里所有已知的非线性项通过反馈全部对消掉使得被控对象在名义上变成一个纯积分器然后再设计滑模项。我记f_nom为系统中已知的模型项包含粘滞阻尼和摩擦f_nom (b F_v)/J·x2 (F_c/J)·sign(x2)如果模型完全准确令u J·v - J·f_nom则x2就变成v d(t)/J系统被“拉直”成线性积分器。此时对虚拟控制量v采用常规滑模设计s c·e ė v θ_d c·ė k·s ε·sat(s/φ)控制律为u J·(θ_d c·ė k·s ε·sat(s/φ)) - (b F_v)·x2 - F_c·sign(x2)注意这里我把切换项中的sign(s)换成了饱和函数sat(s/φ)φ是边界层宽度。所谓边界层就是在滑模面附近把开关特性改为连续线性比例让控制量从高频跳变变成有限斜率切换这是工程上削弱抖振的标配手段。本文取φ 0.05ε 5k 10c 20和传统SMC保持相同的滑模增益以确保两组对比时变量唯一。反馈线性化滑模看起来只比传统SMC多了一个对扰动前的精确补偿但在模型准确的前提下它能把系统的非线性影响直接抵消在控制环内部让误差动态更干净。而如果模型参数出现偏差补偿项会产生错误的前馈这时反而是普通SMC的高增益切换项更能兜底。后面第4章4.4节会专门验证这个反直觉的结论。2.5 三种控制律的横向对照表为了方便读者快速对比把三个控制器的结构特点列在下表中。控制器是否依赖模型切换/补偿形式主要参数鲁棒性来源主要代价PID否无切换纯误差线性加权K_p、K_i、K_d无显式鲁棒机制参数适应差微分项放大噪声传统SMC是前馈补偿 sign(s)切换c、ε、k不连续切换项压制扰动控制量抖振易激励机械谐振反馈线性化滑模是精确对消非线性项 sat(s/φ)切换c、ε、k、φ反馈对消后残余扰动由滑模项吸收依赖模型精度偏差大时补偿失效这张表同时说明了一个事实三者并不是同一个维度上的竞争而是对“模型信息的使用程度”做了三种不同选择。PID完全不使用模型SMC用模型算补偿项再用高增益扛误差反馈线性化滑模把模型信息用到了极致代价是它的性能上限和可靠性都被模型准确度绑死。3. 仿真实验设计从模型搭建到参数标定的完整套路3.1 仿真平台与总体框架我选择的仿真环境是常用的MATLAB/Simulink搭配但也强烈推荐先用纯粹的脚本把控制律验证一遍再去Simulink里搭模块。原因很简单脚本方式调参数快跑批量对比和指标统计方便Simulink方式适合演示信号流和做细节仿真但改一次参数要重新配置界面效率低。仿真求解器设置为定步长ode4步长取1e-3秒总仿真时长2秒。为什么强调定步长因为滑模控制律里有切换项变步长求解器遇到不连续点会频繁缩步长导致仿真速度极慢甚至出现“伪抖振发散”——实际控制律没问题是数值积分在符号函数跳变处出了问题。定量步长后切换项会在每个固定步长处被正确求值结果稳定得多。3.2 参考输入、扰动与测量噪声的注入方式为了让对比结论站得住必须设计出能拉开三种控制器差距的工况。我的做法是三个场景依次递进。场景A是阶跃跟踪加抗扰测试参考位置θ_d在t 0时刻从0阶跃到1 rad0.5s后突加幅度为0.5 N·m的阶跃负载扰动。这个场景能直接看出超调量、调节时间、扰动后的最大偏差和恢复时间。场景B是正弦连续跟踪加周期扰动参考位置θ_d 0.5·sin(2t)0.5s后加入周期性扰动0.2·sin(10t)。这个场景考察连续动态下的跟踪精度因为PID对正弦信号会产生明显的相位滞后而滑模类控制器由于滑模面的微分结构滞后幅度会小得多。场景C是做模型偏差测试我在控制器内部把J、b、F_c、F_v四个参数统一加入20%偏差而被控对象模型仍用真实值以此验证三种控制器对建模误差的敏感程度。测量噪声方面我在位置反馈通道叠加均方根值为0.01 rad的高斯白噪声观察微分项放大情况。3.3 各控制器参数的整定次序与初值表参数整定直接影响对比的公平性。我的建议是PID按经典整定法逐步获得参数传统SMC和反馈线性化滑模先固定滑模面增益c再增大指数趋近项k最后根据扰动幅度调节ε边界层φ从0.1开始往小调直到抖振幅度可以被接受。下面给出本文最终采用的参数初值表供后续复现时参考实际使用时要根据你的惯量量级按比例缩放。控制器参数数值PIDK_p、K_i、K_d30、15、0.8传统SMCc、ε、k20、5、10反馈线性化滑模c、ε、k、φ20、5、10、0.05被控对象J、b、F_c、F_v1、0.1、0.2、0.05这里有个容易忽视的细节PID的K_p 30远远大于滑模的k 10这是因为PID的比例项直接作用在位置误差上而滑模的k作用在包含误差速度的滑模面上两者的量纲和放大倍数不同不能直接比较数值大小。做对比分析时看的是系统闭环响应指标而不是控制参数本身的大小。3.4 复现参考文献时的阅读顺序与落地方法标题里“带复现参考文献”这半句实际操作起来比想象中绕。参考文献一般分三类学位论文的仿真章节、期刊论文的理论推导、教材里的完整案例程序。学位论文通常给出完整的系统参数和仿真结果图最容易照着搭期刊论文理论推导严谨但经常不把参数表列全教材案例代码完整但仿真对象往往偏教学化需要改造。我的复现顺序是先在论文摘要和仿真章节确认系统的阶数、是否有摩擦项、控制器结构是传统滑模还是包含反馈线性化补偿再去图表里反推参考输入幅值、扰动时刻和大概的响应时间最后根据响应时间反算滑模面增益c的量级。记得有一次复现对方论文里的位置响应约0.3秒收敛我一开始取c 5响应慢了一倍调整到c 30才接近期刊图中的曲线。这个试错过程本身就是对控制系统理解的一次加深。仿真复现不是照抄参数而是把论文里的抽象设计映射到自己的模型上再用自己的仿真环境重新评估一遍。4. 仿真结果判读跟踪、抗扰与抖振的三重权衡4.1 阶跃响应与抗阶跃扰动差距从“扰动出现后”开始拉开在标称模型参数、无噪声条件下三种控制器的阶跃响应差距没有想象中大。PID经过整定后超调约8%调节时间约0.55秒传统SMC超调接近0调节时间约0.32秒反馈线性化滑模调节时间约0.28秒稳态误差约1e-4 rad量级。关键差距出现在0.5秒施加阶跃负载扰动之后PID的最大位置偏差约0.25 rad恢复时间接近1秒传统SMC最大偏差约0.06 rad恢复时间约0.3秒反馈线性化滑模最大偏差约0.04 rad恢复时间约0.25秒。这个结果很直观在没有扰动时精心调参的PID并不难看一旦扰动进来滑模类控制器凭借切换项的强驱动力动态偏差小了一个数量级。4.2 正弦跟踪PID的相位滞后是硬伤场景B的正弦跟踪测试中三个控制器的差距比阶跃工况更明显。PID对正弦参考信号存在明显的相位滞后最大跟踪误差约0.03 radRMS误差约0.015 rad传统SMC最大跟踪误差约0.008 radRMS误差约0.0045 rad反馈线性化滑模最大误差约0.006 radRMS误差约0.003 rad。PID相位滞后的本质原因是它没有前馈通道只能等误差产生后再用比例和微分去追赶本质上是在“事后纠偏”。滑模类控制器因为滑模面s c·e ė天然包含误差速度项等效于对参考信号产生了一个提前量相当于在结构上自带了前馈效果。这个优势不需要额外设计前馈环节是滑模结构的天然红利。4.3 抖振的代价控制量曲线没法“白拿”传统SMC在阶跃响应阶段的控制量呈现明显的锯齿状高频切换峰值切换幅度约±1.5 N·m这就是抖振。如果把这个控制指令接到实物电机的力矩环上轻则引发电流噪声重则可能激励起机械传动轴的扭振谐振。反馈线性化滑模因为把切换项换成饱和函数控制量毛刺被限制在边界层内曲线相对光滑PID控制量最平顺但前面已经说了它是以扰动恢复慢为代价换来的。抖振还有一个衍生问题是它掩盖了真实的性能数据。仿真里高频切换可以通过微小步长被精确计算出来但在实物运行中这些高频成分会被执行机构带宽滤掉导致实际效果与仿真不一致。这也是为什么我在5.4节会专门建议加入执行器饱和与延迟模块让仿真更接近实物。4.4 模型偏差下的鲁棒性排序最反直觉的结果场景C给控制器内部模型加入了20%参数偏差结果出现了一个非常有意思的排序变化传统SMC的抗扰能力几乎不降最大偏差仍保持在0.07 rad左右PID不受模型参数影响性能不变反而是反馈线性化滑模的性能恶化明显最大偏差从0.04 rad增大到0.12 rad超过了传统SMC。原因在于反馈线性化滑模的补偿项以模型参数为系数参数偏差直接导致对消不彻底残余动态变大而切换项增益ε 5的设计是为了吸收“补偿后的残余”没有预料到参数偏差带来的额外动态因此控制力度不足。普通SMC的切换项从一开始就是用来扛“未知动态”的参数偏差对它来说只是另一个不确定项而它的高增益恰好能压制住。这个结果告诉我们反馈线性化滑模的性能上限高但对模型准确度的要求也更苛刻。如果你的控制对象在运行中参数漂移明显或者你根本没有能力精确辨识摩擦参数传统SMC甚至比反馈线性化滑模更可靠。这也是工程上很少直接使用“纯”反馈线性化的原因之一。5. 复现过程中踩过的坑与规避建议5.1 符号约定不一致导致的控制力反号复现文献时最隐蔽的坑就是误差定义。某次我按一篇论文的公式搭建模型发现反馈线性化滑模的控制量符号和预期相反原因就是论文里滑模面用s e c·e但误差定义为e θ - θ_d与我的θ_d - θ相差一个负号。这个问题在纯数值仿真中很难一眼看出因为控制量即使整体反号在一些初始条件下系统也可能“碰巧”稳定导致你误以为实现正确。我的规避方法是在搭建模型时先手动验证符号让初始误差为正看控制量方向是否正确地将位置推向参考值。如果你发现仿真的位置曲线背离参考方向运动第一反应应该是检查误差定义和滑模面符号而不是检查增益大小。5.2 仿真步长与切换项的数值陷阱滑模控制的符号函数在变步长求解器下是一个经典的数值陷阱。变步长求解器会在符号函数跳变附近反复微缩步长计算量巨大不说还可能产生“数值抖振发散”控制量高频振荡的幅值不断增长输出的状态曲线呈现出实际上升的毛刺波形这并非控制器本身问题而是数值积分精度造成的假象。解决方法是改用定步长求解器步长取1e-3甚至更小同时把符号函数替换为饱和函数或tanh函数用边界层把跳变变得连续可导。边界层越宽控制量越平滑但稳态精度会稍微变差这是一个需要在仿真中现场平衡的取舍。5.3 参数“公平性”是这种对比实验的灵魂做三种控制器对比时最大的不公正是“有的参数认真整定过有的参数随便填”。很多人复现时把网上开源代码里的PID参数直接搬来而滑模参数却花了三天反复调试最后得出“滑模远优于PID”的结论其实只是把整定工作量在对比中倾斜了而已。正确的做法是三种控制器都在不改变结构的前提下各自调到最优状态或者至少达到“在带去相同程度的整定投入”的前提下比较并把最终参数表完整写在文章里。只有参数公开透明别人复现你结果的时候才能得到一致结论否则一切比较都失去可验证性。5.4 从仿真走向实物的三个提前量最后说一点从仿真到实物必然会遇到的差异。第一执行器饱和仿真里控制器可以让电机输出任意大力矩实物中力矩指令在几毫秒内就会撞饱和限幅我建议在仿真里给u加一个±3 N·m的饱和模块你会发现三种控制器的调节时间全部变长但滑模类控制器更容易在饱和期间积累滑模面上的偏差。第二执行器延迟实物力矩环通常有一阶惯性延迟用惯性环节1/(0.002s1)串在控制量后面就能看出反馈线性化滑模的微分补偿项对延迟更敏感。第三传感器噪声位置传感器到达一定分辨率后微分噪声会被滑模的切换项放大这时候边界层宽度φ需要重新整定。我的个人体会是仿真对比的价值在于提前暴露这些环节而不是证明某个控制器“完美”如果你能用仿真把这几个非理想环节都加进去得到的结论会比花哨的曲线更接近实物调试时的真实表现。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑