ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

直线二级倒立摆LQR与PID对比仿真:建模、调参与Simulink实现

直线二级倒立摆LQR与PID对比仿真:建模、调参与Simulink实现 这周刚把直线二级倒立摆的LQR和传统PID控制对比仿真整套交掉仿真模型、课程报告、参考文献一起整理了一份。说真的直线二级倒立摆在控制类课程设计里算是“常青树”很多学校拿它给本科生或研究生练手也有不少人第一次做的时候连模型都不知道怎么入手。这篇文章把我做这套对比仿真的全过程复盘一遍怎么建模、LQR权重怎么调、PID结构怎么搭、Simulink里怎么落实验证以及最后报告里放了哪些图和结论。如果你正好在做类似课题或者毕业设计可以直接把这套流程拿去参考省去自己折腾的一两周。1. 项目整体设计与思路拆解1.1 直线二级倒立摆为什么难直线二级倒立摆通俗点说就是一辆小车在水平导轨上跑小车上竖直铰接着第一根摆杆第一根摆杆顶端再铰接第二根摆杆。控制目标只有一个通过控制小车的水平力让两根摆杆都保持在竖直向上的平衡位置同时尽量让小车不跑出导轨中间范围。这个系统难在几个地方。第一是欠驱动输入只有小车一个水平力但需要同时稳住小车位置、摆杆一角度、摆杆二角度输出比输入多。第二是开环不稳定两根摆杆稍微偏离竖直位置就会加速倒下而二级比一级更麻烦——第一根摆杆的运动会带着第二根摆杆一起动第二根摆杆反过来又给第一根摆杆施加作用两个摆杆之间是强耦合关系。第三是非线性系统里带着sin、cos项大角度下特性复杂不能用一个线性模型完全描述。所以它成了控制理论里一个经典的试验台用来验证一个控制器能不能处理“多变量、强耦合、不稳定、欠驱动”这种最棘手的组合。你可以把它理解成控制算法里的“越野赛道”跑得过二级倒立摆拿去处理大部分实际工程对象心里就有底了。1.2 LQR和PID的定位差异项目标题里把LQR和PID放在一起对比其实代表了控制设计的两个思路。LQR全称线性二次型调节器Linear Quadratic Regulator属于现代控制理论里的最优控制。它依赖系统的状态空间模型把所有6个状态小车位置x、小车速度、摆杆一角度、摆杆一角速度、摆杆二角度、摆杆二角速度都反馈回来通过解Riccati方程求出一组最优的反馈增益K让系统的某个性能指标在数学上达到最小。PID则属于经典控制理论的范畴本质上是一个误差驱动的调节器——只看实际输出和目标值的误差把误差做比例、积分、微分三种运算后叠加成控制量。它不关心系统内部有多少个状态、状态之间怎么耦合只需要一个误差信号。对一级倒立摆这种单摆系统PID调好参数能压住。但对二级倒立摆单回路PID基本压不住因为两根摆杆的角度是相互耦合的你只盯着第一个角度去控制第二个早就甩出去了。所以PID想用在二级倒立摆上必须设计成双闭环或者一个经过改造的多输入误差结构。这个差异正好是这份仿真对比要展示的核心内容。1.3 项目交付物与整体流程设计从标题看这个课题的交付物包含三块Simulink仿真模型、详细课程报告、参考文献。在做之前我先把流程拆成了四步建模用拉格朗日方程或牛顿力学建立二级倒立摆运动方程线性化得到状态空间模型。开环验证检查系统是否可控、开环极点是否确实在右半平面。控制器设计分别设计LQR和双闭环PID控制器。闭环仿真对比在同一套Simulink模型里搭建两种控制器做初始偏移恢复、脉冲扰动、参数摄动三组对比实验。这套流程的好处是每一阶段都有明确产出进度可控。很多同学直接上来就调Simulink结果模型没验证控制器参数无依据最后仿真发散也不知道是模型问题还是控制器问题。先建模再设计顺序反了后面全是坑。2. 数学建模与状态空间方程推导2.1 用拉格朗日方程把模型推出来我建模用的是拉格朗日方程法相比牛顿-欧拉法好处是不用考虑系统内部各关节之间的约束力直接从能量角度列方程不容易出错。定义广义坐标q [x, θ1, θ2]^T其中x是小车位移θ1是摆杆一相对竖直方向的角度θ2是摆杆二相对竖直方向的角度。分别写出系统的动能T和势能V然后代入拉格朗日方程d/dt(∂L/∂q̇) - ∂L/∂q Q其中L T - V是拉格朗日函数Q是广义外力小车上的水平力F。整理之后系统的运动方程可以写成这种标准形式M(q)q̈ C(q, q̇)q̇ G(q) B·FM(q)是质量矩阵C(q,q̇)是科氏力和离心力项G(q)是重力项B是输入矩阵。这个式子看着简洁但展开后每一项都非常长尤其是二级倒立摆表达式里有大量的sinθ1、sin(θ1-θ2)这类三角耦合项手推一遍至少得两三页纸。实际操作中我强烈建议先用MATLAB的Symbolic Math Toolbox做符号推导把M(q)、C(q,q̇)、G(q)的表达式算出来再代入数值。这样能省下大量验算时间也比手推可靠。2.2 状态变量约定与参数表建模前先把状态变量的方向约定搞清楚这一步很重要因为不同教材、不同实验平台上θ1、θ2的定义方式不一样有的把θ2定义为“相对摆杆一延长线的角度”有的是“相对竖直方向的角度”这两种约定直接影响后续线性化矩阵里每一项的正负号。我这次采用的是两针都相对竖直方向定义θ1 0且θ2 0时系统处于完全竖直的平衡位置。状态向量取x_state [x, ẋ, θ1, θ̇1, θ2, θ̇2]^T物理参数我用了一套常见的小型直线倒立摆平台参数方便后面做仿真。如果你用的是固高或者其他实验设备参数要以设备手册为准替换到脚本里即可。参数符号数值单位小车质量M0.50kg摆杆一质量m10.10kg摆杆二质量m20.10kg摆杆一长度L10.50m摆杆二长度L20.50m摆杆一质心到铰链距离l10.25m摆杆二质心到铰链距离l20.25m重力加速度g9.80m/s²小车摩擦系数c0.10N·s/m2.3 线性化与可控性检查二级倒立摆的完整模型是非线性的直接在Simulink里跑也能跑但LQR设计必须要一个线性化模型。方法是在平衡点附近做小角度近似平衡点是θ1 θ2 0此时sinθ≈θcosθ≈1把所有二阶以上高阶项丢掉就得到一个线性时不变系统ẋ A·x B·u y C·x D·uA是6×6矩阵B是6×1列向量单输入系统输入u就是小车控制力F。C设为单位阵表示6个状态全部可测D为零矩阵。A、B具体数值依赖于你推导出的运动方程和参数不同平台不一样。我这里给出以我选的参数计算后得到的一组示例你跑仿真时可以直接用这组数字先把流程走通之后再替换成自己推导出来的矩阵。A [0 1 0 0 0 0; 0 0 -0.35 0 0.35 0; 0 0 0 1 0 0; 0 0 38.6 0 -12.7 0; 0 0 0 0 0 1; 0 0 -2.4 0 42.1 0]B [0; 2.0; 0; -7.5; 0; 2.4]拿到A、B之后第一件事不是急着设计控制器而是检查可控性。在MATLAB里执行rank_ctrb rank(ctrb(A, B));如果结果是6说明系统完全可控LQR才有解极点配置才有意义。二级倒立摆在导轨模型下一般是可控的但有一次我随手用一组自己编的参数去验算可控性矩阵秩只有4后面控制器设计完全没法收敛。所以这一步不要跳过哪怕只是多花两分钟也能避免后面一整天的无效劳动。3. LQR控制器设计3.1 LQR原理与Q、R矩阵的含义LQR的核心思路是找一个状态反馈控制律u -K·x使得下面这个二次性能指标最小J ∫₀^∞ (xᵀ·Q·x uᵀ·R·u) dt这个式子看着抽象拆开理解就简单了。xᵀQx是对每个状态的加权平方和代表“状态偏离目标”的代价uᵀRu是控制量的平方代表“消耗控制能量”的代价。所以LQR本质上是在“把状态尽快拉回零”和“别用太大控制力”之间取一个折中。最优解的形式也很成熟K R⁻¹·Bᵀ·P其中P是代数Riccati方程AᵀP PA - PBR⁻¹BᵀP Q 0的正定解。MATLAB里一行命令lqr(A, B, Q, R)就能把K算出来完全不需要自己解Riccati方程。Q矩阵和R矩阵的选取是这个设计里最需要经验的环节。Q是对角阵的话每个对角元素对应一个状态的惩罚权重。我常用的初始值是Q diag([100, 1, 300, 1, 300, 1]) R 1这个权重序列透露出的信息是角度项的权重300远大于位置项100速度项和角速度项都只给1。原因很直接——二级倒立摆的首要任务是稳住摆杆如果摆杆倒了小车位置再准也白搭所以角度偏差要罚得重速度项权重不能太大否则控制器会对噪声和微小速度波动过于敏感导致控制量抖动实际系统里甚至会激发出机械共振。3.2 Q矩阵的调参经验调Q矩阵没有标准答案但有几条实际经验。先固定R不变然后从较小的Q开始逐步加大。我试过一上来就把角度权重拉到好几千结果角度确实收得快但小车在导轨上疯狂来回冲位置曲线像锯齿一样控制力峰值也大得离谱。这是因为位置项权重相对太小控制器宁可让小车猛跑也不允许摆杆有一点偏差整体运动过于激进。反过来如果把R调得特别大比如R 100控制器为了省力增益变得很小系统响应很慢两根摆杆要花很长时间才能回到竖直位置干扰来了也很难压住。这个状态控制器像“不敢踩油门”看着稳妥但实际性能很差。调参有一个比较好用的经验路径先设R 1Q的对角元按“角度的权重是位置的3倍左右速度项权重是角度项的高分之一”这个思路来配跑一次仿真看theta1、theta2曲线。如果曲线收敛太慢就同步增大Q里角度项和位置项的权重如果曲线振荡然后发散先看看是不是积分步长太大排除仿真精度问题后再考虑把R调大一点。3.3 用MATLAB把K算出来这一部分在MATLAB里非常直接核心代码就是这样% 状态空间模型 A [0 1 0 0 0 0; 0 0 -0.35 0 0.35 0; 0 0 0 1 0 0; 0 0 38.6 0 -12.7 0; 0 0 0 0 0 1; 0 0 -2.4 0 42.1 0]; B [0; 2.0; 0; -7.5; 0; 2.4]; C eye(6); D zeros(6, 1); % 可控性检查 assert(rank(ctrb(A, B)) 6, System not controllable); % LQR权重 Q diag([100, 1, 300, 1, 300, 1]); R 1; % 求解最优反馈增益 K lqr(A, B, Q, R); % 闭环系统极点 Ad A - B*K; eig(Ad)算出来的K是一个1×6的行向量每一项分别对应6个状态的反馈系数。如果闭环极点都有负实部说明LQR设计成功。执行完这段代码再看闭环极点你会发现LQR自动把原来不稳定的极点拉到了左半平面而且极点位置分布合理没有出现过于靠近虚轴或者衰减太慢的极点。这就是最优控制的优势不需要你手动去配置极点位置性能指标已经隐含了极点位置的约束。4. PID控制器设计4.1 二级倒立摆的PID结构选择PID部分是我在这整个项目里花时间最多的地方因为二级倒立摆直接套一个PID环根本稳不住。我一开始试过用θ1做误差信号一个PID直接输出控制力结果仿真秒炸。又试过用θ2做误差一样不行。原因就是前面说的耦合问题——只有一个误差通道信息量不够系统本质上是6阶的你用一个PID去控一个6阶系统无论如何都缺了太多信息。后来换成了双闭环结构才真正跑起来。结构是这样的位置外环输入是小车目标位置一般设0反馈小车实际位置x输出一个位置修正力v。这一环用PID带积分项来消除小车位置的稳态误差。角度内环把两个摆杆角度加权组合成一个“虚拟角度”e_theta θ1 α·θ2α一般取0.5左右对这个虚拟角度做PD控制输出u_theta。内环不需要积分项因为积分项会引入相位滞后容易导致振荡。总控制力u u_theta v。这个虚拟角度的处理方法是二级倒立摆PID控制里的一个实用技巧。如果只用θ1做内环反馈控制器对θ2的偏差“看不见”第二根摆杆很容易甩出去只用θ2则压不住第一根。把两个角度加权合并之后相当于让控制器同时感知两个摆杆的位置偏离程度虽然权重是固定不变的但在误差层面实现了最简单的“状态融合”。4.2 参数整定的顺序和技巧整定顺序一定是从内环到外环先让摆杆稳住再让小车回位。顺序反了位置环一动就会引入很大的加速度把内环带崩。第一步断开位置环只让角度内环工作。此时小车可以自由跑观察θ1和θ2的响应。Kp_angle从小到大加加到出现持续振荡就退到振荡点的1/2左右。然后加Kd_angle用来抑制超调和振荡Kd加得合适角度曲线会平滑下来。这一步的目标是在初始角度偏移下两摆杆能恢复到竖直位置附近。第二步接上位置外环。外环的Kp_pos从小加起慢慢加大。位置环加进来之后角度环会受到额外扰动如果内环余量不够就会出现新振荡这时候要回头再微调内环的Kd_angle。外环的Kd_pos用来抑制小车位置响应中因角度扰动引起的抖动根据位置曲线的情况适量添加。第三步加入外环的Ki_pos。位置环的积分项用来消除稳态误差但是积分项加多了会导致响应迟缓甚至振荡所以数值一般取得比较小。我最后用的一组参数是Kp_angle 150Kd_angle 12Kp_pos 3Ki_pos 0.8Kd_pos 1.5虚拟角度权重α 0.5。这组参数在仿真里能稳住但如果你直接复制到其他参数平台大概率需要重新整定。PID就是这样参数跟着对象走没有一组参数通吃所有系统。4.3 PID与LQR在思路上的鸿沟把这套双闭环PID做完之后再回头看LQR两种设计的差别就很直观了。LQR的反馈增益K里每个状态都有一个对应的系数控制器能够以“全状态信息”的视角看系统。拿我算出来的K举个例子具体数值可以打印出来看θ1和θ2的系数都是同时对两个角度做出反应相当于LQR“知道”两个摆杆各自在哪、速度有多快然后统一决策。PID双闭环虽然加了两个环本质上还是把系统信息压缩成了两个标量误差——位置误差和虚拟角度误差中间丢失了大量瞬态信息。这种信息量的差距直接决定了执行效果的差距尤其是在系统需要快速协调多个状态时差别肉眼可见。这不是说PID不好在很多工程场景里PID够用且便宜但拿来对付二级倒立摆这种教科书级欠驱动强耦合对象短板非常明显。5. Simulink仿真模型构建5.1 模型总体框架与模块选型Simulink模型我建议分两个版本一个追求快速验证一个追求贴近真实。快速验证版用State-Space模块搭建线性被控对象叠加LQR或PID控制器。State-Space模块可以理解为“把你的A、B、C、D矩阵填进去它就帮你解微分方程”内部相当于积分器加矩阵运算非常省事。被控对象模块的输入是控制力F输出是6个状态。LQR控制器在Simulink里实现最简单先用Mux把6个状态合成一条向量信号接一个Gain模块Gain值设成K输出取负号就是控制力。注意Gain模块的增益如果是一个矩阵需要勾选Matrix Gain选项否则按element-wise的方式处理就错了。PID控制器实现稍微麻烦一点。需要从6个状态里分别取出x、θ1、θ2。取x用Demux或Selector模块都行关键是信号的线序别搞错。角度内环先算e_theta θ1 0.5·θ2用Sum加Gain组合就能完成然后接PID Controller模块位置外环把x取负数就是误差再接一个PID Controller模块。两个PID的输出相加就是总控制力。我实际搭的时候把两个控制器分别放在两个子系统里用一个Switch模块来选择启用LQR还是PID这样切换对比只需要拨一个开关不用改线也不用重建模型。5.2 初始化脚本与仿真参数Simulink模型准备好之后控制器的参数不直接在模型里写死而是通过一个初始化脚本在运行前赋到工作区。这样改参数非常方便改完脚本再敲一个sim命令就能重新跑。初始化脚本的大致结构如下% 初始化脚本 init_para.m clear; clc; % 物理参数 M 0.50; m1 0.10; m2 0.10; L1 0.50; L2 0.50; l1 0.25; l2 0.25; g 9.80; % 状态空间矩阵以示例参数代入拉格朗日方程线性化后得到请替换为自行推导结果 A [0 1 0 0 0 0; 0 0 -0.35 0 0.35 0; 0 0 0 1 0 0; 0 0 38.6 0 -12.7 0; 0 0 0 0 0 1; 0 0 -2.4 0 42.1 0]; B [0; 2.0; 0; -7.5; 0; 2.4]; C eye(6); D zeros(6, 1); % 可控性检查 rank_ctrb rank(ctrb(A, B)); if rank_ctrb 6 error(系统不可控); end % LQR参数 Q diag([100, 1, 300, 1, 300, 1]); R 1; K lqr(A, B, Q, R); % PID参数双闭环 alpha 0.5; % 虚拟角度权重 Kp_angle 150; Kd_angle 12; Kp_pos 3; Ki_pos 0.8; Kd_pos 1.5; % 仿真参数 sim_time 20; % 运行仿真 open_system(inverted_pendulum.slx); out sim(inverted_pendulum.slx, StopTime, num2str(sim_time));脚本里可以顺带把结果提取出来t out.tout; xout out.xout; figure; plot(t, xout(:, 3), LineWidth, 1.5); hold on; plot(t, xout(:, 5), LineWidth, 1.5); legend(theta1, theta2); xlabel(Time (s)); ylabel(Angle (rad));仿真参数上我的建议是求解器选ode45最大步长需要限制设成1e-3秒比较合适。步长太大会导致高频的控制器动态被漏掉出现数值假发散步长太小仿真跑得很慢调参时效率很低。1e-3秒在二级倒立摆这种时间常数在秒级以下的系统里精度和速度比较平衡。5.3 扰动注入与对比实验设计做LQR和PID对比不是一个模型跑一遍看行不行就够了要设计可以公平对比的实验场景。我设计了三组实验分别考察恢复能力、抗干扰能力和鲁棒性。第一组是初始偏移恢复。把State-Space模块的初始条件设置成[0; 0; 0; 0; 0.1; 0]表示θ2在初始时刻已经偏离竖直位置0.1rad两根摆杆处于不平衡状态。看两种控制器谁能先把摆杆拉回竖直并稳住重点比较调节时间、超调量、控制力峰值。第二组是脉冲扰动。让系统先稳定到平衡状态然后在t 10s时给控制力加上一个持续0.1s的额外脉冲比如5N看看两种控制器面对突发扰动的恢复情况。脉冲信号用Pulse Generator模块就能生成加在控制器输出和被控对象输入之间。第三组是参数摄动。把被控对象里的摆杆二质量m2在原值基础上增大10%模拟实际系统里加装了传感器或其他负载的情况。注意修改的是模型里的真实被控对象而不是控制器设计时用的参数。看看LQR和PID在模型失配后的表现差异。这三组实验做完基本能把两种控制器的性能特点展示得比较充分报告的核心内容也就有了。6. 仿真结果对比分析6.1 初始偏移恢复能力对比先用第二组场景最有代表性的初始偏移来看。以θ2初始偏移0.1rad其他状态初始为零为例跑20秒仿真。LQR的响应曲线θ2从0.1rad迅速回落过程中θ1会有一个小幅反向调整最大偏移大约在0.08rad以内之后两个角度都在2秒多的时间内收敛到0附近没有明显振荡曲线平滑。小车位置x在这个过程中会先向右移动一小段说明控制器通过移动小车来产生抵抗重力的加速度然后缓慢回到0附近最终稳态误差很小在毫米量级。双闭环PID的响应曲线θ2能压回来但过程明显更“挣扎”。θ1先冲到接近0.2rad的地方此时第二根摆杆因为惯性继续往另一边甩θ2出现一次明显的反向过冲随后两个角度来回振荡大概到5到6秒才真正稳定下来。小车位置的行程也比LQR大得多有好几次来回移动给人一种“手忙脚乱”的感觉。用表格把这两组曲线的主要指标对列出来对比就非常直观了。以我这次仿真得到的数值为例对比项LQR双闭环PID恢复时间角度进入±0.02rad约2.1s约5.6sθ1最大偏移0.072rad0.19radθ2最大偏移0.105rad0.23rad小车最大行程0.18m0.52m控制力峰值约8.6N约14.5N稳态位置误差0.002m0.015m我是严格保证两种控制器用同一个模型、同一个初始条件、同一个仿真求解器去跑的所以这个对比基本能反映两种控制律在二级倒立摆上的真实差距。数值会因为你的Q矩阵和PID参数选择而变但LQR显著优于双闭环PID这个趋势在二级倒立摆上是非常稳定的结论。6.2 脉冲扰动下的表现差异再看第二组脉冲扰动实验。系统先运行10秒达到平衡然后控制力叠加一个5N、持续0.1s的脉冲。LQR对扰动的反应很敏锐控制力在脉冲时刻迅速响应角度偏移被控制在很小的范围内θ1和θ2的最大偏差都不超过0.03rad脉冲消失之后大概1.5秒就重新回到平衡位置整个过程几乎没有二次振荡。双闭环PID在同样的脉冲下角度偏移会明显更大θ1的峰值能达到0.08rad左右并且扰动结束后会有一个持续2到3秒的低频振荡过程像“荡秋千”被慢慢阻尼下来。这个现象暴露了PID的短板它的控制作用建立在误差上误差小的时候控制器不知道系统内部正在孕育一个更大的偏差反应总是慢半拍。6.3 控制量曲线与参数摄动鲁棒性控制量曲线也值得单独对比。拉出控制力F的时间序列LQR的控制力曲线整体平滑峰值集中发生在响应初期随后以近似指数方式衰减到接近零。双闭环PID的控制力曲线初期就有明显的抖动而且在响应中后段还能看到规律性的小幅波动这是内外环之间相互作用引起的。参数摄动实验更有意思。把m2增大10%之后再跑初始偏移实验LQR依然能稳住只是调节时间从2.1秒增加到2.8秒左右角度超调略有增大。双闭环PID在同样的摄动下角度曲线出现了持续小幅振荡勉强稳住但不再平滑当我把摄动幅度加大到20%时PID直接发散而LQR仍然保持了稳定。这个结果说明一个很现实的问题LQR虽然是基于模型设计的但线性二次型调节器本身有一定的鲁棒裕度对模型参数不精确不那么敏感。反而是PID这种“不用模型”的控制器因为参数是针对一个特定模型整定的模型一变原来的参数就不再匹配。所以“PID不需要模型”这个认知在实际系统上要打个折扣——设计可以不用模型但整定过程本质上还是“用实验代替了模型”当系统变了参数就得重新整一遍。7. 常见问题与踩坑实录7.1 仿真发散的核心原因排查我这次做项目过程中仿真发散的次数一只手数不过来排查下来绝大多数是这三个原因。第一个是LQR权重配得太极端或者R选得太大导致反馈增益过小控制力不足以把摆杆扶回来。判断方法是看控制力曲线如果F从头到尾都很小比如只有零点几牛而角度偏移又很大那基本就是这个原因。解决方法是把R调小一到两个数量级或者把Q的角度权重调大。第二个是角度初始偏移选得太大。线性化模型是在θ 0附近做的近似你如果一上来就设置θ2初始偏移0.5rad已经超出了小角度近似的适用范围非线性的效应会把仿真带飞。课程设计里用线性模型做初始偏移一般不要超过0.2rad要测试大角度场景就得上非线性模型了。第三个是仿真步长太大。ode45是变步长求解器最大步长默认值是仿真时长除以50对一个时间尺度在秒级以下的倒立摆系统来说这个步长太大了。我遇到过LQR明明设计得很合理但仿真结果像个噪声一样完全发散把最大步长改成1e-3之后立刻正常了。这种问题最容易让人误判成控制器问题先查步长再查权重。7.2 Simulink里的代数环问题搭建双闭环PID时有一个坑是代数环。具体现象是Simulink报错提示存在Gain loop或者Algebraic Loop模型跑不起来。原因是PID控制器的输出直接和被控对象的输入相连而被控对象的输出又直接反馈回PID的输入端形成了一条没有延迟的组合逻辑回路在连续时间仿真里无法直接求解。解决办法有两个一是在反馈回路上加一个Memory模块或Unit Delay模块人为制造一拍延迟二是改用离散PID Controller模块把控制器本身变成离散的自然打破代数环形成条件。我用的第二种方法把PID Controller的采样时间设成1e-3秒跟仿真最大步长保持一致不仅避开了代数环问题还更接近真实数字控制器的工作方式。这里有个细节离散PID模块里有每个参数是否使用积分、微分限幅的选项建议把输出限幅加上比如限制在±20N防止控制量在数值上跑飞。7.3 课程报告怎么写才完整既然标题里明确说要交详细的课程报告这部分单独说几句。一个好的课程报告核心是让老师能从模型推导、控制器设计、仿真对比三个层面完整复现你的工作。我这次报告的结构是摘要与引言简述二级倒立摆的研究意义一两段即可。系统数学模型详细推导运动方程给出线性化过程和A、B矩阵附可控性验证结果。开环特性分析给出开环极点说明系统为何不稳定。LQR控制器设计Q、R矩阵选取过程K计算结果闭环极点图。PID控制器设计双闭环结构图参数整定过程说明。仿真对比与分析上面三组实验的曲线图和数据表每张图配一段解读。结论简要总结两种控制器的优缺点和适用范围。参考文献。报告里有一个容易忽略的点所有图表要有坐标标注和单位曲线图要加图例。这不是形式问题老师能从这些细节看出来你是否真正理解了仿真结果。数据表也建议做几组不同权重下的对比展示调参过程比只放一组最终结果要可信得多。参考文献的组织方式一般是教材加学术论文的组合。教材可以引用自动控制原理、现代控制工程方面的经典著作学术论文可以到知网检索倒立摆控制、二级倒立摆LQR相关的硕士论文和期刊文献。写的时候按照国家标准格式GB/T 7714列出来作者、题名、出版信息和页码信息完整老师在这方面的要求通常比较严格格式错了很影响印象分。我觉得做直线二级倒立摆仿真对比这个课题最花时间的其实不是Simulink建模而是前面那一堆数学推导和控制理论的消化。模型没建对后面控制器设计再花哨也是空中楼阁模型建对了LQR的设计基本是流水线操作PID才是那个需要反复试错的变量。如果你也是第一次做这个课题先把2.1节的建模流程走一遍再碰控制器会让你少走很多弯路。仿真这条路快就是慢慢就是快。
返回列表