MATLAB - 自适应 MPC(Adaptive MPC)

系列文章目录

 


前言

 


 

一、何时使用自适应 MPC

        MPC 控制使用线性时间不变 (LTI) 动态模型预测未来行为。在实践中,这种预测永远不会精确,而一个关键的调整目标就是使 MPC 对预测误差不敏感。在许多应用中,这种方法足以实现稳健的控制器性能。

        如果被控对象具有很强的非线性,或者其特性随时间变化很大,LTI 预测精度可能会大幅下降,以至于 MPC 性能变得不可接受。自适应 MPC 可通过调整预测模型以适应不断变化的运行条件来解决这一问题。正如模型预测控制工具箱(Model Predictive Control Toolbox™)软件所实现的那样,自适应 MPC 使用固定的模型结构,但允许模型参数随时间变化。理想情况下,只要控制器需要预测(在每个控制间隔开始时),它就会使用适合当前条件的模型。

        在为控制系统的平均或最可能的运行条件设计出 MPC 控制器后,就可以在此基础上实施自适应 MPC 控制器。有关设计初始控制器的信息,请参阅控制器创建。

        在每个控制间隔,自适应 MPC 控制器都会更新被控对象模型和额定条件。一旦更新,模型和条件将在预测范围内保持不变。如果可以预测被控对象和标称条件在未来的变化情况,则可以使用时变 MPC 来指定一个在预测范围内变化的模型。

        控制非线性或时变设备的另一种方法是使用增益调度 MPC 控制。请参阅增益调度 MPC。

二、 被控对象模型

        作为自适应 MPC 基础的被控对象模型必须是一个 LTI 离散时、状态空间模型。有关创建和修改此类系统的信息,请参阅数值线性时不变模型或线性化基础(Simulink 控制设计)。被控对象模型结构如下:

eq?%24%5Cbegin%7Barray%7D%7Bc%7D%7B%7Bx%28k+1%29%3DA%20x%28k%29+B_%7Bu%7Du%28k%29+B_%7B%5Cnu%7D%5Cnu%28k%29+B%20_d%20d%28k%29%7D%7D%5C%5C%20%7B%7By%28k%29%3DC%20x%28k%29+D_%7B%5Cnu%7D%5Cnu%28k%29+D_%20d%20d%28k%29.%7D%7D%5Cend%7Barray%7D%24

这里,矩阵 A、Bu、Bv、Bd、C、Dv 和 Dd 是可以随时间变化的参数。表达式中的其他变量为

  • k - 时间指数(当前控制间隔)。
  • x - nx 被控对象模型状态。
  • u - nu 个受控输入(MV)。这是由 MPC 控制器调整的一个或多个输入。
  • v - nv 测量干扰输入。
  • d - nd 未测量的干扰输入。
  • y - ny 个被控对象输出,包括 nym 个测量输出和 nyu 个未测量输出。输出总数 ny = nym + nyu。同时,nym ≥ 1(至少有一个测量输出)。

自适应 MPC 控制中对被控对象模型的其他要求是

  • 采样时间 (Ts) 是一个常数,与 MPC 控制间隔相同。
  • 时间延迟(如有)作为离散状态吸收(例如,请参阅控制系统工具箱™ absorbDelay 函数)。
  • nx、nu、ny、nd、nym 和 nyu 都是常数。
  • 自适应 MPC 禁止从任何受控变量直接馈入任何被控对象的输出。因此,上述模型中 Du = 0。
  • 输入和输出信号配置保持不变。

有关为 MPC 控制创建工厂模型的更多详情,请参阅线性工厂规范。

三、标称运行点

        传统的 MPC 控制器包含一个标称工作点,在此点上适用于被控对象模型,例如将非线性模型线性化以获得 LTI 近似值的条件。控制器的 Model.Nominal 属性包含此信息。

        在自适应 MPC 中,随着时间的推移,您应该更新标称运行点,使其与更新后的工厂模型保持一致。

您可以根据与标称条件的偏差来编写被控对象模型:

