资讯动态

基于Simulink的一阶倒立摆双PID与模糊PID控制仿真对比

发布时间:2026/10/20 7:05:59 来源:尧图企业网站定制
一阶倒立摆的双PID稳定控制网上零散帖子不少但绝大多数要么只放理论推导要么只甩几张Simulink截图看完很难照着做出一套可对比的仿真。我最近把这条链路完整走了一遍直线一级倒立摆角度环加位置环的双PID结构传统整定参数和模糊PID在线自整定各做一套同一个非线性模型、同一组工况最后还整理出了能直接支撑说明报告的图表和结论。这篇文章就是这轮操作的完整记录包括建模方程怎么落地到Simulink、双环PID为什么这么接、模糊规则表到底怎么定以及对比仿真里那些最容易翻车的细节。1. 倒立摆不是玩具这个模型为什么值得较真先花点篇幅说清楚研究对象。一阶倒立摆就是一个能够在轨道上左右移动的小车上面铰接一根摆杆默认状态下摆杆是自然下垂的。控制目标很反直觉给小车一个驱动力F让摆杆从底部被甩起来稳定在竖直向上的位置同时小车自己还得停在指定位置或者跟着一个目标位置移动。很多初学者第一反应是“这不就是个平衡问题吗”其实没那么简单。摆杆在竖直向上位置是不稳定平衡点只要有一丁点扰动就会倒下去。系统的动力学方程里含有sinθ、cosθ和θ̇²这些非线性项摩擦、电机死区也都在严格说是一个非线性、自然不稳定、单输入多输出的系统。也正因为如此倒立摆才被当成控制算法验证的“试金石”——PID能不能用、模糊控制值不值得上、LQR和滑模效果差多少在这个平台上都能看出差别。这里说的“一阶”指的是只有一根摆杆不是系统阶数。一根杆就是一级再在杆顶叠一根杆就是二级倒立摆那才是真正的“地狱难度”。一阶倒立摆有四个状态量小车位移x、速度ẋ、摆杆角度θ、角速度θ̇。能被传感器直接测量的是x和θ所以控制器天然要围绕这两个量来做文章。这就引出了“双PID”的结构来源。如果只闭环角度θ摆杆确实能立住但小车会为了维持平衡一直向某个方向漂移最终撞到轨道限位。反过来如果只闭环位置x角度没人管摆杆立刻倒。正确做法是把两个环路串起来内环角度环输入是角度给定θ_ref反馈是实际θ输出是驱动力F目标是让摆杆维持直立。外环位置环输入是位置给定x_ref反馈是实际x输出是角度环的给定修正量θ_ref目标是让小车移动到目标位置。外环的输出不是直接给执行器的力而是告诉内环“你现在应该往哪边稍微倾一点”。可以这么理解小车要向右走就先让摆杆微微向右倾斜摆杆的重力分量会给小车一个向右的加速度等小车到位了摆杆再回到竖直。位置环和角度环各用一个PID控制器这就是标题里“双PID”的真实含义。至于为什么要在“传统PID”之外再加“模糊PID”做对比理由也很直接。传统PID一旦整定完毕三个参数就是死的而倒立摆的动力学特性会随着摆杆偏角变化而变化。偏角小的时候线性化模型近似成立参数好用偏角一旦大起来非线性效应明显增强固定参数就开始吃力。再加上轨道摩擦、电机死区这类不好建模的扰动固定PID往往只能保证一个工作点附近的性能。模糊PID的思路是在线根据当前误差和误差变化率去修正Kp、Ki、Kd相当于给PID装了一套“自动换挡”的逻辑不需要精确模型靠规则就能干活这也是它被广泛应用在各类欠驱动系统上的原因。2. 建模先行把摆杆方程收编进Simulink仿真第一件事不是调PID而是把被控对象的模型搭出来。模型不对后面所有对比都是空中楼阁。2.1 从拉格朗日方程到可直接套用的微分方程建模时做几个常规假设摆杆是刚体质量集中在质心小车与轨道之间的摩擦用线性阻尼近似忽略空气阻力角度θ以竖直向上为0逆时针为正单位用弧度。用拉格朗日方程推导比较干净最后得到两个耦合的二阶微分方程小车水平方向力平衡 (M m) ẍ m l θ̈ cosθ - m l θ̇² sinθ F摆杆绕支点的转动方程 m l ẍ cosθ m l² θ̈ - m g l sinθ 0整理一下把角加速度单独表示出来θ̈ (g sinθ - ẍ cosθ) / l如果把θ̈代回第一个方程就能解出ẍẍ [F m l θ̇² sinθ - m g sinθ cosθ] / (M m sin²θ)这里为什么费劲做代数替换因为在Simulink里直接按原始方程搭θ̈和ẍ互相依赖会出现代数环仿真要么报错要么特别慢。把ẍ写成显式表达式代数环就拆掉了。这是一个小细节但很多人第一次搭模型就卡在这里。参数我先给出这组读者可以根据自己的实验装置改小车质量 M 1.096 kg摆杆质量 m 0.109 kg摆杆质心到支点距离 l 0.25 m重力加速度 g 9.8 m/s²2.2 线性化模型和状态方程控制设计阶段经常要用线性化模型来分析稳定性所以顺手把方程组在θ≈0附近做小角度近似sinθ≈θcosθ≈1忽略θ̇²项得到(M m) ẍ F - m g θ θ̈ (g θ - ẍ) / l取状态变量 x [x ẋ θ θ̇]ᵀ输入u F输出y [x θ]ᵀ可以写成标准状态空间形式A [[0, 1, 0, 0], [0, 0, -m g/M, 0], [0, 0, 0, 1], [0, 0, (Mm) g / (M l), 0]]B [0, 1/M, 0, -1/(M l)]ᵀ这套线性化模型主要用来做理论分析和参数初选但最终仿真我建议还是用第二节那组非线性方程——对比仿真如果不考虑非线性模糊PID的优势体现不出来报告的说服力也会弱很多。2.3 Simulink模型结构三角波噪声式的“积分链”搭法Simulink里我习惯用积分器链搭被控对象方便看到中间变量。整体分两块先算ẍ输入F加上m l θ̇² sinθ减去m g sinθ cosθ除以(M m sin²θ)得到ẍ后接两个积分器得到ẋ和x。再算θ̈用ẍ、θ、θ̇按θ̈ (g sinθ - ẍ cosθ)/l计算接两个积分器得到θ̇和θ。θ̇²这个信号可以从θ̇积分器输出端引回来自己跟自己相乘即可。我把整个子系统封装成了“InvertedPendulum”模块端口只有两个输入F和一个输出x、θ用Mux合并这样上层控制器画起来清爽许多。搭模型时建议把M、m、l、g这些参数放在脚本里用变量传进去别直接写死在模块参数里。后面你做模型失配测试、换参数对比就知道这个习惯有多省事了。3. 传统PID双环先让摆杆站稳再让小车归位3.1 为什么内环用PD、外环用P或PID先明确一个观念内环角度环最怕的是“等不及”——摆杆倒下去的速度是物理决定的控制器响应必须足够快。所以内环的核心是Kp提供回正力矩Kd提供阻尼。Ki我建议设为0原因是内环积分会在扰动时持续积累形成“慢悠悠的过冲恢复”在串级结构里还会和外环积分互相叠加搞出极限环。外环位置环是慢环给定的是角度修正量相当于一个“运动规划信号”。它不需要特别激进P控制就能干得很好如果想要消除位置稳态误差可以加一个很小的Ki但千万别给大了否则小车会在目标位置附近来回晃。3.2 实用的整定顺序和参考参数无论是传统PID还是后面的模糊PID第一步都是先把传统PID参数整定到一个可用状态。模糊PID的自整定也是以传统PID参数为基准在基准参数上下做修正不是凭空造参数。我的整定顺序是“由内到外、先P后D”先把外环断开给内环一个固定角度给定比如0.05rad只调Kp从零开始增大直到摆杆能明显“顶住”偏角但不振荡。加Kd慢慢加大观察角速度响应直到摆杆收敛过程没有明显超调。闭合外环位置给定设一个小阶跃0.1m调外环Kp。最后加外环Ki并检查两者是否会相互激发振荡。经过反复调我用下来比较顺手的传统PID参数如下环路控制器类型KpKiKd角度内环PD90012位置外环PID1.20.60.8外环输出我做了限幅限制在±0.3 rad大约17度。这样做是为了保证摆杆始终工作在小角度假设范围内真给到30度以上线性化模型和实际非线性模型的差距会非常明显。3.3 传统PID在仿真里的表现与暴露的问题给初始摆杆偏角0.2 rad约11.5°的工况传统PID能让摆杆在大约1.8秒内稳定回竖直但过程中角度超调比较明显角度峰值能到0.09 rad左右。位置给定0.3m阶跃时小车会出现约0.06m的超调然后慢慢收敛。总体上是“能用”的状态但有两个问题开始冒头第一参数只能“取中间值”。Kp调大了小偏差时容易抖Kp调小了大偏差回正太慢。第二模型参数一变就不行。我把小车质量从1.096kg改成1.4kg同一个参数组让即崩角度振荡发散。这说明固定PID的鲁棒性确实有限。4. 模糊PID自整定规则表怎么定论域怎么选4.1 模糊PID的总体结构模糊PID并不是抛弃PID底层还是那两个PID控制器上层加一个模糊推理器实时算出一组修正量ΔKp、ΔKi、ΔKd叠加到基准参数上Kp Kp_base ΔKp Ki Ki_base ΔKi Kd Kd_base ΔKd模糊推理器输入是两个量角度误差e和角度误差变化率ec也就是θ̇。为什么只对角度环做模糊整定这是刻意的。倒立摆的非线性和不稳定性集中在摆杆动态上位置环是慢变外环固定参数完全够用。如果内外环都上模糊变量太多规则表互相干扰出问题都不知道该查哪个环做对比实验也不干净。当然如果你想让报告内容更“豪华”把外环也做成模糊PID对比“双传统PID vs 双模糊PID”思路是相同的只是工作量翻倍。4.2 论域、量化因子和隶属度函数模糊控制第一步是确定输入输出的论域。角度误差e的范围我取-0.3到0.3 rad角度误差变化率ec的范围取-2到2 rad/s。输入论域统一量化到[-3, 3]Ke 3 / 0.3 10 Kec 3 / 2 1.5输出ΔKp的论域是[-30, 30]ΔKi是[-1, 1]ΔKd是[-5, 5]。这几个输出论域要跟基准参数的量级匹配不能瞎定。比如基准Kp是90那ΔKp给±30意味着最大可以把Kp从60调到120这个调节幅度是合理的。基准Kd是12ΔKd给±5最大也能从7调到17。输入输出模糊集都用7个NB、NM、NS、ZO、PS、PM、PB隶属度函数选三角形端点处用梯形。三角形简单、计算快实际调试时改起来也直观。4.3 ΔKp、ΔKi、ΔKd的规则表核心中的核心规则表是模糊PID能不能好用的决定性因素。很多人直接抄论文里的表结果仿真效果很差原因就是规则表必须跟你的系统特征和参数基准匹配。我先把规则设计的思路讲清楚再给表。ΔKp的整定思路误差大时加大比例增益让摆杆快速回正误差中等时Kp保持较高防止回正乏力误差小时Kp要降下来避免小偏差下振荡。同时误差变化率也是重要参考——偏差在快速扩大时Kp要顶住偏差已经在缩小了Kp可以适度收一些。以E为行、EC为列的ΔKp规则表E \ ECNBNMNSZOPSPMPBNBPBPBPMPMPSZOZONMPBPBPMPSPSZONSNSPMPMPMPSZONSNSZOPMPMPSZONSNMNMPSPSPSZONSNSNMNMPMPSZONSNMNMNMNBPBZOZONMNMNMNBNB举个例子当E很大PB且EC也为正大PB说明摆杆不但偏得厉害还在加速倾倒这时Kp必须给NB也就是大幅减小比例增益防止强劲的反馈反而把系统推得更糟。当E很大但EC是负表示正在回正Kp给ZO或PB方向因为回正过程需要保持甚至加强驱动力。ΔKi的规则表方向很明确偏差大时Ki必须小甚至为负防止积分饱和偏差小时Ki要放大用来消除稳态误差。按这个思路给一组参考规则E \ ECNBNMNSZOPSPMPBNBNBNBNMNMNSZOZONMNBNBNMNSNSZOZONSNMNMNSNSZOPSPSZONMNSNSZOPSPSPMPSNSNSZOPSPSPMPMPMZOZOPSPMPMPBPBPBZOZOPSPMPMPBPBΔKd的整定稍微微妙一点。微分的作用是阻尼和提前感知趋势。偏差变化率很大时加大Kd能压住角速度峰值偏差大但变化率小说明系统处于“慢慢往下掉”的状态此时过大的Kd反而会拖慢响应应该减小Kd。核心规则是E与EC方向相同时Kd可以适度增加防止过冲E与EC方向相反时Kd要减小避免抑制回正。具体数值不建议完全照搬别人先给一组能跑的初始规则然后看仿真曲线逐条修正。4.4 Simulink里搭模糊PID的几个实践细节推荐在MATLAB里用脚本定义FIS对象再加载到Fuzzy Logic Controller模块比纯图形界面点鼠标更可控。脚本大致长这样M 1.096; m 0.109; l 0.25; g 9.8; Ke 10; Kec 1.5; fis mamfis(Name, FuzzyPendulumPID); fis addInput(fis, [-3 3], E); fis addInput(fis, [-3 3], EC); fis addOutput(fis, [-30 30], dKp); fis addOutput(fis, [-1 1], dKi); fis addOutput(fis, [-5 5], dKd); % 添加隶属度函数、规则后保存 writeFIS(fis, FuzzyPendulumPID);说三个实操中容易踩的坑第一模糊推理不要每个仿真步长都跑。Simulink默认每个积分步长都会调用模糊推理模块倒立摆这种快速系统步长到1ms级别时计算量不小而且连续微小的规则输出波动会让PID参数抖得厉害。解决办法是把模糊控制器输出接一个零阶保持器保持周期设0.01s也就是每10ms更新一次PID修正值实测曲线会干净很多。第二量化因子Ke和Kec的选择特别关键。Ke太小输入误差落不到论域边缘规则表中间区域用得多模糊控制的“调节能力”发挥不出来Ke太大误差稍微大点就饱和到论域边界模糊推理失去了区分度退化成一组“开关式”规则。我习惯先做一版线性仿真观察e和ec的实际范围再让论域上限覆盖到最大值的80%左右。第三解模糊方法用重心法别改成最大隶属度法。最大隶属度法输出不连续和零阶保持器结合时容易产生台阶状控制量角度曲线会出现细小毛刺。5. 同台竞技对比仿真的设置与结果解读5.1 公平对比必须控制的变量对比实验首先要保证“同一套平台”同一个非线性Simulink模型、同一组物理参数、同一个求解器和步长、同样的控制器输出限幅。我用的配置是固定步长ode4步长0.5ms控制器输出限幅±20N。传统PID用上一节的参数模糊PID在同样基准参数上叠加模糊修正量位置环外环参数保持一致。如果求解器一个用定步长、一个用变步长或者限幅值不一致那对比出来的数据没有任何说服力。报告里自己把仿真条件写清楚评审人看着也放心。5.2 三组工况初始偏角、脉冲扰动、位置跟踪我设计了三个典型工况覆盖“起摆稳定”“抗扰动”“位置跟踪”三个维度工况一初始摆杆偏角0.2 rad位置给定0考察系统从初始偏差恢复到稳定状态的能力。工况二摆杆稳定后在t5s给一个等效瞬时冲击比如在竖直位置叠加一个0.1 rad的短时脉冲观察扰动后的恢复时间。工况三小车位置目标从0阶跃到0.3m考察位置跟踪过程的角度和位置耦合表现。5.3 仿真结果一组有代表性的指标对比下面这组结果是我在自己模型上跑出来的读者复现时数值会有差异但趋势性结论应该是稳的评价指标传统PID模糊PID工况一角度调节时间±5%约1.8s约1.1s工况一角度最大超调约0.09 rad约0.03 rad工况二扰动恢复时间约1.5s约0.9s工况三位置最大超调约0.06m约0.04m工况三位置调节时间约2.2s约1.5s最大控制力幅值约8N约9N稳态位置误差趋近0趋近0结论很明确模糊PID在松了近一倍调节时间的同时压低了超调代价是控制力峰值略高。这其实是符合预期的——模糊控制器在偏差大的时候会把Kp临时调高短时间内输出更强的力自然耗时更少但执行器负载也重一些。还有一个值得关注的细节模糊PID的响应曲线整体更“果断”不会像传统PID那样拖着长长的尾巴收敛。原因是模糊规则在误差小的时候会把Kp降下来同时把Ki提高小偏差阶段既能快速消除残差又不会因为Kp过大而陷入微幅振荡。这种“大偏差大增益、小偏差小增益”的自适应行为正是固定PID做不到的。5.4 模型失配测试鲁棒性对比的关键证据说明报告里最有价值的一个对比是“模型失配测试”。把小车质量从1.096kg改成1.4kg假装系统模型和控制器设计存在偏差其他条件完全不变。我跑下来的现象是传统PID的角度曲线开始出现明显的次低频振荡调节时间大幅延长模糊PID依然能稳住恢复时间只增加了约20%。这个实验比单纯的阶跃对比更能说明模糊PID的实际价值——它的参数整定不依赖精确模型规则表本质上是被控对象行为的定性描述。6. 说明报告怎么写从仿真图到结论的表述链条6.1 报告结构和工作量分配标题里带“说明报告”说明这套仿真不是做完就完还得落到纸面上。我的建议报告结构如下各章占比供参考摘要约300字一句话讲清楚研究对象和控制器结构再给一组关键仿真数据比如“模糊PID调节时间较传统PID缩短约39%”。第一章 引言倒立摆研究意义、控制算法现状、本文主要工作。不要长篇大论引用文献三段以内收住。第二章 系统建模物理背景、假设条件、非线性方程推导、线性化模型和状态方程。第三章 控制器设计双PID结构、内环外环作用、传统PID参数整定过程、模糊PID的论域量化、隶属度函数和规则表。第四章 仿真与分析仿真平台、工况设计、结果曲线、指标对比表、鲁棒性测试。第五章 结论用指标数字回扣第一章提出的问题简单讲清楚方案的适应性和局限。6.2 图表呈现的三条硬规矩第一仿真图必须有标题、坐标轴带单位、多条曲线要加图例。很多学生交上来的图连“时间(s)”都不标再好的结果都白搭。第二对比图必须统一纵轴范围。我见过一份报告传统PID曲线和模糊PID曲线分别用两套坐标轴画传统PID那条的超调看起来小一点模糊PID那条经过缩放看起来特别漂亮结果被评审一眼看穿整个报告的可信度都受影响。老老实实用同一套坐标轴范围。第三曲线颜色和线型要有明确的辨识度。传统PID用蓝色实线、模糊PID用红色虚线稳定状态标注带±5%误差带的虚线辅助线一目了然。6.3 结论段的表述公式结论部分不要写“模糊PID效果好”“明显优于”这种空话要用数字说话。推荐的写法是“在初始偏角0.2 rad工况下传统PID角度调节时间为1.8s模糊PID为1.1s缩短约39%角度最大超调从0.09 rad降至0.03 rad。在脉冲扰动工况下模糊PID恢复时间较传统PID缩短约40%。综合以上数据在本文仿真条件下模糊PID对一阶倒立摆的双环稳定控制具有更快的响应速度和更强的抗扰动能力但其控制力峰值略高实际应用中需校核执行器推力上限。”这句话把结果、对比、数值、前提、局限全说全了读起来是一个完整的技术结论不是小学生作文。6.4 报告中最容易被打回的细节问题我听过一些答辩评审提的问题集中在下面这几点写报告前自己先查一遍角度单位是不是全篇统一如果模型里用弧度、图里标度、规则表里写度全篇混用基本就是送分给别人扣。控制器输出限幅写没写限幅值是多少力信号单位是N还是电压V如果仿真里用的是理想力源没做执行器饱和评审追问一句就答不上来。规则表是靠什么依据定出来的不要写“根据模糊控制原理”要写清楚每一条规则对应哪种偏差状态和调节意图。鲁棒性测试有没有做做一组模型失配测试哪怕参数偏差只有20%报告的说服力完全不一样。我在实际做这个过程时最大的体会是模糊PID不是“调参玄学”它本质上是在把你对系统的控制经验显式地写成规则。把传统PID整定到能跑只是起步真正花时间的反而是量化因子匹配和规则表的逐条微调。很多同学一上来就抄一张大规则表结果仿真发散了就怪“模糊控制不行”——其实规则表没问题通常是Ke、Kec和基准参数的量纲没对齐或者模糊控制器输出更新频率太高导致PID参数抖动。先把传统PID调明白了再上模糊PID你会明显感觉到每一张规则表、每一个论域背后都是有逻辑的。这套方法也不只限于倒立摆无人机姿态环加位置环、云台稳定这类串级控制对象都可以用同样的思路去设计、对比和验证。

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

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

免费获取报价 →
↑