倒立摆系统作为控制理论中的经典研究对象,一直是验证各类控制算法有效性的"试金石"。而二级倒立摆更是将难度提升了一个量级——它由两个串联的摆杆组成,下层摆杆通过电机驱动小车在轨道上移动,上层摆杆通过铰链与下层摆杆连接。这个看似简单的机械结构,却蕴含着复杂的动力学特性。
我在研究生阶段第一次接触倒立摆实验时,就被其"脆弱平衡"的特性所震撼。当时实验室的师兄告诉我:"能让单级倒立站稳不算本事,能搞定二级的才是真高手。"这句话让我开始了长达半年的控制算法研究。二级倒立摆系统具有以下典型特征:
采用拉格朗日方法建立系统动力学模型是最常用的方法。定义系统参数如下:
| 参数 | 描述 | 典型值 |
|---|---|---|
| M | 小车质量 | 0.5 kg |
| m1 | 下摆杆质量 | 0.2 kg |
| m2 | 上摆杆质量 | 0.1 kg |
| l1 | 下摆杆长度 | 0.3 m |
| l2 | 上摆杆长度 | 0.25 m |
系统的拉格朗日方程为:
$$
L = T - V
$$
其中T为系统动能,V为系统势能。通过求导运算可以得到系统的非线性微分方程。
在平衡点附近(θ1≈0,θ2≈0)对系统进行线性化处理,得到状态空间表达式:
$$
\dot{x} = Ax + Bu
$$
其中状态变量x = [x, θ1, θ2, ẋ, θ̇1, θ̇2]ᵀ,u为控制输入(小车驱动力)。
注意:线性化模型仅在摆角较小时有效(通常|θ|<15°)。若需要大范围稳定控制,需考虑非线性控制方法。
采用串级PID控制结构:
这种分层控制结构可以有效分解控制难度。实际调试中发现,各环路的采样周期需要合理设置:
通过试凑法结合Ziegler-Nichols法则进行参数整定。关键发现:
最终得到的PID参数为:
| 控制环 | Kp | Ki | Kd |
|---|---|---|---|
| 位置环 | 2.5 | 0 | 0.8 |
| 下摆杆 | 15 | 0.5 | 3.2 |
| 上摆杆 | 25 | 1.2 | 4.5 |
LQR控制的核心是设计合理的代价函数:
$$
J = \int_0^\infty (x^T Qx + u^T Ru) dt
$$
经过多次尝试,确定的权重矩阵为:
$$
Q = diag([10, 1000, 1000, 1, 10, 10]) \
R = 0.1
$$
这个权重配置强调了对角度偏差的惩罚,相对弱化了位置误差。
使用MATLAB的lqr函数求解Riccati方程:
matlab复制[K,S,e] = lqr(A,B,Q,R);
得到的反馈增益矩阵K需要在实际系统中进行微调。
搭建的仿真模型包含:
定义以下评估指标:
| 指标 | PID控制 | LQR控制 |
|---|---|---|
| 稳定时间 | 3.2s | 1.8s |
| 最大超调 | 25% | 12% |
| 控制能耗 | 18.7 | 15.2 |
| 抗扰恢复 | 2.5s | 1.2s |
从结果可以看出,LQR在各项指标上均优于PID控制,特别是在抗干扰能力方面表现突出。
编码器测量存在量化噪声,解决方法:
电机输出力矩有限,需在控制器中加入抗饱和处理:
实际系统与理论模型的差异会导致性能下降,解决方法:
经过基础实现后,可以考虑以下优化方向:
在实际项目中,我最终选择了LQR作为基础控制器,叠加了模糊自适应补偿,在实验室的实物系统上实现了±30°范围内的稳定控制。这个过程中最大的体会是:理论仿真只是第一步,实际系统的各种非理想特性才是真正的挑战。建议初学者先从仿真入手理解基本原理,再逐步过渡到实物调试。