线性系统实战:一阶倒立摆的Simulink建模与LQR控制器设计

📅 2026/7/15 6:58:47 👁️ 阅读次数 📝 编程学习
线性系统实战:一阶倒立摆的Simulink建模与LQR控制器设计

1. 一阶倒立摆的物理模型与数学推导

倒立摆系统是控制理论中的经典研究对象,它由一个可以在水平轨道上移动的小车和通过铰链连接的摆杆组成。这个系统的核心挑战在于:摆杆的直立位置是一个不稳定的平衡点,需要通过精确控制小车的运动来维持平衡。

1.1 牛顿力学建模法

我们先对系统进行受力分析。假设:

  • 小车质量 M = 2kg
  • 摆杆质量 m = 0.1kg
  • 摆杆长度 2l = 1m(质心到转轴距离 l = 0.5m)
  • 外力 u 作用于小车
  • 忽略摩擦和空气阻力

水平方向受力分析

  1. 对小车的牛顿第二定律: $$ M\ddot{x} + H = u $$
  2. 对摆杆的水平受力分析: $$ H = m\frac{d^2}{dt^2}(x + l\sin\theta) = m\ddot{x} + ml(\ddot{\theta}\cos\theta - \dot{\theta}^2\sin\theta) $$

垂直方向与转动分析

  1. 摆杆垂直方向: $$ V = mg - ml(\ddot{\theta}\sin\theta + \dot{\theta}^2\cos\theta) $$
  2. 摆杆转动方程: $$ Vl\sin\theta - Hl\cos\theta = I\ddot{\theta} $$

最终得到非线性微分方程组: $$ \begin{cases} (M+m)\ddot{x} + ml\ddot{\theta}\cos\theta - ml\dot{\theta}^2\sin\theta = u \ ml\ddot{x}\cos\theta + (I+ml^2)\ddot{\theta} - mgl\sin\theta = 0 \end{cases} $$

1.2 拉格朗日方程验证

为了验证模型的正确性,我们再用能量法推导。系统动能T和势能V为: $$ \begin{aligned} T &= \frac{1}{2}M\dot{x}^2 + \frac{1}{2}I\dot{\theta}^2 + \frac{1}{2}m[(\dot{x}+l\dot{\theta}\cos\theta)^2 + (-l\dot{\theta}\sin\theta)^2] \ V &= mgl\cos\theta \end{aligned} $$

通过拉格朗日方程计算,最终得到与牛顿法完全相同的方程,验证了模型的正确性。

提示:在实际建模时,我建议先用拉格朗日法建立方程,再用牛顿法验证。这种方法可以避免受力分析时的遗漏,特别是对于复杂系统。

2. Simulink建模与非线性仿真

2.1 非线性模型搭建

在Simulink中,我们可以直接实现前面推导的微分方程。具体步骤:

  1. 创建新模型,添加以下模块:
    • 两个Integrator模块分别表示x和θ的二阶积分
    • Function模块编写非线性方程
    • Scope模块观察输出
% 非线性方程函数示例 function [x_ddot, theta_ddot] = pendulum_eq(u, x, x_dot, theta, theta_dot) M = 2; m = 0.1; l = 0.5; g = 9.8; I = (1/3)*m*(2*l)^2; denom = (M+m)*(I+m*l^2) - (m*l*cos(theta))^2; x_ddot = ((I+m*l^2)*u + m*l*(I+m*l^2)*theta_dot^2*sin(theta)... - (m*l)^2*g*cos(theta)*sin(theta))/denom; theta_ddot = (-m*l*u*cos(theta) - (m*l)^2*theta_dot^2*sin(theta)*cos(theta)... + (M+m)*m*g*l*sin(theta))/denom; end

2.2 初始条件测试

设置初始角度θ=5°,观察无控制(u=0)时的系统响应:

  • 摆杆会迅速倒下,验证了系统的不稳定性
  • 小车由于动量守恒会产生往复运动

3. 平衡点线性化与状态空间模型

3.1 线性化处理

在平衡点(θ=0)附近进行泰勒展开近似: $$ \sinθ ≈ θ, \cosθ ≈ 1, \dot{θ}^2 ≈ 0 $$

得到线性化方程: $$ \begin{bmatrix} M+m & ml \ ml & I+ml^2 \end{bmatrix} \begin{bmatrix} \ddot{x} \ \ddot{\theta} \end{bmatrix} = \begin{bmatrix} u \ mglθ \end{bmatrix} $$

3.2 状态空间表达

定义状态变量: $$ \mathbf{x} = [x \quad \dot{x} \quad θ \quad \dot{θ}]^T $$

推导得到状态空间方程: $$ \dot{\mathbf{x}} = \begin{bmatrix} 0 & 1 & 0 & 0 \ 0 & 0 & -0.363 & 0 \ 0 & 0 & 0 & 1 \ 0 & 0 & 15.244 & 0 \end{bmatrix} \mathbf{x} + \begin{bmatrix} 0 \ 0.4938 \ 0 \ -0.7407 \end{bmatrix}u $$

% MATLAB中建立状态空间模型 A = [0 1 0 0; 0 0 -0.363 0; 0 0 0 1; 0 0 15.244 0]; B = [0; 0.4938; 0; -0.7407]; C = eye(4); D = zeros(4,1); sys = ss(A,B,C,D);

4. 系统特性分析

4.1 能控性与能观性

% 能控性检查 Co = ctrb(A,B); rank(Co) % 输出4,系统完全能控 % 能观性检查 Ob = obsv(A,C); rank(Ob) % 输出4,系统完全能观

4.2 稳定性分析

计算系统极点:

eig(A)

结果显示有极点位于右半平面(3.9044),证实系统开环不稳定。

5. LQR控制器设计

5.1 LQR原理

线性二次型调节器通过最小化代价函数来设计最优控制: $$ J = \int_0^\infty (\mathbf{x}^TQ\mathbf{x} + u^TRu)dt $$

5.2 权重矩阵选择

经过多次调试,我发现以下权重组合效果较好:

Q = diag([10 1 100 10]); % 加大角度权重 R = 0.1; % 允许较大控制力

5.3 求解反馈矩阵

K = lqr(A,B,Q,R); % 得到 K = [-10 -12.8 -110.6 -20.3]

5.4 Simulink实现

在非线性模型中添加LQR控制器:

  1. 使用State-Space模块实现状态反馈
  2. 连接所有状态变量(实际工程中可能需要状态观测器)
  3. 测试不同初始条件下的响应

6. 参数影响与调试技巧

6.1 Q矩阵调整经验

  • 角度θ权重:主要影响摆杆稳定速度
  • 位置x权重:影响小车最终停留位置
  • 速度项权重:抑制振荡的关键参数

6.2 实际调试中的坑

  1. 控制力饱和:实际电机有出力限制,需在Simulink中添加Saturation模块
  2. 采样时间选择:数字实现时建议小于0.01s
  3. 状态不可测:实际中可能需要设计观测器

7. 进阶应用:带观测器的LQR控制

当无法直接测量所有状态时,可以设计观测器。我推荐使用降阶观测器:

% 设计降阶观测器 meas_states = [1 3]; % 假设只能测量x和θ A_hat = A(~meas_states, ~meas_states); B_hat = B(~meas_states); L = place(A_hat', A(meas_states, ~meas_states)', [-10 -15])';

在Simulink中实现时,需要注意初始状态的匹配问题,否则会出现观测误差。