主要内容

生成代码并将控制器部署到实时目标

模型预测控制工具箱™软件为Matlab设计的控制器提供代码生成功能®或者模万博1manbetx拟®

代码生成马铃薯

在MATLAB中设计MPC控制器后,您可以使用C代码使用Matlab Coder™并部署它以进行实时控制。

要生成用于计算最佳MPC控制的代码,用于隐式或显式线性MPC控制器的移动:

  1. 从MPC控制器或使用显式MPC控制器生成数据结构getcodegenerationData.

  2. 要验证控制器是否产生预期的闭环结果,请使用它mpcmovecodegeneration.代替MPCMOVE.

  3. 生成代码mpcmovecodegeneration.使用Codegen.(MATLAB编码器)。这一步需要Matlab编码器软件。

例如,看到生成代码来计算Matlab中的最佳MPC移动

您还可以为使用默认值生成非线性MPC控制器的代码粉刺具有SQP算法的求解器。为了生成用于计算非线性MPC控制器的最佳控制的代码:

  1. 使用非线性MPC控制器生成数据结构getcodegenerationData.

  2. 要验证控制器是否产生预期的闭环结果,请使用它nlmpcmovecodegeneration.代替nlmpcmove.

  3. 生成代码nlmpcmovecodegeneration.使用Codegen.(MATLAB编码器)。这一步需要Matlab编码器软件。

代码生成万博1manbetx

在使用任何MPC块中设计Simulink中的控制器后,您可以生成万博1manbetx代码并部署它以进行实时控制。您可以将控制器部署到以下产品支持的所有目标:s manbetx 845万博1manbetx

  • 万博1manbetxSimulink编码器

  • 嵌入式编码器®

  • 万博1manbetxSimulink PLC编码器™

  • 万博1manbetxSimulink Real-Time™

您可以为任何模型预测控制工具箱Simulink块生成代码。万博1manbetx

控制器的类型
隐式MPC控制器

MPC控制器

显式MPC控制器

显式MPC控制器

增益预定的MPC控制器

多个MPC控制器

多个显式MPC控制器

自适应MPC控制器

自适应MPC控制器

MPC控制器用于汽车应用

自适应巡航控制系统

车道保持辅助系统

路径跟随控制系统

非线性MPC控制器使用粉刺与SQP.

非线性MPC控制器

有关生成代码的更多信息,请参阅使用Simulink编码器的仿真和代码生成万博1manbetx使用Simulink PLC编码器模拟和结构化文本生成万博1manbetx

笔记

MPC控制器显式MPC控制器自适应MPC控制器, 和非线性MPC控制器块使用该块使用Matlab功能(万博1manbetxSimulink)堵塞。要查看结构,请右键单击该块,然后选择面具>看看面膜。然后,打开MPC.下面的子系统。

笔记

如果您的非线性MPC控制器使用可选参数,您还必须生成代码公共汽车创造者块连接到参数输入端口非线性MPC控制器堵塞。要这样做,放置非线性MPC控制器公共汽车创造者子系统内的块,并为该子系统生成代码。

为线性MPC控制器生成CUDA代码

你可以生成cuda®使用GPU Coder™的MPC控制器代码。有关支持的GPU的更多信息,请参阅万博1manbetxGPU通万博1manbetx过发布支持(并行计算工具箱)。有关安装和设置先决条件的更多信息,请参阅安装先决品产品s manbetx 845(GPU编码器)设置先决条件产品s manbetx 845(GPU编码器)

要在MATLAB中生成和使用GPU代码:

  1. 使用一个设计线性控制器MPC.目的。

  2. 使用Linear MPC控制器生成核心,状态和在线数据的结构getcodegenerationData.功能。

  3. 可选地使用迭代地模拟闭环mpcmovecodegeneration.函数和上一步中创建的数据结构。

  4. 使用该选项对象创建编码器配置选项对象Coder.gpuconfig.功能,配置代码生成选项。

  5. 为此生成代码mpcmovecodegeneration.使用函数Codegen.函数和编码器配置选项对象。这样做生成一个新功能,它使用GPU上运行的代码。

  6. 使用新生成的函数和数据结构模拟您的控制器。

有关在MATLAB中使用GPU代码的示例,请参阅使用GPU在Matlab中计算MPC移动

您可以从中生成和使用GPU代码MPC控制器自适应MPC控制器, 或者显式MPC控制器块。

要从包含任何这些块中的任何一个Simulink模型生成G万博1manbetxPU代码,请单击“打开”配置参数“对话框对话框模型设置。然后,在里面代码生成部分,选择生成GPU代码