eq?%24%5Cbegin%7Barray%7D%7Bc%7D%7B%7Bx%28k+1%29%3D%5Coverline%7B%7B%7Bx%7D%7D%7D+A%28x%28k%29-%5Coverline%7B%7B%7Bx%7D%7D%7D%29+B%28u_%7Bt%7D%28k%29-%5Coverline%7B%7B%7Bu%7D%7D%7D_%7Bt%7D%29+%5Coverline%7B%7B%7B%5CDelta%20x%7D%7D%7D%7D%7D%5C%5C%20%7B%7By%28k%29%3D%5Coverline%7B%7B%7By%7D%7D%7D+C%28x%28k%29-%5Coverline%7B%7B%7Bx%7D%7D%7D%29+D%28u_%7Bt%7D%28k%29-%5Coverline%7B%7B%7Bu%7D%7D%7D_%7Bt%7D%29.%7D%7D%5Cend%7Barray%7D%24

这里,矩阵 A、B、C 和 D 是要更新的参数矩阵。 ut 是综合的被控对象输入变量,由上文定义的 u、v 和 d 变量组成。需要更新的额定条件为

 - nx 名义状态

 - nx 名义状态增量

 - 名义输入

 - 名义输出

 

四、状态估计

        默认情况下,MPC 使用静态卡尔曼滤波器 (KF) 更新控制器状态,其中包括 nxp 被控对象模型状态、nd (≥ 0) 干扰模型状态和 nn (≥ 0) 测量噪声模型状态。默认情况下,MPC 控制器会在初始化过程中计算这两个增益矩阵。它们取决于被控对象、干扰和噪声模型参数,以及对驱动干扰和噪声模型的随机噪声信号的假设。有关传统 MPC 状态估计的更多详情,请参阅控制器状态估计。

        自适应 MPC 使用卡尔曼滤波器,在每个控制间隔调整增益 L 和 M,以保持与更新的被控对象模型一致。这就是线性时变卡尔曼滤波器 (LTVKF):

eq?%24%5Cbegin%7Barray%7D%7Bl%20c%20l%7D%7B%7BL_%7Bk%7D%3D%5Cleft%28A_%20k%20P_%7B%7Bk%7D%7Ck-1%7DC_%7B%7Bm%7D%2Ck%7D%5ET+N%5Cright%29%5Cleft%28C%20_%7Bm%2Ck%7D%20P_%7B%7Bk%7D%7Ck-1%7DC_%7B%7Bm%7D%2Ck%7D%5ET+R%5Cright%29%5E%7B-1%7D%7D%7D%5C%5C%20%7B%7BM_%7Bk%7D%3DP_%7B%7Bk%7D%7Ck-1%7DC_%7B%7Bm%7D%2Ck%7D%5ET%5Cleft%28C_%7B%20m%2Ck%7D%20P_%7B%7Bk%7D%7Ck-1%7DC_%7B%7Bm%7D%2Ck%7D%5ET+R%5Cright%29%5E%7B-1%7D%7D%7D%5C%5C%20%7B%7BP_%7B%7Bk%7D+1%7Ck%7D%3DA_%7Bk%7DP_%7B%7Bk%7D%7Ck-1%7DA_%7Bk%7D%5E%7BT%7D-%5Cleft%28A%20_k%20P_%7B%7Bk%7D%7Ck-1%7DC_%7B%7Bm%7D%2Ck%7D%5ET+N%5Cright%29L_%7Bk%7D%5E%7BT%7D+Q.%7D%7D%5Cend%7Barray%7D%24

        这里,Q、R 和 N 是常数协方差矩阵,定义与 MPC 状态估计相同。Ak 和 Cm,k 是整个控制器状态的状态空间参数矩阵,其定义与传统 MPC 相同,但受被控对象模型影响的部分更新至时间 k。最后,Lk 和 Mk 是更新后的 KF 增益矩阵。有关传统 MPC 中使用的 KF 公式的详情,请参阅控制器状态估计。默认情况下,初始条件 P0|-1 是模型更新前的静态 KF 解决方案。

        KF 增益和状态误差协方差矩阵取决于模型参数以及导致 Q、R 和 N 矩阵恒定的假设。如果被控对象模型恒定,则 Lk 和 Mk 的表达式会收敛到传统 MPC 中使用的等效静态 KF 解决方案。

        控制器状态估计中描述的 k 时控制器状态演化方程与传统 MPC 的 KF 公式相同,但估计器增益和状态空间矩阵更新为 k 时。

        您可以选择使用 MPC 控制器外部的程序更新控制器状态,然后在每个控制瞬时 k 将更新后的状态提供给 MPC。

 

你可能感兴趣的:(matlab,开发语言,机器人,自动驾驶,机器人控制,MPC,自适应控制)