线性二次型调节器 (Linear-Quadratic Regulator, LQR) 是一种基于模型的最优控制方法,广泛应用于现代控制理论中。其目标是为线性系统设计一个反馈控制器,使得二次型性能指标(代价函数) 达到最小值。

一、问题描述

LQR 控制问题由两部分构成:描述系统行为的线性动态模型和定义优化目标的二次型代价函数。

1. 线性动态系统

系统的动态特性由一个离散时间、线性的状态空间方程来描述:
其中:
  • 是系统在时刻 状态向量
  • 是系统在时刻 控制输入向量
  • 状态矩阵,描述了系统内部状态的演变。
  • 输入矩阵,描述了控制输入如何影响系统状态。

2. 二次型代价函数

为了评估控制性能,我们定义一个二次型的代价函数 。对于调节问题(即目标是使系统状态稳定在零点),代价函数通常写为:
其中:
  • 是控制过程的终端时刻
  • 第一项 终端代价,用于惩罚系统在终点时偏离目标状态(零向量)的程度。
  • 第二项是过程代价的累加和,其中:
    • 惩罚在过程中的状态偏差。 惩罚在过程中的状态偏差。
    • 惩罚控制能量的消耗。 惩罚控制能量的消耗。
  • S, Q, R权重矩阵,由设计者根据控制需求指定。它们决定了状态误差和控制成本之间的权衡。
    • 为了保证代价函数存在最小值,要求 S 和 Q 为半正定矩阵 (),R 为正定矩阵 ( for )。R 的正定性确保了控制成本是严格正的,并且其逆矩阵存在。为了保证代价函数存在最小值,要求 S 和 Q 为半正定矩阵 (),R 为正定矩阵 ( for )。R 的正定性确保了控制成本是严格正的,并且其逆矩阵存在。
LQR 的核心目标就是找到一组最优的控制输入序列 ,使得代价函数 最小。

二、LQR 求解方法:动态规划

LQR 问题可以通过动态规划 (Dynamic Programming) 的思想,采用逆向递推的方式高效求解。其核心是从终端时刻 开始,一步步向后推导,直到初始时刻。

1. 最终时刻 k = N

在终端时刻 ,控制过程已经结束,没有可以施加的控制输入。因此,此处的代价是固定的,即最优代价。
为了方便递推,我们定义一个新的矩阵序列 ,并进行初始化:
这里的索引 [0] 代表"距离终端还有0步"。因此,上式可以写为

2. 时刻 k = N-1

在时刻 ,我们需要选择一个最优的控制 ,以最小化从此刻到终端的总代价。该总代价包括 时刻的运行代价和 时刻的终端代价。
代入:
为了找到使 最小的 ,我们对其求偏导数并令其为零:
NOTE THAT:
矩阵求导的相关内容参见
矩阵的导数运算
的内容。
整理可得:
解出最优控制
这是一个关键结果,它表明最优控制是当前状态 线性反馈。我们可以定义反馈增益矩阵
则最优控制律为:

3. 归纳与递推 (Riccati 方程)

现在,我们将最优控制 代回代价函数 ,得到从 时刻开始的最小代价 。经过整理,可以证明这个最小代价也是状态 的二次型:
这里的 (代表"距离终端还有1步"的代价矩阵) 由 递推得到。
通过对任意时刻 进行归纳,我们可以得到一组通用的递推公式。假设我们已经知道了 ,即从 时刻到终端的最小代价为 。那么在 时刻,我们可以通过与 完全相同的推导,得到如下结果:
  1. 最优控制律 (Optimal Control Law):
  1. 反馈增益 (Feedback Gain):
  1. 离散 Riccati 方程 (Discrete Riccati Equation):
或者写成更常见的形式:
这组方程构成了 LQR 问题的核心解法。

三、LQR 求解步骤总结

求解有限时域 LQR 问题的过程可以分为"线下计算"和"线上控制"两步。

第一步:离线逆向计算 (Offline Backward Calculation)

在控制器实际运行之前,我们可以预先计算出所有的反馈增益。
  1. 初始化:
  1. 逆向递推: 对于 ,依次进行如下计算:
      • 计算反馈增益:
      • 求解 Riccati 方程: (此处使用了Riccati方程的另一种等价形式)
      • 将计算出的增益矩阵 存储起来。

第二步:在线正向控制 (Online Forward Control)

当控制器开始运行时,在每个时间步
  1. 测量或估计当前系统的状态
  1. 计算最优控制输入:使用预先计算好的增益矩阵 ,通过状态反馈律得到控制输入:
  1. 施加控制:将 应用于系统。
值得指出的是,离线逆向计算和在线正向控制是两个独立的过程
离线计算的部分只是返回F_gain;在下一节的编程示例中细细体会!
Loading...