getCodeGenerationData

Создайте структуры данных для nlmpcmoveCodeGeneration

Описание

Используйте эту функцию для создания структур данных для nlmpcmoveCodeGeneration функция, которая вычисляет оптимальные ходы управления для нелинейных контроллеров MPC.

Для получения информации о генерации структур данных для mpcmoveCodeGeneration, см. getCodeGenerationData.

[coreData,onlineData] = getCodeGenerationData(nlobj,x,lastMV) создает структуры данных для использования с nlmpcmoveCodeGeneration.

пример

[coreData,onlineData] = getCodeGenerationData(nlobj,x,lastMV,params) когда nlobj является nlmpc Объекты затем этот синтаксис копирует начальные значения параметров в onlineData структура. Если nlobj является nlmpcMultistage затем объект передает params аргумент не разрешен, и вы должны вручную задать начальные догадки в InitialGuess область onlineData вместо этого.

[___] = getCodeGenerationData(___,field) включает заданный сетевой вес или поле ограничения путем добавления его к onlineData структура.

[___] = getCodeGenerationData(___,field1,...,fieldn) включает несколько сетевых полей веса или ограничений путем добавления их к onlineData структура.

Примеры

свернуть все

Создайте нелинейный контроллер MPC с четырьмя состояниями, двумя выходами и одним входом.

nlobj = nlmpc(4,2,1);
In standard cost function, zero weights are applied by default to one or more OVs because there are fewer MVs than 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;
params = {Ts};

Задайте выходную функцию модели, передав параметр времени расчета как входной параметр.

nlobj.Model.OutputFcn = "pendulumOutputFcn";

Задайте стандартные ограничения для контроллера.

nlobj.Weights.OutputVariables = [3 3];
nlobj.Weights.ManipulatedVariablesRate = 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,[],params);
Model.StateFcn is OK.
Model.OutputFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

Только два из состояний объекта можно измерить. Поэтому создайте расширенный фильтр Калмана для оценки четырех состояний объекта. Его функция перехода к состоянию задана в pendulumStateFcn.m и его функция измерения определена в pendulumMeasurementFcn.m.

EKF = extendedKalmanFilter(@pendulumStateFcn,@pendulumMeasurementFcn);

Задайте начальные условия для симуляции, инициализируйте расширенное состояние фильтра Калмана и задайте нуль начальный манипулированное значение переменных.

x0 = [0;0;-pi;0];
y0 = [x0(1);x0(3)];
EKF.State = x0;
mv0 = 0;

Создайте структуры данных генерации кода для контроллера, определяя начальные условия и параметры.

[coreData,onlineData] = getCodeGenerationData(nlobj,x0,mv0,params);

Просмотрите оперативную структуру данных.

onlineData
onlineData = struct with fields:
           ref: [0 0]
      MVTarget: 0
    Parameters: {[0.1000]}
            X0: [10x4 double]
           MV0: [10x1 double]
        Slack0: 0

Если ваше приложение использует сетевые веса или ограничения, необходимо добавить соответствующие поля в структуры данных генерации кода. Например, следующий синтаксис создает структуры данных, которые включают поля для выходных переменных весов настройки, манипулируемых переменных весов настройки и манипулируемых переменных границ.

[coreData2,onlineData2] = getCodeGenerationData(nlobj,x0,mv0,params,...
    'OutputWeights','MVWeights','MVMin','MVMax');

Просмотрите оперативную структуру данных. Во время выполнения задайте сетевые веса и ограничения в добавленных полях структуры.

onlineData2
onlineData2 = struct with fields:
              ref: [0 0]
         MVTarget: 0
       Parameters: {[0.1000]}
               X0: [10x4 double]
              MV0: [10x1 double]
           Slack0: 0
    OutputWeights: [3 3]
        MVWeights: 0
            MVMin: [10x1 double]
            MVMax: [10x1 double]

Входные параметры

свернуть все

Нелинейный прогнозирующий контроллер модели, заданный как nlmpc или nlmpcMultistage объект.

Начальные состояния нелинейной модели предсказания, заданные как вектор-столбец Nx длины, где Nx - количество состояний модели предсказания.

Начальные манипулированные переменные управляющие сигналы, заданные как вектор-столбец длины Nmv, где Nmv - количество манипулируемых переменных.

Начальные значения параметров для не многоступенчатого MPC, заданные как вектор камеры с длиной, равной nlobj.Model.NumberOfParameters, которое является количеством необязательных параметров в модели предсказания контроллера. Если контроллер не имеет дополнительных параметров, задайте params как {}.

Если nlobj является nlmpc объект затем начальные значения, указанные в params копируются в onlineData структура. Если nlobj является nlmpcMultistage объект затем params аргумент не разрешен, и вы должны вручную задать начальные догадки в InitialGuess область onlineData вместо этого.

Для получения дополнительной информации о необязательных параметрах модели предсказания смотрите Задать модель предсказания для нелинейного MPC.

Сетевой вес или имя поля ограничения, заданное как строковый или символьный вектор. При создании структур данных для nlmpcmoveCodeGenerationможно добавить к onlineData любое из следующих полей структура output. Добавьте заданное поле в оперативную структуру данных, только если вы ожидаете, что соответствующий вес или ограничение изменятся во время выполнения.

Онлайн-ограничения

  • "StateMin" - Нижние границы состояния

  • "StateMax" - Верхние границы состояния

  • "MVMin" - Манипулирование нижними границами переменной

  • "MVMax" - Манипулируемые верхние границы переменной

  • "MVRateMin" - Манипулируемая переменная скорость изменения нижняя граница

  • "MVRateMax" - Управляемая переменная скорость изменения верхней границы

