getCodeGenerationData

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

Описание

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

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

пример

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

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

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

Примеры

свернуть все

Создайте нелинейный контроллер 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: [10×4 double]
           MV0: [10×1 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: [10×4 double]
              MV0: [10×1 double]
           Slack0: 0
    OutputWeights: [3 3]
        MVWeights: 0
            MVMin: [10×1 double]
            MVMax: [10×1 double]

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

свернуть все

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

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

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

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

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

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

Онлайн настройка весов

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

  • "MVWeights" — Переменные веса, которыми управляют,

  • "MVRateWeights" — Веса с плавающей ставкой, которыми управляют,

  • "ECRWeight" — Ослабьте переменный вес

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

  • "OutputMin" — Нижние границы выходной переменной

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

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

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

  • "MVMin" — Переменные нижние границы, которыми управляют,

  • "MVMax" — Переменные верхние границы, которыми управляют,

  • "MVRateMin" — Плавающий курс, которым управляют, нижней границы изменения

  • "MVRateMax" — Плавающий курс, которым управляют, верхней границы изменения

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

свернуть все

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

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

Поле Описание
ref

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

mvTarget

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

X0

Исходное предположение для траектории состояния, возвращенной как вектор-столбец, равняется tox.

MV0

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

Slack0

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

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

Поле Описание
md

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

Parameters

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

  • OutputWeights

  • MVWeights

  • MVRateWeights

  • ECRWeight

  • OutputMin

  • OutputMax

  • StateMin

  • StateMax

  • MVMin

  • MVMax

  • MVRateMin

  • MVRateMax

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

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

Введенный в R2020a