计算最佳控制与代码生成支持移动万博1manbetx
[
计算最佳MPC控制移动,并支持部署到实时目标的代码生成。万博1manbetx使用的输入数据结构使用m
,newstateata.
] = mpcmovecodegeneration(configdata.
,stateData
,onlineData
)getcodegenerationData.
,定义MPC控制器以模拟。
mpcmovecodegeneration.
不检查输入参数是否正确的维度和数据类型。
[___,
返回关于优化结果的附加信息,包括迭代次数和目标函数成本。信息
] = mpcmovecodegeneration(___)
创建一个适当的工厂模型。
植物= RSS(3,1,1);Plant.d = 0;
指定控制器采样时间。
t = 0.1;
创建MPC控制器。
mpcobj = MPC(植物,TS);
mpc对象的“PredictionHorizon”属性是空的。尝试PredictionHorizon = 10。mpc对象的"ControlHorizon"属性为空。假设2。- - - >“权重。米anipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000. -->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000. -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.
创建代码生成数据结构。
[configdata,stateata,onlinedata] = getcodegenerationdata(mpcobj);
- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。- >将模型转换为离散时间。- >假设添加到测量的输出干扰,输出通道#1是集成的白噪声。- >“MPC”对象的“Model.Noise”属性为空。假设每个测量的输出通道上的白噪声。
将工厂状态初始化为零以匹配MPC控制器使用的默认状态。
运行闭环仿真。在每个控制间隔,更新在线数据结构并呼叫mpcmovecodegeneration.
计算最佳控制移动。
x =零(尺寸(植物,1),1);%初始化植物状态为零(|mpcObj|默认)。Tsim = 20;为了i = 1:圆形(尖/ Ts) + 1%更新工厂输出。y = plant.c * x;%更新在线数据中的测量输出。onlinedata.signals.ym = y;%更新在线数据中的参考信号。onlinedata.signals.ref = 1;%compute控制操作。[u, statedata] = mpcmoveCodeGeneration (configData, statedata onlineData);%更新工厂状态。x = plant.a * x + plant.b * u;结尾
使用MATLAB®Coder™生成MEX功能,指定configdata.
作为一个常数。
Func =.'mpcmovecodegeneration';funcoutput =.'mpcmovemex';cfg = coder.config(墨西哥人的);Cfg。DynamicMemoryAllocation ='离开';Codegen('-config'Cfg函数,'-O',funcoutput,“参数”,......{coder.constant(configdata),stateata,onlinedata});
代码成功。
configdata.
- - - - - -MPC配置参数MPC配置参数在运行时常量,指定为使用的结构getcodegenerationData.
.
请注意
使用时Codegen.
(MATLAB编码器),configdata.
必须定义为编码器.Constant.
(MATLAB编码器).
stateData
- - - - - -控制器的状态控制器在运行时的状态,指定为结构。使用。生成初始状态结构getcodegenerationData.
.有关后续控制间隔,请使用上一间隔从更新的控制器状态。一般来说,使用newstateata.
直接结构。
如果启用了自定义状态估计,则必须手动更新stateData
每个控制间隔期间的结构。有关更多信息,请参阅自定义国家估计.
stateData
有以下字段:
植物
-植物模型状态估计mpcobj.
名义植物状态(默认)|长度列向量nXP.工厂模型状态估计,指定为长度的柱矢量NXP., 在哪里NXP.是植物模型状态的数量。
请注意
如果启用自定义状态估计,请更新植物
在每个控制间隔。否则,请勿更改该字段。相反,使用其中一个返回的值getcodegenerationData.
要么mpcmovecodegeneration.
.
噪音
- 输出测量噪声模型状态估计[]
(默认)|柱矢量输出测量噪声模型状态估计,指定为长度的列向量NXN., 在哪里NXN.是噪声模型状态的数量。
请注意
如果启用自定义状态估计,请更新噪音
在每个控制间隔。否则,请勿更改该字段。相反,使用其中一个返回的值getcodegenerationData.
要么mpcmovecodegeneration.
.
篮球
- 操纵可变控制从先前的控制间隔移动mpcobj.
标称MV值(默认)|柱矢量操纵可变控制从先前的控制间隔移动,指定为长度的列向量Nm, 在哪里Nm是操纵变量的数量。
请注意
不要改变价值篮球
.始终使用任何一个返回的值getcodegenerationData.
要么mpcmovecodegeneration.
.
协方差
- 控制器状态估计的协方差矩阵用于控制器状态估计的协方差矩阵,指定为对称性N-经过-N阵列,其中N是扩展控制器州的数量;也就是说,总和NXP.,NXD., 和NXN..
如果控制器使用自定义状态估计,协方差
是空的。
请注意
不要改变价值协方差
.始终使用任何一个返回的值getcodegenerationData.
要么mpcmovecodegeneration.
.
IA.
- 主动不等式约束有效的不等式约束,其中的不等式的相等部分是真的
,指定为长度的逻辑向量米.如果IA.
(我)是真的
,那么我对于最新的QP求解解决方案,不平等是活跃的。
请注意
不要改变价值IA.
.始终使用任何一个返回的值getcodegenerationData.
要么mpcmovecodegeneration.
.
onlineData
- - - - - -在线控制器数据您必须在运行时更新的在线控制器数据,指定为具有以下字段的结构。使用初始结构使用getcodegenerationData.
.
信号
- 更新的输入和输出信号更新的输入和输出信号,指定为具有以下字段的结构:
ym.
- 测量输出测量输出,指定为长度的向量Nym., 在哪里Nym.是测量输出的数量。
默认情况下,getcodegenerationData.
集ym.
到控制器的公称测量输出值。
裁判
——输出引用输出引用,指定为以下之一:
长度的行矢量Ny, 在哪里Ny是输出的数量。
如果您使用的是使用隐式或Adaptive MPC预览的参考信号,请指定ap-经过-Ny阵列,其中p是预测视界。
默认情况下,getcodegenerationData.
集裁判
从控制器到标称输出值。
m
- 测量的障碍测量的扰动,指定为:
一排矢量长度Nm, 在哪里Nm是测量障碍的数量。
如果您使用使用隐式或Adaptive MPC使用信号预览,请指定ap-经过-Nm大批。
默认情况下,如果您的控制器具有测量的干扰,getcodegenerationData.
集m
从控制器到标称测量的扰动值。否则,此字段为空且忽略mpcmovecodegeneration.
.
mvtarget.
- 操纵变量的目标[]
(默认)|向量中定义的目标configdata.utarget.
,指定为以下之一:
长度矢量Nm, 在哪里Nm是操纵变量的数量
[]
使用定义的默认目标configdata.utarget.
使用显式MPC控制器时忽略此字段。
externalMV
-外部应用于植物的操纵变量[]
(默认)|向量在外部应用于工厂的操纵变量,指定为:
长度矢量Nm.
[]
将最优控制移动到设备上。
重量
- 更新了QP优化权重更新QP优化权值,指定为结构。如果您不希望在运行时更改调优权重,则忽略它重量
.使用显式MPC控制器时忽略此字段。
此结构包含以下字段:
y
- 输出变量调谐重量[]
(默认)|行矢量|大批输出可变调谐重量,可在运行时在运行时更换原始控制器输出权重,指定为行向量或非负值阵列。
要在整个预测范围内使用相同的权重,请指定长度的行向量Ny, 在哪里Ny是输出变量的数量。
在预测范围内随时间改变调优权值k+1时间k+p,指定一个数组Ny列和最多p行。在这里,k当前的时间是和p是预测视界。每行包含一个预测水平步骤的输出变量调优权值。如果指定小于p行,最终行中的权重用于预测地平线的剩余步骤。
如果y
是空的,[]
,则使用原MPC控制器中定义的默认权重。
u
- 操纵可变调谐重量[]
(默认)|行矢量|大批操作变量调优权值替换运行时初始控制器操作变量权值,指定为非负值的行向量或数组。
要在整个预测范围内使用相同的权重,请指定长度的行向量Nm, 在哪里Nm是操纵变量的数量。
在预测范围内随时间改变调优权值k时间k+p-1,指定阵列Nm列和最多p行。在这里,k当前的时间是和p是预测视界。每行包含一个预测地平线步骤的操纵变量调谐权重。如果指定小于p行,最终行中的权重用于预测地平线的剩余步骤。
如果u
是空的,[]
,则使用原MPC控制器中定义的默认权重。
杜
- 操纵可变速率调谐重量[]
(默认)|行矢量|大批被操纵的可变速率调优权值替换运行时初始控制器被操纵的可变速率权值,指定为非负值的行向量或数组。
要在整个预测范围内使用相同的权重,请指定长度的行向量Nm, 在哪里Nm是操纵变量的数量。
在预测范围内随时间改变调优权值k时间k+p-1,指定阵列Nm列和最多p行。在这里,k当前的时间是和p是预测视界。每行包含一个预测地平线步骤的操纵可变速率调谐权重。如果指定小于p行,最终行中的权重用于预测地平线的剩余步骤。
如果杜
是空的,[]
,则使用原MPC控制器中定义的默认权重。
eCR.
- 用于限制软化的松弛变量上的重量[]
(默认)|非负标量用于约束软化的松弛变量的重量,指定为非负标量。
如果eCR.
是空的,[]
,使用原始MPC控制器中定义的默认重量。
限制
-更新输入和输出约束更新的输入和输出约束,作为结构指定。如果您不期望约束在运行时更改,则忽略限制
.使用显式MPC控制器时忽略此字段。
此结构包含以下字段:
ymin
- 输出变量下限[]
(默认)|柱矢量输出可变下限,指定为长度的列向量Ny.ymin(i)
取代outputvariables(i).min
来自原始控制器的约束。如果outputvariables(i).min
控制器的属性被指定为向量,ymin(i)
替换这个向量中的第一个有限项,并移动其余的值以保持相同的约束概要。
如果ymin
是空的,[]
,使用原始MPC控制器中定义的默认界限。
ymax.
- 输出变量上限[]
(默认)|柱矢量输出变量上限,指定为长度的列向量Ny.ymax(我)
取代OutputVariables(我)。马克斯
来自原始控制器的约束。如果OutputVariables(我)。马克斯
控制器的属性被指定为向量,ymax(我)
替换这个向量中的第一个有限项,并移动其余的值以保持相同的约束概要。
如果ymax.
是空的,[]
,使用原始MPC控制器中定义的默认界限。
um
- 操纵可变下限[]
(默认)|柱矢量被操纵可变下限,指定为长度的列向量Nm.嗯(i)
取代Manipulatedvariables(i).min
来自原始控制器的约束。如果Manipulatedvariables(i).min
控制器的属性被指定为向量,嗯(i)
替换这个向量中的第一个有限项,并移动其余的值以保持相同的约束概要。
如果um
是空的,[]
,使用原始MPC控制器中定义的默认界限。
umax.
- 操纵可变的上限[]
(默认)|柱矢量被操纵的可变上限,指定为长度的柱矢量Nm.umax(i)
取代Manipulatedvariables(i).max
来自原始控制器的约束。如果Manipulatedvariables(i).max
控制器的属性被指定为向量,umax(i)
替换这个向量中的第一个有限项,并移动其余的值以保持相同的约束概要。
如果umax.
是空的,[]
,使用原始MPC控制器中定义的默认界限。
自定义混合
- 更新了自定义混合输入/输出约束更新了自定义混合输入/输出约束,指定为结构。使用显式MPC控制器时忽略此字段。
此结构具有以下字段:
E
- 操纵变量约束常数[]
(默认)|Nc-经过-Nm大批操纵变量约束常数,指定为一个Nc-经过-Nm阵列,其中Nc是约束的数量,和Nm是操纵变量的数量。
如果E
是空的,[]
,使用原始MPC控制器中定义的相应约束。
F
- 受控输出约束常数[]
(默认)|Nc-经过-Ny大批受控输出约束常量,指定为一个Nc-经过-Ny阵列,其中Ny是受控输出的数量(测量和未测量)。
G
- 混合输入/输出约束常数[]
(默认)|长度列向量Nc混合输入/输出约束常数,指定为长度的列向量Nc.
年代
- 测量的扰动约束常数[]
(默认)|Nc-经过-Nv大批测量的干扰约束常数,指定为一个Nc-经过-Nm阵列,其中Nm是测量障碍的数量。
视野
- 更新了控制器视野更新了控制器视野,指定为结构。要在运行时变化视野,首先使用使用数据结构getcodegenerationData.
设置udervarifehorizon.
名称 - 值对真的
.当您改变视野时,必须指定预测地平线和控制范围。有关更多信息,请参阅在运行时调整视野.
使用显式MPC控制器时忽略此字段。
此结构具有以下字段:
米
- 控制地平线[]
(默认)|正整数|正整数向量控制地平线,取代了值configData.m
在运行时,指定为以下之一:
正整数,米, 之间1
和p,包容,在哪里p是预测的地平线(horizons.p
)。在这种情况下,控制器计算米自由控制动作时有发生k通过k+米-1,并保持控制器输出常数,用于剩余的预测地平线步骤k+米通过k+p-1。在这里,k是当前的控制间隔。用于最佳轨迹规划集米等于p.
矢量阳性整数,[米1,米2,其中整数的和等于预测视界,p.在这种情况下,控制器计算米自由移动块,在哪里米是控制地平线矢量的长度。第一个免费移动适用于时间k通过k+米1-1,第二个自由举动适用于时间k+米1通过k+米1+米2-1,等等。与默认情况相比,使用块移动可以提高控制器的稳健性。
模型
- 更新的植物和标称值更新的植物和自适应MPC和时变MPC标称值,指定为一个结构。模型
仅在指定时可用isadaptive.
要么ISLTV.
作为真的
创建代码生成数据结构时。
此结构包含以下字段:
一个
- 状态矩阵的离散时间 - 空间植物模型离散时间状态空间对象模型的状态矩阵,具体为:
Nx-经过-Nx在使用自适应MPC时,
Nx-经过-Nx-经过-(p+1)使用时变MPC时的数组,
在哪里Nx是植物的数量。
B
- 输入到状态矩阵的离散时间 - 空间工厂模型离散时间空间工厂模型的输入到状态矩阵,指定为:
Nx-经过-Nu在使用自适应MPC时,
Nx-经过-Nu-经过-(p+1)使用时变MPC时的数组,
在哪里Nu是植物输入的数量。
C
- 离散时间空间植物模型的状态为输出矩阵离散时间 - 空间工厂模型的状态到输出矩阵,指定为:
Ny-经过-Nx当使用自适应MPC时。
Ny-经过-Nx-经过-(p使用时变MPC时的+1)阵列。
D
- 基于离散时间 - 空间植物模型的馈通矩阵离散时间 - 空间植物模型的馈通矩阵,指定为:
Ny-经过-Nu当使用自适应MPC时。
Ny-经过-Nu-经过-(p使用时变MPC时的+1)阵列。
由于MPC控制器不支持直接馈通的工厂,因此指定万博1manbetxD
作为一系列零。
X
- 名义植物状态名义植物国家,指定为:
长度的柱矢量Nx使用Adaptive MPC时。
一个Nx-by-1-by-(p使用时变MPC时的+1)阵列。
U
- 标称植物投入标称植物投入,指定为:
长度的柱矢量Nu使用Adaptive MPC时。
一个Nu-by-1-by-(p使用时变MPC时的+1)阵列。
Y
- 标称植物产出标称植物产出,指定为:
长度的柱矢量Ny使用Adaptive MPC时。
一个Ny-by-1-by-(p使用时变MPC时的+1)阵列。
DX
- 名义植物状态衍生物名义植物状态衍生物,指定为:
长度的柱矢量Nx使用Adaptive MPC时。
一个Nx-by-1-by-(p使用时变MPC时的+1)阵列。
m
- 最佳操纵变量移动最优操纵变量移动,返回为长度的列向量Nm, 在哪里Nm是操纵变量的数量。
如果控制器检测到不可行的优化问题或遇到解决不良优化问题的数值困难,m
仍然是最近成功的解决方案,XC.LastMove.
.
否则,如果优化问题是可行的,并且求解器达到指定的最大迭代次数而不找到最佳解决方案,m
:
仍然是最近的成功解决方案优化器.Usesuboptimalsolution.
控制器的财产是错误的
.
在最终迭代后是否达到次最优解优化器.Usesuboptimalsolution.
控制器的财产是真的
.有关更多信息,请参阅次优QP解决方案.
信息
- 控制器优化信息控制器优化信息,作为结构返回。
如果您使用的是隐式或Adaptive MPC,信息
包含以下字段:
场地 | 描述 |
---|---|
迭代 |
QP Solver迭代的数量 |
QPCode. |
QP求解器状态代码 |
成本 |
客观函数成本 |
Uopt. |
最佳操纵变量调整 |
Yopt. |
最优预测输出变量序列 |
XOPT. |
最佳预测状态变量序列 |
top |
时间间隔 |
松弛 |
限制软化的松弛变量 |
如果configdata.onlyComputecost.
是真的
,最佳序列信息,Uopt.
,Yopt.
,XOPT.
,top
, 和松弛
,不可用:
有关更多信息,请参阅mpcmove
和mpcmoveAdaptive
.
如果您使用的是显式MPC,信息
包含以下字段:
场地 | 描述 |
---|---|
地区 |
找到最佳解决方案的区域 |
ExitCode. |
解决方案状态码 |
有关更多信息,请参阅mpcmoveexplict.
.
使用说明和限制:
您可以为隐式和显式MPC控制器生成代码。
要生成用于计算最佳MPC控制的代码:
从MPC控制器或使用显式MPC控制器生成数据结构getcodegenerationData.
.
要验证控制器是否产生预期的闭环结果,请使用它mpcmovecodegeneration.
在的地方mpcmove
.
生成代码mpcmovecodegeneration.
使用Codegen.
(MATLAB编码器).这一步需要马铃薯®编码器™软件。
getcodegenerationData.
|mpcmove
|mpcmoveAdaptive
|mpcmoveexplict.
|Codegen.
(MATLAB编码器)
您单击了与此MATLAB命令对应的链接:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。