3. 使用Simulink进行一阶倒立摆LQR控制

使用Simulink进行一阶倒立摆LQR控制 学习卡片

一阶倒立摆的线性化模型

一阶倒立摆(小车-摆杆系统)的典型状态变量取为:小车位置 x、小车速度 ẋ、摆杆角度 θ(竖直向上为 0)、摆杆角速度 θ̇。在平衡点 θ≈0 附近做小角度线性化(sinθ≈θ,cosθ≈1,忽略 θ̇² 项),可得线性状态空间模型:

状态: x = [x; ẋ; θ; θ̇]
输入: u = 小车水平推力 F

A = [0  1        0            0;
     0  0   -m*g/M          0;
     0  0        0            1;
     0  0  (M+m)*g/(M*l)     0]

B = [0; 1/M; 0; -1/(M*l)]

其中 M=小车质量, m=摆杆质量, l=摆杆质心到转轴距离, g=9.81

取教学示例参数:M=0.5 kg,m=0.2 kg,l=0.3 m,g=9.81 m/s²。代入后 A 中关键项为 -m*g/M=-3.924,(M+m)*g/(M*l)=45.78,B 中 1/M=2,-1/(M*l)=-6.667。该模型在 θ 较小时有效,是 LQR 设计的基础。

一阶倒立摆 LQR 控制信号链与状态反馈结构 参考输入 x_ref, θ_ref=0 − LQR 增益 K u = −K·x K=[k1 k2 k3 k4] 倒立摆对象 ẋ = Ax + Bu y = Cx (线性化模型) 状态输出 x, ẋ, θ, θ̇ 全状态反馈(4 个状态量均需可测或由观测器估计) LQR 权重矩阵 Q = diag(q_x, q_ẋ, q_θ, q_θ̇) R = 标量(推力代价) 设计目标 θ → 0(摆杆稳定) x → x_ref(小车定位)

LQR 控制器设计与 Simulink 实现

LQR 通过最小化代价函数 J=∫(xᵀQx+uᵀRu)dt 求取最优增益 K=R⁻¹BᵀP,其中 P 由代数 Riccati 方程 AᵀP+PA−PBR⁻¹BᵀP+Q=0 解出。在 MATLAB 中可直接用 lqr(A,B,Q,R) 求解。以下给出完整可运行脚本,先建立模型、计算增益,再在 Simulink 中搭建闭环。

% 一阶倒立摆 LQR 设计脚本(MATLAB)
M = 0.5; m = 0.2; l = 0.3; g = 9.81;

A = [0 1 0 0;
     0 0 -m*g/M 0;
     0 0 0 1;
     0 0 (M+m)*g/(M*l) 0];
B = [0; 1/M; 0; -1/(M*l)];
C = eye(4); D = zeros(4,1);

% 权重选择:优先稳定摆杆,其次定位小车
Q = diag([10, 1, 100, 1]);   % q_θ 最大,强调摆角收敛
R = 0.1;                      % 推力代价较小,允许较大控制量

K = lqr(A,B,Q,R);
disp('LQR 增益 K ='); disp(K);

% 闭环极点验证
Acl = A - B*K;
disp('闭环极点 ='); disp(eig(Acl));

运行后得到一组示例增益(随参数与权重不同而变化):K ≈ [-10.0, -12.6, 71.4, 13.9]。闭环极点实部均为负,说明系统稳定。接下来在 Simulink 中搭建:

  1. 新建模型,拖入 State-Space 模块,填入 A,B,C,D,初始状态设为 [0;0;0.1;0](摆杆初始偏 0.1 rad)。
  2. 拖入 Gain 模块,值设为 -K,实现 u=−Kx。
  3. 用 Mux 将 4 路状态合成向量送入 Gain,Gain 输出接 State-Space 的 u 输入。
  4. State-Space 输出接 Scope,同时用 To Workspace 记录 x 与 θ。
  5. 仿真时间设为 5 s,求解器 ode45,步长自动。
若摆杆初始角度较大(如 0.3 rad),线性化误差会明显增大,可能出现收敛变慢或振荡。此时可减小初始角度,或改用非线性模型验证。

仿真结果判读与调参

运行仿真后观察 Scope:摆角 θ 应从 0.1 rad 快速衰减到 0,小车位置 x 会先向一侧移动以“接住”摆杆,随后回到 0 附近。若 θ 收敛但 x 偏离过大,说明位置权重 q_x 偏低;若控制量 u 饱和或抖动,说明 R 太小。可按以下顺序调整:

现象原因调整
θ 收敛慢q_θ 偏小增大 q_θ(如 100→500)
x 回中慢q_x 偏小增大 q_x(如 10→50)
u 幅值过大R 偏小增大 R(如 0.1→1)
高频抖动q_θ̇ 偏小适当增大 q_θ̇
LQR 要求全状态可测。若实际系统只能测小车位置和摆角,需在 Simulink 中增加观测器(如 Luenberger 观测器)估计 ẋ 与 θ̇,否则反馈量不完整会导致控制失效。

可直接使用的 LQR 调参检查表

检查项通过条件不通过时的动作
闭环极点实部全部 < 0检查 Q 是否正定、R>0
摆角稳态误差|θ| < 0.01 rad增大 q_θ
小车位置稳态误差|x| < 0.02 m增大 q_x
控制量峰值|u| < 10 N(示例)增大 R
仿真步长ode45 自动,无警告减小最大步长或改用 ode23