Main Content

lqr

线性二次调节器 (LQR) 设计

说明

[K,S,P] = lqr(sys,Q,R,N) 计算连续时间或离散时间状态空间模型 sys 的最优增益矩阵 K、相关联代数黎卡提方程的解 S 以及闭环极点 PQR 分别是状态和输入的权重矩阵。交叉项矩阵 N 在省略时设置为零。

示例

[K,S,P] = lqr(A,B,Q,R,N) 使用连续时间状态空间矩阵 AB 计算最优增益矩阵 K、相关联代数黎卡提方程的解 S 和闭环极点 P。此语法仅对连续时间模型有效。对于离散时间模型,请使用 dlqr

示例

示例

全部折叠

pendulumModelCart.mat 包含小车上倒立摆的状态空间模型,其输出为小车位移 x 和摆角 θ。控制输入 u 是作用于小车的水平力。

[x˙x¨θ˙θ¨]=[01000-0.13000010-0.5300][xx˙θθ˙]+[0205]uy=[10000010][xx˙θθ˙]+[00]u

首先,将状态空间模型 sys 加载到工作区。

load('pendulumCartModel.mat','sys')

由于输出为 xθ,并且只有一个输入,因此使用布莱森法则确定 QR

Q = [1,0,0,0;...
    0,0,0,0;...
    0,0,1,0;...
    0,0,0,0];
R = 1;

使用 lqr 求增益矩阵 K。由于未指定 NlqrN 设置为 0。

[K,S,P] = lqr(sys,Q,R)
K = 1×4

   -1.0000   -1.7559   16.9145    3.2274

S = 4×4

    1.5346    1.2127   -3.2274   -0.6851
    1.2127    1.5321   -4.5626   -0.9640
   -3.2274   -4.5626   26.5487    5.2079
   -0.6851   -0.9640    5.2079    1.0311

P = 4×1 complex

  -0.8684 + 0.8523i
  -0.8684 - 0.8523i
  -5.4941 + 0.4564i
  -5.4941 - 0.4564i

虽然布莱森法则通常能提供令人满意的结果,但它往往只作为试错迭代设计过程的起点,用于根据设计需求调节闭环系统响应。

aircraftPitchModel.mat 包含飞机的状态空间矩阵,其输入为升降舵偏转角 δ,输出为飞机俯仰角 θ

[α˙q˙θ˙]=[-0.31356.70-0.0139-0.4260056.70][αqθ]+[0.2320.02030][δ]y=[001][αqθ]+[0][δ]

对于 0.2 弧度的阶跃参考输入,请考虑采用以下设计标准:

  • 上升时间小于 2 秒

  • 稳定时间小于 10 秒

  • 稳态误差小于 2%

将模型数据加载到工作区。

load('aircraftPitchModel.mat')

定义状态代价加权矩阵 Q 和控制加权矩阵 R。通常,您可以使用布莱森法则来定义初始加权矩阵 QR。对于此示例,假设输出向量为 C,矩阵 Q 的缩放因子为 2,并将 R 选为 1。R 是标量,因为系统只有一个输入。

R = 1
R = 
1
Q1 = 2*C'*C
Q1 = 3×3

     0     0     0
     0     0     0
     0     0     2

使用 lqr 计算增益矩阵。

[K1,S1,P1] = lqr(A,B,Q1,R);

用生成的增益矩阵 K1 检查闭环阶跃响应。

sys1 = ss(A-B*K1,B,C,D);
step(sys1)

由于此响应不符合设计目标,请将缩放因子增加到 25,计算增益矩阵 K2,并检查增益矩阵 K2 的闭环阶跃响应。

Q2 = 25*C'*C
Q2 = 3×3

     0     0     0
     0     0     0
     0     0    25

[K2,S2,P2] = lqr(A,B,Q2,R);
sys2 = ss(A-B*K2,B,C,D);
step(sys2)

MATLAB figure

在闭环阶跃响应图中,上升时间、稳定时间和稳态误差符合设计目标。

输入参数

全部折叠

动态系统模型,指定为 ss 模型对象。

状态矩阵,指定为一个 n×n 矩阵,其中 n 是状态数。

输入-状态矩阵,指定为一个 n×m 输入-状态矩阵,其中 m 是输入数。

状态-代价加权矩阵,指定为一个 n×n 矩阵,其中 n 是状态数。您可以用布莱森法则来设置 Q 的初始值,由下式给出:

Qi,i=1maximum acceptable value of (errorstates)2, i{1,2,...,n}Q=[Q1,1000Q2,200000Qn,n]

此处,n 是状态数。

输入-代价加权矩阵,指定为标量或与 D'D 大小相同的矩阵。此处,D 是馈通状态空间矩阵。您可以用布莱森法则来设置 R 的初始值,由下式给出:

Rj,j=1maximum acceptable value of (errorinputs)2, j{1,2,...,m}R=[R1,1000R2,200000Rm,m]

此处,m 是输入数。

可选交叉项矩阵,指定为矩阵。如果未指定 N,则默认情况下 lqrN 设置为 0。

输出参量

全部折叠

闭环系统的最优增益,以大小为 n 的行向量形式返回,其中 n 是状态数。

相关联代数黎卡提方程的解,以 n×n 矩阵形式返回,其中 n 是状态数。换句话说,S 与状态空间矩阵 A 的维度相同。有关详细信息,请参阅 icareidare

闭环系统的极点,以大小为 n 的列向量形式返回,其中 n 是状态数。

限制

输入数据必须满足以下条件:

  • 对组 (A,B) 必须是可稳定的。

  • R 必须为正定矩阵。

  • [QNNTR] 必须为半正定矩阵(等效于 QNR1NT0)。

  • (QNR1NT,ABR1NT) 在虚轴(或离散时间的单位圆)上必须没有无法观测的模态。

提示

  • lqr 支持描述符形式的模型,其中包含非奇异矩阵 Elqr 的输出 S 是等效显式状态空间模型的代数黎卡提方程的解:

    dxdt=E1Ax+E1Bu

算法

对于连续时间系统,lqr 计算最小化二次代价函数的状态反馈控制 u=Kx

J(u)=0(xTQx+uTRu+2xTNu)dt

(受限于系统动态特性 x˙=Ax+Bu)。

除了状态反馈增益 Klqr 还返回相关联代数黎卡提方程的解 S

ATS+SA(SB+N)R1(BTS+NT)+Q=0

以及闭环极点 P = eig(ABK)。增益矩阵 K 是使用下式从 S 派生的:

K=R1(BTS+NT).

对于离散时间系统,lqr 计算最小化

J=n=0{xTQx+uTRu+2xTNu}

的状态反馈控制 un=Kxn

(受限于系统动态特性 xn+1=Axn+Bun)。

在任何情况下,当您省略交叉项矩阵 N 时,lqr 都会将 N 设置为 0。

版本历史记录

在 R2006a 之前推出