有关如何为GPU代码生成配置模型的详细信息,请参阅使用GPU编码器的Simulink模型生成万博1manbetx代码(GPU编码器)

实时环境中的采样率

控制器可以在实时环境中实现的采样率是系统依赖的。例如,对于运行典型的小MIMO控制应用程序万博1manbetxSimulink实时,采样时间可以是线性MPC的1-10 ms,对于非线性MPC为100-1000 ms。为了确定采样时间,首先测试一个较少的激进控制器,其采样率在目标上产生可接受的性能。接下来,降低采样时间并监视控制器的执行时间。只要在正常植物操作条件下,优化在每个采样期内完全完成优化时,您可以进一步降低采样时间。要减少采样时间,还可以考虑使用:

  • 明确的MPC。虽然显式MPC控制器具有更快的执行时间,但它们也具有更大的内存占用空间,因为它们存储预先计算的控制法。有关更多信息,请参阅明确的MPC设计

  • 在指定数量的最大求解器迭代之后的次优QP解决方案。有关更多信息,请参阅次优QP解决方案

小费

较低的控制器采样时间不一定提供更好的性能。事实上,您想选择足够小的采样时间,以为您提供良好的性能,但没有更小。对于相同的预测时间,更小的采样时间导致更大的预测步骤,这反过来产生更大的存储空间和更复杂的优化问题。

生成C代码的QP问题施工

在每个控制间隔处,隐式或自适应MPC控制器构造一个新的QP问题,它被定义为:

m 一世 N X 1 2 X H X + F X

受线性不等式限制

一种 X ≤. B.

在哪里

  • X是解决方案矢量。

  • H是黑森州的矩阵。

  • 一种是线性约束系数的矩阵。

  • FB.是矢量。

在生成的C代码中,使用以下矩阵来提供H一种F, 和B.。根据MPC控制器的类型和配置,这些矩阵在每个控制间隔处是恒定的或再生。

恒定矩阵 尺寸 目的 隐含MPC 具有在线权重调整的隐式MPC 自适应MPC或LTV MPC
Hinv. Nm-经过-Nm 黑森州矩阵的逆转,H 不变 再生 再生
Linv. Nm-经过-Nm 逆三角形尖弦分解的反向H
AC. NC-经过-Nm 线性约束系数,一种 不变
kx. NXQP.-经过-Nm-1) 用来生成F 再生
kr. P.*Ny-经过-Nm-1)
ku1. Nm-经过-Nm-1)
kv. Nm+1)*(P.+1)-经过-Nm-1)
kut. P.*Nm-经过-Nm-1)
MLIM NC-By-1 用来生成B. 不变 常量,除了有自定义约束
MX. NC-经过-NXQP. 再生
mu1. NC-经过-Nm
m NC-经过-Nm+1)*(P.+1)

这里:

  • P.是预测的地平线。

  • Nm是操纵变量的数量。

  • Nm是测量障碍的数量。

  • Ny是输出变量的数量。

  • Nm是优化变量的数量(m*Nm+1, 在哪里m是控制地平线)。

  • NXQP.是用于QP问题的状态数量;也就是说,植物状态和扰动模型国家的总数。

  • NC是限制的总数。

在每个控制间隔处,所生成的C代码计算FB.作为:

F = K. X * X 问: + K. R. * R. P. + K. 1 * m L. + K. V. * V. P. + K. T. * T.

B. = - m L. 一世 m + m X * X 问: + m 1 * m L. + m V. * V. P.

在哪里

  • X问:是卡尔曼滤波器估计的植物和干扰模型国家的载体。

  • mL.是操纵变量从先前的控制间隔移动。

  • T.是操纵的可变目标。

  • V.P.是跨越预测地平线的测量干扰信号的序列。

  • R.P.是跨预测地平线的参考信号的序列。

笔记

在MATLAB中生成代码时,getcodegenerationData.命令生成这些矩阵并返回它们configdata.

定制QP求解器的代码生成

您可以为使用C或MATLAB代码中写入的自定义QP求解器生成线性MPC控制器的代码。控制器调用此求解器代替每个控制间隔的内置QP求解器。

例如,看到使用自定义QP求解器模拟和生成MPC控制器的代码。有关自定义QP求解器的更多信息,请参阅定制QP求解器

有关使用强制专业求解器的信息,请参阅使用Embotech Forces Pro Solvers实现MPC控制器

也可以看看

职能

相关话题