Оперативные ограничения и веса настройки для не многоступенчатого MPC

  • "OutputWeights" - Выходы веса переменных

  • "MVWeights" - Манипулируемые переменные веса

  • "MVRateWeights" - Манипулируемые веса переменных скоростей

  • "ECRWeight" - Релейная переменная масса

  • "OutputMin" - Выходные переменные нижние границы

  • "OutputMax" - Выходные верхние границы переменной

Нарушения порядка, параметры и начальные догадки для многоступенчатого MPC

  • "MeasuredDistrubance" - Измеренные нарушения порядка

  • "StateParameter" - Вектор параметра для функции состояния и якобианов

  • "StageParameter" - Вектор параметра для стоимости этапа, ограничений и якобианов

  • "TerminalState" - Ограничение конечного состояния

  • "InitialGuess" - Начальные предположения для переменных принятия решений

Выходные аргументы

свернуть все

Нелинейные параметры конфигурации MPC, которые являются постоянными во время исполнения, возвращаются как структура. Эти параметры получают из настроек контроллера в nlobj. При симуляции контроллера передайте coreData кому nlmpcmoveCodeGeneration без изменения параметров.

Данные моделирования во время выполнения, заданные как структура со следующими полями.

Сетевой нелинейный контроллер MPC данных, который необходимо обновлять при каждом контрольном интервале, возвращаемый как структура. Структура всегда содержит следующие поля.

ОбластьОписание
ref

Выходы ссылки значения, возвращенные как вектор-столбец из нулей с длиной Ny, где Ny - количество выходов модели предсказания.

mvTarget

Манипулируемые переменные ссылки значения, возвращенные как вектор-столбец из нулей с Nmv длины, где Nmv - количество манипулируемых переменных.

X0

Начальное предположение для траектории состояния, возвращаемое как вектор-столбец, равная x.

MV0

Начальное предположение для манипулируемой переменной траектории, возвращенной как вектором-столбцом, равной lastMV.

Slack0

Начальное предположение для переменной slack, возвращенное как нуль.

onlineData может также содержать следующие поля в зависимости от строения контроллера и значений аргументов.

ОбластьОписание
md

Измеренные значения нарушения порядка - Это поле возвращается только тогда, когда контроллер измеряет входы нарушения порядка, то есть когда nlobj.Dimensions.MDIndex является ненулевым. md возвращается как вектор-столбец из нулей с Nmd длины, где Nmd - количество измеренных нарушений порядка.

Parameters

Значения параметров - Это поле возвращается только, когда контроллер использует необязательные параметры модели. Parameters возвращается как вектор камеры, равный params.

  • OutputWeights

  • MVWeights

  • MVRateWeights

  • ECRWeight

  • OutputMin

  • OutputMax

  • StateMin

  • StateMax

  • MVMin

  • MVMax

  • MVRateMin

  • MVRateMax

Вес и значения ограничений - каждое поле возвращается только тогда, когда соответствующее имя поля задано с помощью field аргумент. Значение каждого поля равно соответствующему значению по умолчанию, заданному в контроллере, как возвращено в coreData.

Для получения дополнительной информации о настройке onlineData поля, см. nlmpcmoveCodeGeneration.

Онлайн-нелинейные многоступенчатые данные MPC контроллера, которые необходимо обновлять на каждом контрольном интервале, возвращаемые как структура. Структура всегда содержит InitialGuess поле.

ОбластьОписание
InitialGuess

Начальное предположение для переменных решения, возвращенных как вектор-столбец длины, равной сумме длин всех векторов переменной решения для каждого этапа. Для получения дополнительной информации см. nlmpcmove.

onlineData может также содержать следующие поля в зависимости от строения контроллера и значений аргументов.

ОбластьОписание
MeasuredDisturbances

Измеренные значения нарушения порядка - Это поле возвращается только тогда, когда контроллер измеряет входы нарушения порядка, то есть когда nlobj.Dimensions.MDIndex является ненулевым. md возвращается как вектор-столбец из нулей с Nmd длины, где Nmd - количество измеренных нарушений порядка.

StateFcnParameters

Значения параметров для функций состояния и якобианов - Это поле возвращается только тогда, когда функция предсказания состояния контроллера или ее параметры модели использования якобиана, то есть когда Model.ParameterLength больше нуля. StateFcnParameter возвращается как вектор.

StageFcnParameters

Значения параметров для функций затрат и ограничений этапа и их якобианов - Это поле возвращается только тогда, когда любая стоимость этапа или функция ограничений, или ее якобиан, использует параметры, то есть когда существует по крайней мере один этап i для чего Stages(i).ParameterLength больше нуля. StageFcnParameter возвращается как вектор.

  • StateMin

  • StateMax

  • MVMin

  • MVMax

  • MVRateMin

  • MVRateMax

Ограничительные значения - Каждое поле возвращается только, когда соответствующее имя поля задано с помощью field аргумент. Значение каждого поля равно соответствующему значению по умолчанию, заданному в контроллере, как возвращено в coreData.
TerminalState

Конечное состояние, заданная как вектор-столбец с таким количеством элементов, как количество состояний. Это конечное состояние является желаемым состоянием на последнем шаге предсказания. Чтобы задать желаемые конечные состояния во время выполнения через это поле, необходимо задать конечные значения в TerminalState поле Model свойство nlobj. Задайте inf для состояний, которые не должны быть ограничены терминальным значением. Во время исполнения, nlmpcmoveCodeGeneration игнорирует все значения в TerminalState область simdata которые соответствуют inf значения в nlobj. Если вы не задаете какое-либо условие терминального значения в nlobj, это поле не создается в onlinedata.

Для получения дополнительной информации о настройке onlineData поля, см. nlmpcmoveи nlmpcmoveCodeGeneration.

Введенный в R2020a