exponenta event banner

getCodeGenerationData

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

Описание

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

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

пример

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

[___] = 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 объект.

Начальные состояния нелинейной модели предсказания в виде вектор-столбца длины 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

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

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