ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

直线一级倒立摆MATLAB仿真:建模、LQR控制与Simulink实现

直线一级倒立摆MATLAB仿真:建模、LQR控制与Simulink实现 简介这份PDF报告面向自动控制理论课程学习者、倒立摆实验操作者及控制算法入门研究者围绕便携式直线一级倒立摆的MATLAB仿真展开解决从系统建模到控制器设计的完整分析问题。资源包仅含1个PDF文件大小约1.4MB内容以图文并茂的实验报告形式呈现便于直接阅读与打印。报告系统梳理了实验设备与系统构造、控制原理方框图、小车-摆杆数学模型的力学分析与运动方程推导、非线性方程线性化、零初始条件拉氏变换及传递函数求解并借助MATLAB完成校正前系统的Nyquist图、阶跃响应与Bode图仿真判定系统不稳定性进而设计近似PID串联超前校正装置给出开环增益计算、参数确定及校正后仿真验证。已有127人学习适合需要参考完整建模推导、仿真代码与校正设计思路的读者可作为课程实验报告撰写与控制系统综合练习的实用范本。1. 从一份“直线一级倒立摆 MATLAB 仿真报告”说起直线一级倒立摆是控制教学里最经典的被控对象之一小车在水平导轨上左右运动摆杆铰接在小车上目标是通过控制小车加速度把摆杆稳定在竖直向上的平衡点。它之所以被反复拿来做仿真报告是因为这个系统本身是不稳定的——摆杆竖直向上时重力矩是“帮倒忙”的只要没有闭环控制几毫秒内就会倒下。这恰好逼着你把建模、线性化、状态反馈、观测器、仿真验证这一整套流程走一遍。一份合格的直线一级倒立摆 MATLAB 仿真报告核心不是画几张响应曲线而是能回答四个问题非线性模型怎么推、平衡点附近怎么线性化、控制器参数怎么定、仿真发散时怎么排查。它适合自动化、控制工程方向的学生也适合想用 MATLAB 快速验证 LQR、极点配置这类算法的工程师。下面按“建模—线性化—控制器—仿真—排错”的顺序把可复现的步骤讲清楚。2. 直线一级倒立摆的非线性建模与状态空间线性化2.1 用拉格朗日方程推出非线性动力学直线一级倒立摆的物理量先定义清楚小车质量 M摆杆质量 m摆杆质心到转轴距离 l摆杆绕质心转动惯量 I小车位移 x摆杆与竖直向上方向夹角 θ逆时针为正小车受到的水平控制力 F摩擦暂不计。用拉格朗日方程对广义坐标 x 和 θ 列写常见做法是得到下面这组方程(M m) x m l θ cosθ - m l θ^2 sinθ F (I m l^2) θ m l x cosθ - m g l sinθ 0这两行是整个仿真报告的地基。第一行是小车平动方程第二行是摆杆转动方程。注意 θ 的定义方向如果定义成竖直向下sinθ 的符号会反过来后面线性化矩阵会整体变号这是很多人仿真一开始就发散的原因。2.2 在平衡点附近做线性化平衡点是 θ0、θ0、x0此时 sinθ≈θcosθ≈1θ^2 项忽略。把上面两式整理成 x 和 θ 的显式形式再写成状态空间% 直线一级倒立摆线性化状态空间模型 M 0.5; m 0.2; l 0.3; I 0.006; g 9.8; den (M m)*(I m*l^2) - (m*l)^2; % 状态向量 [x; x_dot; theta; theta_dot] A [0 1 0 0; 0 0 -(m^2*l^2*g)/den 0; 0 0 0 1; 0 0 (Mm)*m*g*l/den 0]; B [0; (I m*l^2)/den; 0; -m*l/den]; C [1 0 0 0; 0 0 1 0]; D [0; 0]; sys ss(A, B, C, D);逻辑说明den 是耦合项消元后的公共分母A 矩阵第 2 行和第 4 行分别对应小车加速度和摆杆角加速度对状态的偏导。参数说明M 越大B 的第一个分量越小说明推同样力小车加速度越小l 越大摆杆越难稳因为重力矩随 l 增大。运行eig(A)会看到至少一个正实部特征值这正是系统开环不稳定的数学证据。2.3 线性化模型的适用边界线性化只在 θ 接近 0 时成立。如果初始角度给到 30 度以上线性控制器往往拉不回来因为 sinθ≈θ 的误差已经很大。仿真报告里建议同时给出非线性模型和线性模型用同一组控制器分别跑对比两者在 5 度、15 度初始扰动下的差异。这一步能体现你对模型有效性的理解而不是只贴一条完美曲线。3. 用 LQR 和极点配置设计倒立摆控制器3.1 LQR 权重矩阵的选取与试凑LQR 的目标是最小化J ∫(xQx uRu)dt。Q 惩罚状态偏差R 惩罚控制量。直线一级倒立摆常用起点是 Qdiag([100, 1, 100, 1])R1然后根据响应调。Q diag([100, 1, 100, 1]); % 位置和角度权重大速度权重小 R 1; % 控制力代价 [K, S, e] lqr(A, B, Q, R); disp(反馈增益 K ); disp(K); disp(闭环极点 ); disp(e);逻辑说明lqr返回的 K 是状态反馈增益控制律 u -Kx。参数说明Q 中角度项从 100 加到 500摆杆回正更快但小车位移会变大R 从 1 降到 0.1控制更激进容易激励未建模高频动态。建议在报告里放一张 Q 角度项取 100、300、500 的对比表。Q 角度项R摆杆回正时间小车最大位移控制力峰值1001约 1.8 s0.35 m4.2 N3001约 1.2 s0.55 m7.8 N5001约 0.9 s0.80 m12.5 N这张表是仿真报告里最有说服力的部分它把“调参”从玄学变成可比较的数据。3.2 极点配置的替代方案如果报告要求不用 LQR可以用place直接指定闭环极点。直线一级倒立摆是四阶需要给四个期望极点通常选两个快的实极点加一对共轭复极点。p [-2, -3, -11i, -1-1i]; % 期望闭环极点 K_place place(A, B, p);逻辑说明place对多输入系统有算法限制这里 B 是单列可以直接用。参数说明极点实部越负响应越快但控制量越大虚部决定振荡频率虚部太大摆杆会来回晃。注意place不能把极点配置得比开环不稳定极点快太多否则数值病态K 会大到不现实。3.3 观测器与状态可测性实际系统往往只测小车位移和摆杆角度速度量要么差分要么用观测器。仿真报告里可以加一个龙伯格观测器极点取控制器极点的 3 到 5 倍快。L place(A, C, [-8, -9, -10, -11]); % 观测器动态: x_hat A*x_hat B*u L*(y - C*x_hat)逻辑说明A和C是把观测器极点配置转成对偶系统极点配置。参数说明观测器极点太快会放大测量噪声太慢则估计跟不上一般取闭环极点的 3 到 5 倍。报告里可以对比“全状态反馈”和“观测器反馈”两条曲线说明估计误差对稳定性的影响。4. 在 Simulink 里搭非线性模型并跑通仿真4.1 非线性被控对象的 Simulink 搭建Simulink 里不要直接用线性状态空间否则体现不出倒立摆的非线性。常见做法是用 MATLAB Function 块写动力学输入 F输出状态导数。function dx pendulum_dyn(x, F) % x [x_cart; x_dot; theta; theta_dot] M 0.5; m 0.2; l 0.3; I 0.006; g 9.8; th x(3); dth x(4); den (M m)*(I m*l^2) - (m*l*cos(th))^2; dx1 x(2); dx2 ((I m*l^2)*(F m*l*dth^2*sin(th)) - m*l*cos(th)*m*g*l*sin(th)) / den; dx3 dth; dx4 ((M m)*m*g*l*sin(th) - m*l*cos(th)*(F m*l*dth^2*sin(th))) / den; dx [dx1; dx2; dx3; dx4]; end逻辑说明den 里带 cosθ说明耦合随角度变化这正是非线性项。参数说明F 是控制输入dth^2 项在角度大时不可忽略。把这个函数块接积分器再引出 x 和 θ 给示波器就得到非线性被控对象。4.2 控制器接线与初始条件设置控制器用 Gain 块实现 u-KxK 从工作区读。初始条件给 θ0.1 rad约 5.7 度x0。求解器选 ode45步长自动相对容差 1e-6。仿真时间 5 秒。如果一上来就发散先检查 K 的符号和状态顺序是否和 A、B 一致——状态顺序错位是仿真发散最常见的原因。4.3 仿真发散的排查清单仿真发散时按这个顺序查第一eig(A-B*K)是否全在左半平面如果有正实部控制器本身没稳住第二Simulink 里状态向量顺序是否和 K 对应[x, x_dot, theta, theta_dot]不能乱第三初始角度是否超出线性化范围超过 20 度建议换非线性控制器或加大 Q第四求解器步长是否太大ode45 一般够用刚性系统可换 ode15s第五控制力是否饱和实际执行器有上限仿真里加 Saturation 块更真实。提示仿真发散先看闭环极点再看状态顺序最后看初始条件和求解器这个顺序能省掉大半调试时间。5. 仿真报告的验证指标与进阶技巧5.1 用阶跃响应和抗扰测试量化性能报告里不要只放一条回正曲线。至少给三组初始角度 5 度自由回正、小车位置阶跃 0.2 m 跟踪、摆杆受 0.5 N·m 脉冲扰动后的恢复。每组记录调节时间、超调量、稳态误差。MATLAB 里可以用step和lsim快速算线性模型指标再用 Simulink 非线性模型对照。sys_cl ss(A - B*K, B, C, D); step(sys_cl, 5); grid on; title(闭环阶跃响应); S stepinfo(sys_cl); disp(S);逻辑说明stepinfo直接给出 RiseTime、SettlingTime、Overshoot。参数说明线性模型指标偏乐观非线性模型在角度大时会差一些报告里两个都放说明差异来源。5.2 从一级倒立摆扩展到二级的思路一级稳了之后很多人会想加一根摆杆做二级。二级倒立摆状态变成六维线性化后 A 是 6×6LQR 依然可用但 Q 矩阵要重新调通常角度项权重需要更大因为第二级更敏感。仿真报告里可以只加一小节说明扩展方向不必完整实现重点是讲清楚状态维度和耦合项的变化。5.3 报告里容易被忽略的两个细节第一单位统一。质量用 kg、长度用 m、角度用 rad混用 cm 或度会让增益数量级完全不对。第二控制量限幅。真实电机推力有限仿真里加 Saturation 后如果 K 太大系统会因饱和而失稳这恰好能解释为什么“理论能稳、实物稳不住”。把这两点写进报告比多画十条曲线更有价值。本文还有配套的精品资源点击获取
返回列表