倒立摆系统作为控制理论研究的经典对象,常被用来验证各种控制算法的有效性。二级倒立摆相比一级倒立摆具有更高的阶数和更强的非线性特性,对控制算法提出了更大挑战。这个项目通过Matlab/Simulink搭建了二级倒立摆的动力学模型,并分别实现了PID控制和LQR控制两种方案,通过仿真对比分析了它们的稳定性能和抗干扰能力。
我在研究生阶段就接触过倒立摆的相关研究,当时被它看似简单实则深奥的特性深深吸引。二级倒立摆就像杂技演员用一根长杆顶起另一根短杆的表演,任何微小的扰动都可能导致系统崩溃。这种"不稳定中求稳定"的特性,使它成为检验控制算法鲁棒性的绝佳试验平台。
二级倒立摆系统由小车、摆杆1和摆杆2组成。采用拉格朗日方程建立系统动力学模型:
code复制M(q)q̈ + C(q,q̇)q̇ + G(q) = τ
其中q=[x,θ1,θ2]^T为广义坐标,M为惯性矩阵,C为科氏力矩阵,G为重力项,τ为控制输入。通过线性化处理,在平衡点附近得到状态空间方程:
code复制ẋ = Ax + Bu
y = Cx + Du
注意:实际建模时要考虑摆杆的转动惯量、关节摩擦等非理想因素,这些细节会显著影响控制效果。我在初期仿真时忽略了杆件弹性变形,导致实验结果与理论差距较大。
基于实验室现有的二级倒立摆装置,测量得到以下参数:
| 参数 | 小车质量 | 摆杆1质量 | 摆杆2质量 | 杆1长度 | 杆2长度 | 摩擦系数 |
|---|---|---|---|---|---|---|
| 值 | 0.5kg | 0.2kg | 0.1kg | 0.3m | 0.2m | 0.01N·m·s/rad |
这些参数将直接代入Simulink模型。特别提醒:摩擦系数需要通过专门的参数辨识实验获取,简单的估算会导致控制效果不理想。
采用串级PID控制结构:
code复制外环(角度环) ──> 内环(角速度环) ──> 电机驱动
每个摆杆需要独立的PID控制器,共需4个PID控制器(角度和角速度各两个)。
使用试凑法结合Ziegler-Nichols法则进行参数整定:
典型参数范围:
实操心得:二级倒立摆的PID整定比一级困难得多,参数间耦合严重。建议先固定内环参数,单独调外环,再微调内环。
在5秒时施加0.1N·m的脉冲干扰力矩,观察恢复情况。良好的PID参数应能在2秒内使摆角偏差小于5°。
选择状态变量:
code复制x = [x, θ1, θ2, ẋ, θ̇1, θ̇2]^T
通过线性化得到A,B矩阵后,需要验证系统的能控性:
code复制rank(ctrb(A,B)) = 6
Q矩阵对角元素对应状态变量的权重,R控制输入权重。经过多次尝试确定的经验值:
code复制Q = diag([10,1000,800,1,50,30])
R = 0.1
调试技巧:先给角度误差较大权重(如1000),再逐步调整其他参数。R值过大会导致控制量不足。
使用Matlab命令:
matlab复制[K,S,e] = lqr(A,B,Q,R);
得到最优反馈增益矩阵K,将其接入Simulink模型。
设置初始条件θ1=5°, θ2=3°,观察稳定时间:
| 指标 | PID控制 | LQR控制 |
|---|---|---|
| 稳定时间 | 4.2s | 2.8s |
| 最大超调 | 15° | 8° |
| 稳态误差 | <1° | ≈0 |
LQR表现出更快的响应速度和更好的阻尼特性。
在5秒时施加相同干扰:
| 指标 | PID控制 | LQR控制 |
|---|---|---|
| 恢复时间 | 3.5s | 1.8s |
| 最大偏差 | 12° | 6° |
| 控制量峰值 | 8N | 6N |
LQR在抗干扰方面优势明显,且所需控制量更小。
将摆杆质量增加20%后:
虽然本项目侧重仿真,但根据我的实际部署经验,硬件实现还需考虑:
一个常见问题是传感器噪声导致的高频抖动,可以在软件中加入低通滤波:
matlab复制% 一阶低通滤波示例
alpha = 0.2; % 滤波系数
filtered_angle = alpha*current_angle + (1-alpha)*prev_angle;
基于这个基础框架,还可以进一步探索:
我在研究生课题中尝试过模糊PID方案,相比固定参数PID,它能更好地适应不同摆角范围,但实时计算量较大,需要较高性能的处理器。