exponenta event banner

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 структура вывода. Добавьте данное поле в оперативную структуру данных, только если ожидается изменение соответствующего веса или ограничения во время выполнения.

Ограничения в сети

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

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

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

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

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

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

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

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

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

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

  • "ECRWeight" - Переменный вес провисания

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

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

Возмущения, параметры и начальные догадки для многоступенчатого ПДК

  • "MeasuredDistrubance" - Измеренные возмущения

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

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

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

  • "InitialGuess" - Первоначальные догадки для переменных принятия решений

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

свернуть все

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

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

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

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

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

mvTarget

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

X0

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

MV0

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

Slack0

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

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

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

StageFcnParameters

Значения параметров для функций stage cost и constraints и их Jacobians - это поле возвращается только в том случае, когда любая функция stage cost или constraint или ее Jacobian использует параметры, то есть когда существует хотя бы один этап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