nlmpc
非线性模型预测控制器
描述
非线性模型预测控制器使用非线性预测模型、非线性代价函数和非线性约束计算最优控制移动通过预测水平。有关非线性MPC的更多信息,请参见非线性MPC.
创建
语法
描述
输入参数
nx
- - - - - -预测模型状态的数量
正整数
预测模型状态的数目,指定为正整数。该值存储在维度。Nu米berOfStates
控制器只读属性。在创建控制器对象后,不能更改状态的数量。
例子:6
纽约
- - - - - -预测模型输出的数量
正整数
预测模型输出的数量,指定为正整数。该值存储在维度。Nu米berOfOutputs
控制器只读属性。在创建控制器对象后,不能更改输出的数量。
例子:2
ν
- - - - - -预测模型输入的数量
正整数
预测模型输入的数量,它们都被设置为被操作的变量,指定为正整数。该值存储在维度。Nu米berOfInputs
控制器只读属性。在创建控制器对象后,不能更改操作变量的数量。
例子:4
mvIndex
- - - - - -操纵变量指标
正整数向量
被操纵的变量索引,指定为正整数的向量。该值存储在维度。MVIndex
控制器只读属性。在创建控制器对象后,不能更改这些索引。
的索引的组合集mvIndex
,mdIndex
,udIndex
必须包含来自的所有整数1
通过Nu,在那里Nu是预测模型输入的数量。
例子:3 [1]
mdIndex
- - - - - -实测扰动指数
正整数向量
测量的扰动指数,指定为正整数的向量。该值存储在维度。MDIndex
控制器只读属性。在创建控制器对象后,不能更改这些索引。
的索引的组合集mvIndex
,mdIndex
,udIndex
必须包含来自的所有整数1
通过Nu,在那里Nu是预测模型输入的数量。
例子:2
udIndex
- - - - - -未测扰动指数
正整数向量
未测量的扰动指数,指定为正整数的向量。该值存储在维度。UDIndex
控制器只读属性。在创建控制器对象后,不能更改这些索引。
的索引的组合集mvIndex
,mdIndex
,udIndex
必须包含来自的所有整数1
通过Nu,在那里Nu是预测模型输入的数量。
例子:4
属性
Ts
- - - - - -预测模型采样时间
1
(默认)|正有限标量
预测模型采样时间,指定为一个正的有限标量。该控制器采用离散时间模型,采样时间为Ts
为预测。如果指定连续时间预测模型(模型。IsContinuousTime
是真正的
),然后使用内置的隐式梯形规则对模型进行离散化,采样时间为Ts
.
例子:0.1
PredictionHorizon
- - - - - -预测地平线
10
(默认)|正整数
预测水平步长,指定为正整数。的乘积PredictionHorizon
而且Ts
是预测时间,即控制器预测未来的距离。
例子:15
ControlHorizon
- - - - - -控制层
2
(默认)|正整数|正整数向量
控制水平,指定为以下之一:
正整数,米之间,
1
而且p,其中p等于PredictionHorizon
.在这种情况下,控制器进行计算米有时会出现自由控制动作k通过k+米-1,并保持控制器输出恒定的剩余预测水平步距k+米通过k+p1。在这里,k是当前控制间隔。正整数向量[米1,米2,…],指定阻塞间隔的长度。默认情况下,控制器进行计算米方块的自由移动,在哪里米是阻塞间隔的数量。第一个自由动作适用于时间k通过k+米1-1,第二个自由移动适用于时间k+米1通过k+米1+米2-1,等等。使用块移动可以提高控制器的鲁棒性。中的值的和
ControlHorizon
必须匹配预测视界p.如果指定一个向量,其和为:小于预测水平,则控制器增加一个阻塞间隔。这个间隔的长度是这样的,以至于间隔长度的和是p.例如,如果p=
10
你指定一个控制视界ControlHorizon
=[1 2 3]
,则控制器使用四个具有长度的间隔[1 2 3 4]
.大于预测视界,则对区间进行截断,直到区间长度之和等于p.例如,如果p=
10
你指定一个控制视界ControlHorizon
=[1 2 3 6 7]
,则控制器使用四个具有长度的间隔[1 2 3 4]
.
分段恒定的阻塞移动对于最优路径规划应用来说往往限制太大。为了产生一个限制较少、条件较好的非线性规划问题,可以指定分段线性操作变量阻塞间隔。为此,设置优化。MVInterpolationOrder
您的财产nlmpc
控制器对象1
.
有关操纵变量块如何与不同插值方法一起工作的更多信息,请参见操纵变量阻塞.
例子:3.
维
- - - - - -预测模型尺寸信息
结构
此属性是只读的。
预测模型尺寸信息,在创建控制器时指定,并存储为具有以下字段的结构。
NumberOfStates
-州的数量
正整数
预测模型中的状态数,指定为正整数。此值对应于nx
.
例子:6
NumberOfOutputs
-输出数量
正整数
预测模型中的输出数,指定为正整数。此值对应于纽约
.
例子:1
NumberOfInputs
-输入数量
正整数
预测模型中输入的数量,指定为正整数。此值对应于任意一个ν
或者是长度的和mvIndex
,mdIndex
,udIndex
.
例子:3.
MVIndex
-操纵变量指标
正整数向量
预测模型的操纵变量指标,指定为正整数的向量。此值对应于mvIndex
.
例子:(1 2)
MDIndex
-测量的扰动指数
正整数向量
预测模型的测量扰动指数,指定为正整数向量。此值对应于mdIndex
.
例子:4
UDIndex
-未经测量的扰动指数
正整数向量
预测模型的未测扰动指数,指定为正整数向量。此值对应于udIndex
.
例子:3.
模型
- - - - - -预测模型
结构
预测模型,指定为具有以下字段的结构。
StateFcn
-状态函数
字符串|字符向量|函数句柄
状态函数,指定为字符串、字符向量或函数句柄。对于连续时间预测模型,StateFcn
是状态导数函数。对于离散时间预测模型,StateFcn
是状态更新功能。
如果您的状态函数是连续时间的,控制器自动离散模型使用隐式梯形规则。该方法可以处理中等刚度的模型,其预测精度取决于控制器采样时间Ts
;也就是说,大样本时间会导致预测不准确。
如果默认的离散化方法不能为您的应用程序提供令人满意的预测,您可以指定自己的离散时间预测模型,该模型使用不同的方法,例如多步前向欧拉规则。
你可以用以下方式之一指定你的状态函数:
当前工作文件夹或MATLAB中函数的名称®路径,指定为字符串或字符向量
模型。StateFcn =“myStateFunction”;
当前工作文件夹或MATLAB路径中函数的句柄
模型。StateFcn = @myStateFunction;
匿名函数
模型。myStateFunction(x,u,params)
有关更多信息,请参见指定非线性MPC预测模型.
例子:“@transFcn”
OutputFcn
-输出函数
[]
(默认)| string |字符向量|函数句柄
输出函数,指定为字符串、字符向量或函数句柄。如果预测模型的状态数和输出数相同,则可以省略OutputFcn
,这意味着所有的状态都是可测量的;也就是说,每个输出对应一个状态。
请注意
你的输出函数不能在任何时候从任何被操纵的变量直接传递到任何输出。
您可以通过以下方式之一指定输出函数:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
模型。OutputFcn =“myOutputFunction”;
当前工作文件夹或MATLAB路径中函数的句柄
模型。OutputFcn = @myOutputFunction;
匿名函数
模型。myOutputFunction(x,u,params)
有关更多信息,请参见指定非线性MPC预测模型.
例子:“@outFcn”
IsContinuousTime
-指示预测模型时间域的选项
真正的
(默认)|假
选项,用于指示预测模型时域,指定为以下之一:
真正的
-连续时间预测模型。在这种情况下,控制器在使用预测时自动离散模型Ts
.假
-离散时间预测模型。在这种情况下,Ts
为模型的采样时间。
请注意
IsContinuousTime
必须与模型。StateFcn
而且模型。OutputFcn
.
如果IsContinuousTime
是真正的
,StateFcn
必须返回状态在当前时刻对时间的导数。否则StateFcn
必须在下一个控制间隔返回状态。
例子:真正的
NumberOfParameters
—可选的型号参数个数
0
(默认)|非负整数
预测模型使用的可选模型参数数、自定义代价函数、自定义约束、无源函数,指定为非负整数。参数的数量包括这些函数使用的所有参数。例如,如果状态函数只使用参数p1
,约束函数只使用形参p2
,代价函数只使用参数p3
,然后NumberOfParameters
是3.
.
例子:1
州
- - - - - -状态信息、边界和比例因子
结构数组
的结构数组指定的状态信息、边界和比例因子Nx元素,Nx是状态数。每个结构元素都有以下字段。
最小值
-状态下限
负
(默认)|标量|向量
状态下界,指定为标量或向量。默认情况下,这个下界为负
.
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k+1到时间k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
状态边界总是硬约束。
例子:[-20 -18 -15]
马克斯
-状态上限
正
(默认)|标量|向量
状态上界,指定为标量或向量。缺省情况下,该上限为+正
.
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k+1到时间k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
状态边界总是硬约束。
例子:20 [15]
的名字
-州名
字符串|字符向量
状态名,指定为字符串或字符向量。默认状态名称为“x”#
,在那里#
是其状态索引。
例子:“速度”
单位
-州单位
""
(默认)| string |字符向量
状态单位,指定为字符串或字符向量。
例子:“米/秒”
ScaleFactor
-状态尺度因子
1
(默认)|正有限标量
状态比例因子,指定为正的有限标量。一般情况下,使用运行范围的状态。指定适当的比例因子可以改善优化的数值条件。
例子:10
OutputVariables
- - - - - -输出变量信息、边界和比例因子
结构数组
的结构数组指定的输出变量(OV)信息、边界和比例因子Ny元素,Ny是输出变量的个数。要访问此属性,可以使用别名机汇
而不是OutputVariables
.
每个结构元素都有以下字段。
最小值
- OV下界
负
(默认)|标量|向量
OV下界,指定为标量或向量。默认情况下,这个下界为负
.
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k+1到时间k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
例子:(-10 8)
马克斯
- OV上限
正
(默认)|标量|向量
OV上界,指定为标量或向量。缺省情况下,该上限为+正
.
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k+1到时间k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
例子:[12 10 8]
MinECR
- OV下界柔软度
1
(默认)|非负有限标量|向量
OV下界柔软度,其中较大的ECR值表示较软的约束,指定为非负的有限标量或向量。默认情况下,OV上界是软约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k+1到时间k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的ECR值用于预测范围的其余步骤。
例子:[2 1 0.5]
MaxECR
- OV上界柔软度
1
(默认)|非负有限标量|向量
OV上限柔软度,其中较大的ECR值表示较软的约束,指定为非负的有限标量或向量。默认情况下,OV下界为软约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k+1到时间k+p,指定一个向量为p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的ECR值用于预测范围的其余步骤。
例子:[5 2 1]
的名字
- OV名称
字符串|字符向量
OV名称,指定为字符串或字符向量。默认的OV名称为“y”#
,在那里#
是它的输出指标。
例子:“攻角”
单位
- OV单位
""
(默认)| string |字符向量
OV单位,指定为字符串或字符向量。
例子:“度”
ScaleFactor
- OV比例因子
1
(默认)|正有限标量
OV比例因子,指定为正的有限标量。一般情况下,使用输出变量的操作范围。指定适当的比例因子可以改善优化的数值条件。
例子:90
ManipulatedVariables
- - - - - -操纵变量信息、边界和比例因子
结构数组
的结构数组指定的可操作变量(MV)信息、边界和比例因子Nmv元素,Nmv是被操纵变量的数量。要访问此属性,可以使用别名MV
而不是ManipulatedVariables
.
每个结构元素都有以下字段。
最小值
- MV下限
负
(默认)|标量|向量
MV下界,指定为标量或向量。默认情况下,这个下界为负
.
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
例子:(-1.1 - 1)
马克斯
- MV上限
正
(默认)|标量|向量
MV的上限,指定为标量或向量。缺省情况下,该上限为+正
.
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
例子:(1.2 - 1)
MinECR
- MV下界柔软度
0
(默认)|非负标量|向量
MV下界柔软度,其中较大的ECR值表示较软的约束,指定为非负标量或向量。默认情况下,MV下界是硬约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的ECR值用于预测范围的其余步骤。
例子:0.1 [0]
MaxECR
- MV上限
0
(默认)|非负标量|向量
MV上限柔软度,其中较大的ECR值表示较软的约束,指定为非负标量或向量。默认情况下,MV上界是硬约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的ECR值用于预测范围的其余步骤。
例子:(0.5 - 0.2)
杀鼠灵
- MV变化率下限
负
(默认)|非正标量|向量
变化率的下限,指定为非正标量或向量。MV变化率定义为MV(k) - - -MV(k1),k是当前时间。默认情况下,这个下界为负
.
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
例子:(-50 -20)
RateMax
- MV变化率上限
正
(默认)|非负标量|向量
变化率的上限,指定为非负标量或向量。MV变化率定义为MV(k) - - -MV(k1),k是当前时间。缺省情况下,该上限为+正
.
若要在整个预测范围内使用相同的界限,请指定一个标量值。
随时间改变预测视界的范围k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最后的界限用于预测范围的其余步骤。
例子:50 [20]
RateMinECR
- MV变化率下界柔软度
0
(默认)|非负有限标量|向量
MV变化率下界柔软度,其中较大的ECR值表示较软的约束,指定为非负的有限标量或向量。默认情况下,MV变化率下界为硬约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最终ECR值用于预测范围的其余步骤。
例子:0.1 [0]
RateMaxECR
- MV变化率上限柔软度
0
(默认)|非负有限标量|向量
MV变化率上限柔软度,其中较大的ECR值表示较软的约束,指定为非负的有限标量或向量。默认情况下,MV变化率上界为硬约束。
要在整个预测范围内使用相同的ECR值,请指定一个标量值。
在预测范围内随时间变化ECR值k时间k+p-1,指定一个向量p值。在这里,k当前时间是和p为预测视界。如果指定小于p值,最终ECR值用于预测范围的其余步骤。
例子:[1 0.5 0.2]
的名字
- MV名称
字符串|字符向量
MV名称,指定为字符串或字符向量。默认MV名称为“u”#
,在那里#
是它的输入索引。
例子:“舵角”
单位
- MV单位
""
(默认)| string |字符向量
MV单位,指定为字符串或字符向量。
例子:“度”
ScaleFactor
- MV比例因子
1
(默认)|正有限标量
MV比例因子,指定为正的有限标量。一般情况下,使用被操纵变量的操作范围。指定适当的比例因子可以改善优化的数值条件。
例子:60
MeasuredDisturbances
- - - - - -测量的扰动信息和尺度因子
结构数组
测量扰动(MD)信息和尺度因子,指定为结构阵列与N医学博士元素,N医学博士是测量到的扰动数。如果你的模型没有测量到干扰,那么MeasuredDisturbances
是[]
.要访问此属性,可以使用别名医学博士
而不是MeasuredDisturbances
.
每个结构元素都有以下字段。
的名字
- MD名称
字符串|字符向量
MD名称,指定为字符串或字符向量。默认MD名称为“u”#
,在那里#
是它的输入索引。
例子:“风速”
单位
- MD单位
""
(默认)| string |字符向量
MD单位,指定为字符串或字符向量。
例子:“米/秒”
ScaleFactor
- MD比例因子
1
(默认)|正有限标量
MD比例因子,指定为正的有限标量。一般情况下,使用扰动的工作范围。指定适当的比例因子可以改善优化的数值条件。
例子:10
权重
- - - - - -标准成本函数调优权重
结构
标准成本函数调优权值,指定为结构。控制器将这些权重应用到缩放变量上。因此,调优权值为无量纲值。
请注意
如果你定义一个自定义成本函数使用优化。CustomCostFcn
并设置优化。ReplaceStandardCost
来真正的
,则控制器忽略调优权重的标准代价函数权重
.
权重
具有以下字段。
ManipulatedVariables
-操纵变量调优权重
行向量|数组
操纵变量调优权值,用于惩罚偏离MV目标的情况,指定为行向量或非负值的数组。所有被操作变量的默认权重为0
.
若要在整个预测水平面上使用相同的权值,请指定长度的行向量Nmv,在那里Nmv是被操纵变量的数量。
在预测范围内随时间变化调整权重k时间k+p-1,指定一个数组Nmv列及以下p行。在这里,k当前时间是和p为预测视界。每行包含一个预测水平步的操纵变量调优权值。如果指定小于p行,最后一行中的权重用于预测水平的其余步骤。
在Simulink中,在运行时指定MV目标®,将目标值传递给非线性MPC控制器块。在MATLAB中,将目标值传递给仿真函数(如nlmpcmove
,使用MVTarget
物业的性质nlmpcmoveopt
对象)。
例子:(0.1 - 0.2)
ManipulatedVariablesRate
-操纵变量率调整权重
行向量|数组
操纵的可变率调优权值,它惩罚控制移动中的较大更改,指定为行向量或非负值的数组。所有操纵变量的默认权重为0.1
.
若要在整个预测水平面上使用相同的权值,请指定长度的行向量Nmv,在那里Nmv是被操纵变量的数量。
在预测范围内随时间变化调整权重k时间k+p-1,指定一个数组Nmv列及以下p行。在这里,k当前时间是和p为预测视界。每行包含一个预测水平步的操纵变量率调谐权值。如果指定小于p行,最后一行中的权重用于预测水平的其余步骤。
例子:(0.1 - 0.1)
OutputVariables
-输出可变调优权值
向量|数组
输出变量调优权值,它惩罚偏离输出引用的情况,指定为行向量或非负值的数组。所有输出变量的默认权重为1
.
若要在整个预测水平面上使用相同的权值,请指定长度的行向量Ny,在那里Ny是输出变量的个数。
在预测范围内随时间变化调整权重k+1到时间k+p,指定一个数组Ny列及以下p行。在这里,k当前时间是和p为预测视界。每行包含一个预测水平步的输出变量调优权重。如果指定小于p行,最后一行中的权重用于预测水平的其余步骤。
例子:(0.1 - 0.1)
ECR
-松弛变量调整权重
1 e5
(默认)|阳性标量
松弛变量调优权值,指定为正标量。
例子:1 e4
优化
- - - - - -自定义优化函数和求解器
结构
自定义优化函数和求解器,指定为具有以下字段的结构。
CustomCostFcn
-自定义成本函数
[]
| string |字符向量|函数句柄
自定义成本函数,指定为以下之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
优化。CustomCostFcn=“myCostFunction”;
当前工作文件夹或MATLAB路径中函数的句柄
优化。CustomCostFcn=@myCostFunction;
匿名函数
优化。CustomCostFcn=@(X,U,e,data,params) myCostFunction(X,U,e,data,params);
你的成本函数必须有以下签名:
函数J = myCostFunction(X,U,e,data,params)
有关更多信息,请参见指定非线性MPC的代价函数.
例子:@costFcn
ReplaceStandardCost
-可选择替换标准成本功能
真正的
(默认)|假
用自定义代价函数替换标准代价函数的选项,指定为以下之一:
真正的
—控制器在优化过程中只使用自定义代价作为目标函数。在这种情况下,权重
属性将被忽略。假
—控制器在优化过程中使用标准成本和定制成本之和作为目标函数。
如果您不指定自定义成本函数使用CustomCostFcn
,则控制器忽略RepalceStandardCost
.
有关更多信息,请参见指定非线性MPC的代价函数.
例子:真正的
CustomEqConFcn
-自定义等式约束函数
[]
(默认)| string |字符向量|函数句柄
自定义相等约束函数,指定为以下之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
优化。CustomEqConFcn =“myEqConFunction”;
当前工作文件夹或MATLAB路径中函数的句柄
优化。CustomEqConFcn = @myEqConFunction;
匿名函数
优化。CustomEqConFcn = @(X,U,data,params) myEqConFunction(X,U,data,params);
等式约束函数必须具有以下签名:
函数ceq = myEqConFunction(X,U,data,params)
有关更多信息,请参见为一般非线性MPC指定约束条件.
例子:@eqFcn
CustomIneqConFcn
-自定义不等式约束函数
[]
(默认)| string |字符向量|函数句柄
自定义不等式约束函数,指定为以下之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
优化。CustomIneqConFcn =“myIneqConFunction”;
当前工作文件夹或MATLAB路径中函数的句柄
优化。CustomIneqConFcn = @myIneqConFunction;
匿名函数
优化。myIneqConFunction(X,U,e,data,params);
等式约束函数必须具有以下签名:
函数cineq = myIneqConFunction(X,U,e,data,params)
有关更多信息,请参见为一般非线性MPC指定约束条件.
例子:@ineqFcn
CustomSolverFcn
-自定义非线性规划求解器
[]
(默认)| string |字符向量|函数句柄
自定义非线性编程求解器函数,指定为字符串、字符向量或函数句柄。如果没有最优化工具箱™软件,则必须指定自己的自定义非线性编程求解器。您可以通过以下方式之一指定您的自定义求解器函数:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
优化。CustomSolverFcn =“myNLPSolver”;
当前工作文件夹或MATLAB路径中函数的句柄
优化。CustomSolverFcn = @myNLPSolver;
有关更多信息,请参见非线性MPC优化求解器的配置.
例子:@mySolver
SolverOptions
-求解器选项
选项对象的fmincon
|[]
的选项,指定为的选项对象fmincon
或[]
.
如果你有优化工具箱软件,SolverOptions
控件的选项对象fmincon
解算器。
如果没有“优化工具箱”,SolverOptions
是[]
.
有关更多信息,请参见非线性MPC优化求解器的配置.
RunAsLinearMPC
-选项模拟为线性控制器
“关闭”
(默认)|“自适应”
|“TimeVarying”
选项模拟为线性控制器,指定为以下之一:
使用the或the“自适应”
或“TimeVarying”
选项,您的控制器必须没有自定义约束和自定义代价函数。
有关将非线性MPC控制器模拟为线性控制器的示例,请参见基于非线性MPC的馈料堆优化与控制.
例子:“自适应”
UseSuboptimalSolution
-接受次优解决方案的选项
假
(默认)|真正的
接受次优解决方案(指定为逻辑值)的选项。当非线性规划求解器达到迭代的最大次数而没有找到一个解时(退出标志为0
),控制器:
冻结MV值如果
UseSuboptimalSolution
是假
应用求解器在最后迭代后发现的次优解
UseSuboptimalSolution
是真正的
要指定最大迭代次数,请使用Optimization.SolverOptions.MaxIter
.
例子:真正的
MVInterpolationOrder
-用于块移动的线性插值顺序
0
(默认)|1
块移动所使用的线性插值顺序,指定为以下之一:
0
-使用分段常数操纵变量间隔。1
-使用分段线性操纵可变区间。
如果控制水平是一个标量,则控制器将忽略MVInterpolationOrder
.
有关操纵变量阻塞的更多信息,请参见操纵变量阻塞.
例子:1
雅可比矩阵
- - - - - -模型函数的雅可比矩阵,自定义代价函数和约束函数
结构
模型函数的雅可比矩阵,自定义代价和约束函数,指定为一个结构。作为最佳实践,只要可用就使用雅可比矩阵,因为它们可以提高优化效率。如果你不指定给定函数的雅可比矩阵,非线性规划求解器必须数值计算雅可比矩阵。
的雅可比矩阵
结构包含以下字段。
StateFcn
-状态函数的雅可比矩阵
[]
(默认)| string |字符向量|函数句柄
状态函数的雅可比矩阵z
从模型。StateFcn
,指定为以下之一
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
模型。StateFcn =“myStateJacobian”;
当前工作文件夹或MATLAB路径中函数的句柄
模型。StateFcn = @myStateJacobian;
匿名函数
模型。mystate - jacobian (x,u,params)
有关更多信息,请参见指定非线性MPC预测模型.
例子:@Afcn
OutputFcn
-输出函数的雅可比矩阵
[]
(默认)| string |字符向量|函数句柄
输出函数的雅可比矩阵y
从模型。OutputFcn
,指定为以下其中之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
模型。StateFcn =“myOutputJacobian”;
当前工作文件夹或MATLAB路径中函数的句柄
模型。StateFcn = @myOutputJacobian;
匿名函数
模型。myOutputJacobian(x,u,params)
有关更多信息,请参见指定非线性MPC预测模型.
例子:@Cfcn
CustomCostFcn
-定制成本函数的雅可比矩阵
[]
| string |字符向量|函数句柄
定制成本函数的雅可比矩阵J
从优化。CustomCostFcn
,指定为以下其中之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
雅可比矩阵。CustomCostFcn =“myCostJacobian”;
当前工作文件夹或MATLAB路径中函数的句柄
雅可比矩阵。CustomCostFcn = @myCostJacobian;
匿名函数
雅可比矩阵。CustomCostFcn = @(X,U,e,data,params)
代价雅可比矩阵函数必须有这样的特征:
函数[G,Gmv,Ge] = myCostJacobian(X,U,e,data,params)
有关更多信息,请参见指定非线性MPC的代价函数.
例子:@costJacFcn
CustomEqConFcn
-自定义等式约束的雅可比矩阵
[]
(默认)| string |字符向量|函数句柄
自定义等式约束的雅可比矩阵量表信
从优化。CustomEqConFcn
,指定为以下其中之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
雅可比矩阵。CustomEqConFcn =“myEqConJacobian”;
当前工作文件夹或MATLAB路径中函数的句柄
雅可比矩阵。CustomEqConFcn = @myEqConJacobian;
匿名函数
雅可比矩阵。CustomEqConFcn = @(X,U,data,params) myEqConJacobian(X,U,data,params);
等式约束雅可比矩阵函数必须有这样的签名:
函数[G,Gmv] = myEqConJacobian(X,U,data,params)
有关更多信息,请参见为一般非线性MPC指定约束条件.
例子:@eqJacFcn
CustomIneqConFcn
-自定义不等式约束的雅可比矩阵
[]
(默认)| string |字符向量|函数句柄
自定义不等式约束的雅可比矩阵c
从优化。CustomIneqConFcn
,指定为以下其中之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
雅可比矩阵。CustomEqConFcn =“myIneqConJacobian”;
当前工作文件夹或MATLAB路径中函数的句柄
雅可比矩阵。CustomEqConFcn = @myIneqConJacobian;
匿名函数
雅可比矩阵。myIneqConJacobian(X,U,data,params);
不等式约束雅可比矩阵函数必须有如下签名:
函数[G,Gmv,Ge] = myIneqConJacobian(X,U,data,params)
有关更多信息,请参见为一般非线性MPC指定约束条件.
例子:@ineqJacFcn
被动
- - - - - -被动约束
结构
无源性约束,指定为具有以下字段的结构。
当你的非线性MPC控制器配置为使用无源约束时,优化算法在每一步都试图强制执行不等式约束:
.
在这里,νy为输出无源性指数,νu为输入无源性指数,up(x,u)是无源输入函数,和yp(x,u)为无源输出函数。的变量x而且u是预测模型的当前状态和输入。
假设植物对于输入输出对已经是被动的up而且yp,如果这两个不等式得到验证,则(在温和条件下)所得到的闭环系统随着时间趋于能量耗散,因此具有稳定的平衡。有关被动的更多信息,请参见为一般非线性MPC指定约束条件在线性系统中,关于被动和被动指数.有关示例,请参见基于无源非线性MPC的四油箱控制而且基于无源非线性MPC的机器人机械手控制.
EnforceConstraint
-选项强制约束
假
(默认)|真正的
选项强制约束,指定为以下之一:
真正的
-在优化过程中强制执行被动约束。在本例中,您必须指定OutputFcn
而且InputFcn
属性。假
-在优化过程中不会强制执行被动约束。
例子:真正的
OutputPassivityIndex
-控制器所需的输出无源性指标
0.1
(默认)|非负标量
控制器的期望输出无源指标,指定为非负标量。
如果被动。EnforceConstraint
是真正的
,在每一步优化算法都试图强制执行无源性不等式约束,这涉及到无源性指标νy中指定的被动。OututPassivityIndex
.
例子:1
InputPassivityIndex
-控制器所需的输入无源性指标
0
(默认)|非负标量
控制器的期望输出无源指标,指定为非负标量。
如果被动。EnforceConstraint
是真正的
,在每一步优化算法都试图强制执行无源性不等式约束,这涉及到无源性指标νu中指定的被动。InputPassivityIndex
.
例子:1
OutputFcn
-无源输出功能
[]
(默认)| string |字符向量|函数句柄
被动输出函数,指定为字符串、字符向量或函数句柄。
如果被动。EnforceConstraint
是真正的
然后,在每一步优化算法尝试强制输入和输出不等式约束,这涉及到函数yp(x,u)中指定的被动。OutputFcn
.
你可以指定你的无源输出函数如下所示:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
被动。OutputFcn=“myPassivityOutputFcn”;
当前工作文件夹或MATLAB路径中函数的句柄
被动。OutputFcn=@myPassivityOutputFcn;
匿名函数
被动。OutputFcn=@(x,u,params) myPassivityOutputFcn(x,u,params)
在这里,x
而且u
预测模型的状态和输入分别是和吗参数个数
用逗号分隔的参数列表(例如p1, p2, p3
),这可能是您指定的函数所需要的。如果任何函数使用可选参数,则必须指定使用的参数的数量模型。Nu米berOfParameters
.在运行时,在Simulink中,然后将这些参数传递给非线性MPC控制器块。在MATLAB中,将参数传递给一个仿真函数(例如nlmpcmove
,使用nlmpcmoveopt
选项集对象)。
例子:@ypFcn
InputFcn
-无源输入功能
字符串|字符向量|函数句柄
被动输出函数,指定为字符串、字符向量或函数句柄。如果被动。EnforceConstraint
是真正的
然后,在每一步优化算法尝试强制输入和输出不等式约束,这涉及到函数up(x,u)中指定的被动。OutputFcn
.
你可以指定你的无源输入函数如下所示:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
被动。InputFcn =“myPassivityInputFcn”;
当前工作文件夹或MATLAB路径中函数的句柄
被动。InputFcn =@myPassivityInputFcn;
匿名函数
被动。InputFcn =@(x,u,params) myPassivityInputFcn(x,u,params)
在这里,x
而且u
预测模型的状态和输入分别是和吗参数个数
用逗号分隔的参数列表(例如p1, p2, p3
),这可能是您指定的函数所需要的。如果任何函数使用可选参数,则必须指定使用的参数的数量模型。Nu米berOfParameters
.在运行时,在Simulink中,然后将这些参数传递给非线性MPC控制器块。在MATLAB中,将参数传递给一个仿真函数(例如nlmpcmove
,使用nlmpcmoveopt
选项集对象)。
例子:@upFcn
OutputJacobianFcn
-无源输出函数的雅可比矩阵
[]
(默认)| string |字符向量|函数句柄
无源输出函数的雅可比矩阵被动。OutputFcn
,指定为以下其中之一:
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
被动。OutputJacobianFcn =“myPsvOutJacFcn”;
当前工作文件夹或MATLAB路径中函数的句柄
被动。OutputJacobianFcn = @myPsvOutJacFcn;
匿名函数
被动。输出jacobianfcn = @(x,u,params) myPsvOutJacFcn(x,u,params)
在这里,x
而且u
预测模型的状态和输出分别是和吗参数个数
是可选的逗号分隔列表(例如p1, p2, p3
)所指定的函数可能需要的参数。如果任何函数使用可选参数,则必须指定使用的参数数量模型。Nu米berOfParameters
.在运行时,在Simulink中,然后将这些参数传递给非线性MPC控制器块。在MATLAB中,将参数传递给一个仿真函数(例如nlmpcmove
,使用nlmpcmoveopt
).
中指定的函数被动。OutputJacobianFcn
(如果有的话)必须返回输出无源函数相对于当前状态的雅可比矩阵作为第一个输出参数Nyp通过Nx矩阵),作为第二个输出参数,输出无源函数相对于被操纵变量的雅可比矩阵(anNyp通过Nmv矩阵)。
在这里,Nx为预测模型的状态变量个数,Nmv操纵变量的数量是和吗Nyp为无源输出函数的输出个数。
例子:@ypJac
InputJacobianFcn
-无源输入函数的雅可比矩阵
[]
(默认)| string |字符向量|函数句柄
无源输入函数的雅可比矩阵被动。InputFcn
,指定为以下之一
当前工作文件夹或MATLAB路径中函数的名称,指定为字符串或字符向量
被动。InputJacobianFcn =“myPsvInJacFcn”;
当前工作文件夹或MATLAB路径中函数的句柄
被动。InputJacobianFcn = @myPsvInJacFcn;
匿名函数
被动。InputJacobianFcn = @(x,u,params) myPsvInJacFcn(x,u,params)
在这里,x
而且u
预测模型的状态和输出分别是和吗参数个数
是可选的逗号分隔列表(例如p1, p2, p3
)所指定的函数可能需要的参数。如果任何函数使用可选参数,则必须指定使用的参数数量模型。Nu米berOfParameters
.在运行时,在Simulink中,然后将这些参数传递给非线性MPC控制器块。在MATLAB中,将参数传递给一个仿真函数(例如nlmpcmove
,使用nlmpcmoveopt
).
中指定的函数被动。InputJacobianFcn
(如果有的话)必须返回输入无源函数相对于当前状态的雅可比矩阵作为第一个输出参数Nup通过Nx矩阵),作为第二个输出参数,输入无源函数相对于被操纵变量的雅可比矩阵(anNup通过Nmv矩阵)。
在这里,Nx为预测模型的状态变量个数,Nmv操纵变量的数量是和吗Nup为无源输入函数的输出个数。
例子:@upFcn
UsePredictedState
-选择使用预测或当前状态
真正的
(默认)|假
使用预测或当前状态的选项,指定为以下之一:
真正的
- - - - - -x (k + 1)是优化问题中的一个决策变量。假
- - - - - -x [k]是优化问题中的一个决策变量。
例子:真正的
对象的功能
nlmpcmove |
计算非线性MPC控制器的最优控制动作 |
validateFcns |
检验预测模型和自定义函数nlmpc 或nlmpcMultistage 潜在问题的对象 |
convertToMPC |
转换nlmpc 对象转换为一个或多个货币政策委员会 对象 |
createParameterBus |
创建动态仿真模块总线对象,并配置总线创建者块传递模型参数到非线性MPC控制器块 |
例子
建立具有离散时间预测模型的非线性MPC控制器
创建一个四状态、两个输出和一个输入的非线性MPC控制器。
Nx = 4;Ny = 2;Nu = 1;Nlobj = nlmpc(nx,ny,nu);
在标准成本函数中,默认情况下对一个或多个OVs应用零权重,因为mv比OVs少。
指定控制器的采样时间和范围。
Ts = 0.1;nlobj。Ts=Ts;nlobj。PredictionHorizon = 10;nlobj。ControlHorizon = 5;
指定控制器的状态函数,该函数位于文件中pendulumDT0.m
.该离散时间模型集成了中定义的连续时间模型pendulumCT0.m
使用了多步向前的欧拉方法。
nlobj.Model.StateFcn =“pendulumDT0”;nlobj.Model.IsContinuousTime = false;
离散时间状态函数使用一个可选参数,采样时间Ts
,集成连续时间模型。因此,必须将可选参数的数量指定为1
.
nlobj.Model.NumberOfParameters = 1;
指定控制器的输出函数。在本例中,将第一和第三个状态定义为输出。即使这个输出函数不使用可选的采样时间参数,您也必须将该参数指定为输入参数(Ts
).
nlobj.Model.OutputFcn = @(x,u,Ts) [x(1);x (3)];
验证名义状态的预测模型函数x0
名义输入情况
.由于预测模型使用自定义参数,您必须将该参数传递给validateFcns
.
X0 = [0.1;0.2;-pi/2;0.3];U0 = 0.4;validateFcns(nlobj, x0, u0, [], {Ts});
模型。StateFcn是OK的。模型。OutputFcn是OK的。分析用户提供的模型,成本和约束功能完成。
建立具有测量扰动和未测量扰动的非线性MPC控制器
创建一个具有三种状态、一个输出和四个输入的非线性MPC控制器。前两个输入为测量扰动,第三个输入为操纵变量,第四个输入为未测量扰动。
Nlobj = nlmpc(3,1,“MV”3,“医学博士”(1 - 2),“UD”4);
要查看控制器状态、输出和输入维度和索引,请使用维
属性。
nlobj。维
ans =带有字段的结构:NumberOfStates: 3 NumberOfOutputs: 1 NumberOfInputs: 4 MVIndex: 3 MDIndex: [1 2] UDIndex: 4
指定控制器采样时间和范围。
nlobj。Ts=0.5; nlobj.PredictionHorizon = 6; nlobj.ControlHorizon = 3;
指定预测模型状态函数,该函数位于文件中exocstrStateFcnCT.m
.
nlobj.Model.StateFcn =“exocstrStateFcnCT”;
指定预测模型输出函数,该函数在文件中exocstrOutputFcn.m
.
nlobj.Model.OutputFcn =“exocstrOutputFcn”;
以初始工作点为标称条件,验证预测模型函数,测试和设置未测扰动状态,x0 (3)
,0
.因为模型已经测量了干扰,你必须把它们传递给validateFcns
.
X0 = [311.2639;8.5698;0);U0 = [10;298.15;298.15);validateFcns (x0, nlobj情况(3),情况(1:2)');
模型。StateFcn是OK的。模型。OutputFcn是OK的。分析用户提供的模型,成本和约束功能完成。
验证非线性MPC预测模型和自定义函数
创建六状态,六输出,四输入的非线性MPC控制器。
Nx = 6;Ny = 6;Nu = 4;Nlobj = nlmpc(nx,ny,nu);
在标准成本函数中,默认情况下对一个或多个OVs应用零权重,因为mv比OVs少。
指定控制器采样时间和范围。
Ts = 0.4;P = 30;C = 4;nlobj。Ts=Ts;nlobj。PredictionHorizon = p;nlobj。ControlHorizon = c;
指定预测模型状态函数和状态函数的雅可比矩阵。对于本例,使用飞行机器人的模型。
nlobj.Model.StateFcn =“FlyingRobotStateFcn”;nlobj.Jacobian.StateFcn =“FlyingRobotStateJacobianFcn”;
为控制器指定一个自定义代价函数,以取代标准代价函数。
nlobj.Optimization.CustomCostFcn = @(X,U,e,data) Ts*sum(sum(U(1:p,:)));nlobj.Optimization.ReplaceStandardCost = true;
为控制器指定一个自定义约束函数。
nlobj.Optimization.CustomEqConFcn = @(X,U,data) X(end,:)';
在初始状态验证预测模型和自定义函数(x0
)和初始输入(情况
)。
X0 = [-10;-10;pi/2;0;0];U0 = 0 (nu,1);validateFcns (nlobj x0,情况);
模型。StateFcn是OK的。雅可比矩阵。StateFcn是OK. No output function specified. Assuming "y = x" in the prediction model. Optimization.CustomCostFcn is OK. Optimization.CustomEqConFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
从非线性MPC控制器创建线性MPC控制器
创建一个具有四个状态、一个输出变量、一个操纵变量和一个测量扰动的非线性MPC控制器。
Nlobj = nlmpc(4,1,“MV”, 1“医学博士”2);
指定控制器采样时间和范围。
nlobj。PredictionHorizon = 10;nlobj。ControlHorizon = 3;
指定预测模型的状态函数。
nlobj.Model.StateFcn =“oxidationStateFcn”;
指定预测模型输出函数和输出变量比例因子。
nlobj.Model.OutputFcn = @(x,u) x(3);nlobj.OutputVariables.ScaleFactor = 0.03;
指定被操纵的变量约束和比例因子。
nlobj. manipulation variables . min = 0.0704;nlobj. manipulation variables . max = 0.7042;nlobj. manipulation variables . scalefactor = 0.6;
指定测量的扰动尺度因子。
nlobj. measured扰动. scalefactor = 0.5;
计算三个线性MPC控制器的状态和输入工作条件fsolve
函数。
选项= optimoptions(“fsolve”,“显示”,“没有”);uLow = [0.38 0.5];xLow = fsolve(@(x) oxidationStateFcn(x,uLow),[1 0.3 0.03 1],options);uMedium = [0.24 0.5];xMedium = fsolve(@(x) oxidationStateFcn(x,uMedium),[1 0.3 0.03 1],options);uHigh = [0.15 0.5];xHigh = fsolve(@(x) oxidationStateFcn(x,uHigh),[1 0.3 0.03 1],options);
为每个标称条件创建线性MPC控制器。
mpcobjLow = convertToMPC(nlobj,xLow,uLow);mpcobjMedium = convertToMPC(nlobj,xMedium,uMedium);mpcobjHigh = convertToMPC(nlobj,xHigh,uHigh);
还可以使用标称条件数组创建多个控制器。数组中的行数指定要创建的数量控制器。的单元阵列返回线性控制器货币政策委员会
对象。
u = [uLow;]uMedium;uHigh];x = [xLow;xMedium;xHigh];mpcobjs = convertToMPC(nlobj,x,u);
的属性mpcobjLow
控制器。
mpcobjLow
MPC对象(创建于2022年8月31日05:01:07):---------------------------------------------采样时间:1(秒)预测范围:10控制范围:3植物模型:-------------- 1操纵变量(s)—>| 4状态| | |—> 1测量输出(s) 1测量扰动(s)—>| 2输入| | |—> 0未测量输出(s) 0未测量扰动(s)—>| 1输出| --------------指数:(输入矢量)操纵变量:[1]测量扰动:[2](输出矢量)测量输出:[1]扰动和噪声模型:输出扰动模型:default(类型"getoutdist(mpcobjLow)"为详细信息)测量噪声模型:default(缩放后的单位增益)权重:controllatedvariables: 0 controllatedvariablesrate: 0.1000 OutputVariables: 1 ECR: 100000状态估计:default卡尔曼滤波器(类型"getEstimator(mpcobjLow)"为详细信息)约束:0.0704 <= u1 <= 0.7042, u1/rate为无约束,y1为无约束
用非线性MPC方法规划最优轨迹
创建一个具有六种状态、六种输出和四种输入的非线性MPC控制器。
Nx = 6;Ny = 6;Nu = 4;Nlobj = nlmpc(nx,ny,nu);
在标准成本函数中,默认情况下对一个或多个OVs应用零权重,因为mv比OVs少。
指定控制器采样时间和范围。
Ts = 0.4;P = 30;C = 4;nlobj。Ts=Ts;nlobj。PredictionHorizon = p;nlobj。ControlHorizon = c;
指定预测模型状态函数和状态函数的雅可比矩阵。对于本例,使用飞行机器人的模型。
nlobj.Model.StateFcn =“FlyingRobotStateFcn”;nlobj.Jacobian.StateFcn =“FlyingRobotStateJacobianFcn”;
为控制器指定一个自定义代价函数,以取代标准代价函数。
nlobj.Optimization.CustomCostFcn = @(X,U,e,data) Ts*sum(sum(U(1:p,:)));nlobj.Optimization.ReplaceStandardCost = true;
为控制器指定一个自定义约束函数。
nlobj.Optimization.CustomEqConFcn = @(X,U,data) X(end,:)';
指定被操纵变量的线性约束。
为ct = 1:nu nlobj.MV(ct)。Min = 0;nlobj.MV (ct)。Max = 1;结束
在初始状态验证预测模型和自定义函数(x0
)和初始输入(情况
)。
X0 = [-10;-10;pi/2;0;0];U0 = 0 (nu,1);validateFcns (nlobj x0,情况);
模型。StateFcn是OK的。雅可比矩阵。StateFcn是OK. No output function specified. Assuming "y = x" in the prediction model. Optimization.CustomCostFcn is OK. Optimization.CustomEqConFcn is OK. Analysis of user-provided model, cost, and constraint functions complete.
中返回的最优状态和操纵的可变轨迹信息
.
[~,~,info] = nlmpcmove(nlobj,x0,u0);
松弛变量未使用或自定义成本函数中的零加权。所有的约束都将是艰难的。
画出最佳轨迹。
FlyingRobotPlotPlanning(信息,Ts)
最佳油耗= 1.884953
用非线性MPC控制器模拟闭环控制
创建一个四状态、两个输出和一个输入的非线性MPC控制器。
Nlobj = nlmpc(4,2,1);
在标准成本函数中,默认情况下对一个或多个OVs应用零权重,因为mv比OVs少。
指定控制器的采样时间和范围。
Ts = 0.1;nlobj。Ts=Ts;nlobj。PredictionHorizon = 10;nlobj。ControlHorizon = 5;
指定控制器的状态函数,该函数位于文件中pendulumDT0.m
.该离散时间模型集成了中定义的连续时间模型pendulumCT0.m
使用了多步向前的欧拉方法。
nlobj.Model.StateFcn =“pendulumDT0”;nlobj.Model.IsContinuousTime = false;
预测模型使用了一个可选参数,Ts
,表示样本时间。指定参数的数量。
nlobj.Model.NumberOfParameters = 1;
指定模型的输出函数,传递样本时间参数作为输入参数。
nlobj.Model.OutputFcn = @(x,u,Ts) [x(1);x (3)];
为控制器定义标准约束。
nlobj.Weights.OutputVariables = [3 3];nlobj. weights . manipulation variablesrate = 0.1;nlobj.OV(1)。Min = -10;nlobj.OV(1)。Max = 10;nlobj.MV.Min = -100;nlobj.MV.Max = 100;
验证预测模型函数。
X0 = [0.1;0.2;-pi/2;0.3];U0 = 0.4;validateFcns(nlobj, x0, u0, [], {Ts});
模型。StateFcn是OK的。模型。OutputFcn是OK的。分析用户提供的模型,成本和约束功能完成。
只有两种植物状态是可测量的。因此,创建一个扩展的卡尔曼滤波器来估计四种植物状态。它的状态转移函数定义在pendulumStateFcn.m
其测量函数定义在pendulumMeasurementFcn.m
.
EKF = extendedKalmanFilter(@pendulumStateFcn,@pendulumMeasurementFcn);
为模拟定义初始条件,初始化扩展卡尔曼滤波状态,并指定初始操作变量值为零。
X = [0;0;-pi;0];Y = [x(1);x(3)];卡尔曼滤波器。状态= x;Mv = 0;
指定输出参考值。
Yref = [0 0];
创建一个nlmpcmoveopt
对象,并指定采样时间参数。
Nloptions = nlmpcmoveopt;nloptions。参数= {Ts};
运行以下模拟10
秒。在每个控制间隔内:
用当前的测量来修正先前的预测。
计算最优控制移动
nlmpcmove
.函数返回计算的最优序列nloptions
.将更新的选项对象传递给nlmpcmove
下一个控制区间提供最优序列的初始猜测。预测模型状态。
应用第一个计算的最优控制移动到设备,更新设备状态。
生成带有白噪声的传感器数据。
拯救植物状态。
持续时间= 10;xHistory = x;为ct = 1:(Duration/Ts)%正确先前的预测xk = correct(EKF,y);计算最优控制移动[mv,nloptions] = nlmpcmove(nlobj,xk,mv,yref,[],nloptions);预测下一个迭代的预测模型状态。预测(卡尔曼滤波器,[mv;Ts]);执行第一个最优控制动作x = pendulumDT0(x,mv,Ts);%生成传感器数据Y = x([1 3]) + randn(2,1)*0.01;%保存工厂状态xHistory = [xHistory x];结束
绘制结果状态轨迹。
图subplot(0:Ts:Duration,xHistory(1,:))“时间”) ylabel (“z”)标题(“车位置”) subplot(2,2,2) plot(0:Ts:Duration,xHistory(2,:)“时间”) ylabel (“zdot”)标题(“车速度”) subplot(2,2,3) plot(0:Ts:Duration,xHistory(3,:)“时间”) ylabel (“θ”)标题(“摆角”) subplot(0:Ts:Duration,xHistory(4,:))“时间”) ylabel (“thetadot”)标题(“摆速度”)
版本历史
在R2018b中介绍
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。