主要内容

使用Embotech FORCESPRO求解器实现MPC控制器

你可以使用FORCESPRO的实时嵌入式优化软件工具Embotech AG),模拟和生成使用模型预测控制工具箱™软件设计的线性和非线性MPC控制器的代码。Embotech提供了一个插件,该插件利用了模型预测控制工具箱软件的设计功能和FORCESPRO的计算性能。使用该插件,您可以生成自定义求解器,允许部署在实时硬件上,并根据您特定的MPC问题进行高度优化,以实现令人满意的实时性能。

有关使用FORCESPRO MPC插件的更多信息,请参阅FORCESPRO文档.也可以在MATLAB中使用FORCESPRO求解器进行其他优化应用®和仿真软万博1manbetx件®.有关更多信息,请参见FORCESPRO第三方产品和服务s manbetx 845

有关在MATLAB和Simulink中为模型预测控制工具箱控制器生成代码的信息,请参见万博1manbetx生成代码并将控制器部署到实时目标

二次规划(QP)求解器

在MATLAB中设计并模拟一个线性时不变MPC控制器(预测模型在运行时不改变的控制器)Embotech FORCESPRO QP求解器,请遵循以下步骤。

  1. 设计一个线性控制器货币政策委员会对象。

  2. 为所使用的求解器创建自定义求解器生成选项对象mpcToForcesOptions使用字符串输入参数“稀疏”(构建稀疏QP问题),或者“密集”(构建一个密集的QP问题)。使用“稀疏”如果你的MPC问题有很长的预测范围和大量的约束条件。

  3. 生成自定义求解器和包含核心、状态和在线数据结构的相关变量mpcToForces

  4. 如果需要,在包含状态数据结构的变量中调整控制器状态,并在包含在线数据结构的变量中指定运行时信号。

  5. 通过迭代调用模拟系统mpcmoveFORCES.对于稀疏QP问题,将自动生成一个MEX文件,并用于加速模拟。

您还可以生成产品代码。例如,从生成一个MEX文件mpcmoveForces用一个密集的QP公式,其中变量coredatastatedata,onlinedata是由mpcToForces,你可以使用下面的代码:

%配置代码生成创建一个MATLAB可执行文件CFG = code .config(墨西哥人的);%或LIB, EXE等。cfg。ConstantInputs =“IgnoreValues”创建一个名为myMex的可执行文件codegen (“配置”cfg,“mpcmoveForces”“o”“myMex”...“参数”,{code . constant (coredata), statedata, onlinedata});%通过调用myMex可执行文件来计算被操作的变量[mv, statedata, info] = myMex(coredata, statedata, onlinedata)

在Simulink中设计并仿真了一个线性时不变MPC控制器万博1manbetxEmbotech FORCESPRO QP求解器求解器,遵循这些步骤。

  1. 设计一个线性控制器货币政策委员会对象。

  2. 为所使用的求解器创建自定义求解器生成选项对象mpcToForcesOptions使用字符串输入参数“稀疏”(构建稀疏QP问题),或者“密集”(构建一个密集的QP问题)。使用“稀疏”如果你的MPC问题有很长的预测范围和大量的约束条件。

  3. 生成自定义求解器和相关变量,其中包含使用的核心、状态和在线数据的结构mpcToForces

  4. 添加适当的块到你的模型:

    • 对于稀疏QP问题,打开Simulink库浏览器,找到万博1manbetxFORCES MPC(稀疏QP)挡在FORCESPRO MPC块分类,并将其添加到您的模型。

    • 对于密集的QP问题,打开Simulink库浏览器,找到万博1manbetxMPC控制器挡在模型预测控制工具箱分类,并将其添加到您的模型。

  5. 在block对话框中指定结构变量:

    • 对于稀疏QP问题,指定包含核心和状态数据结构的变量。

    • 对于密集QP问题,指定货币政策委员会对象。

  6. 模拟系统。

  7. 当需要时,直接从模型或块生成代码。

有关如何使用模型预测控制工具箱中的QP求解器的详细信息,请参见QP解决者

有关FORCESPRO QP求解器的更多信息,请参阅Embotech FORCESPRO QP求解器文档。

请注意

不支持将QP Embotech forcepro求解器用于自适应MPC控制器或具有自定义约束的MPC控制器。万博1manbetx

具体非线性规划(NLP)求解器

在MATLAB中设计并仿真了一个非线性MPC控制器Embotech forcepro NLP求解器,请遵循以下步骤。

  1. 设计了一种非线性控制器nlmpcnlmpcMultistage对象。

  2. 使用指定自定义求解器生成选项nlmpcToForcesOptions(或nlmpcMultistageToForcesOptions,如果你在上一步设计了多级控制器)。对于一个nlmpc对象,您可以选择使用顺序二次规划(SQP)求解器而不是内点(IP)求解器。如果你的非线性MPC问题有很长的预测范围和大量的约束,请使用IP求解器。为nlmpcMultistage对象只有IP解算器可用。

  3. 生成自定义求解器和相关变量,其中包含使用的核心、状态和在线数据的结构nlmpcToForces(或nlmpcMultistageToForces).

  4. 指定当前控制器状态、最后一个控制动作,并使用包含在线数据结构的变量指定其他运行时信号。

  5. 通过迭代调用模拟系统nlmpcmoveForces(或nlmpcmoveForcesMultistage).在MATLAB中自动生成两个函数的MEX文件,以加快仿真速度。

要在Simulink中使用Embotech forcepro NLP求解器设计和模拟一个非线性MPC控制器万博1manbetx,请遵循以下步骤。

  1. 设计了一种非线性控制器nlmpcnlmpcMultistage对象。

  2. 使用指定自定义求解器生成选项nlmpcToForcesOptions(或nlmpcMultistageToForcesOptions,如果你在上一步设计了多级控制器)。对于一个nlmpc对象,您可以选择使用顺序二次规划(SQP)求解器而不是内点(IP)求解器。如果你的非线性MPC问题有很长的预测范围和大量的约束,请使用IP求解器。为nlmpcMultistage对象只有IP解算器可用。

  3. 生成自定义求解器和相关变量,其中包含使用的核心、状态和在线数据的结构nlmpcToForces(或nlmpcMultistageToForces).

  4. 打开Simulin万博1manbetxk库浏览器,找到多级非线性MPC挡在FORCESPRO MPC块分类,并将其添加到您的模型。

  5. 在块对话框中指定包含核心数据结构的变量。

  6. 模拟系统。

  7. 当需要时,直接从模型或块生成代码。

您还可以如本节所述为Simulink模型生成代码万博1manbetxSimulink中的代码生成万博1manbetx

请注意

只有当状态和输出函数与MATLAB代码生成兼容时,才支持使用NLP Embotech force万博1manbetxpro求解器CasADi.此外,对于一般(即非多级)非线性MPC问题:

  • 不能使用自定义开销和约束函数。

  • 如果非线性MPC控制器使用多个可选参数,则必须将它们分组在单个列向量中,并设置模型。NumberOfParameters属性设置为1。

的示例非线性MPC块看基于非线性模型预测控制的摆锤起摆控制

相关的话题