Создайте структуры данных для 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]
nlmpcobj
— Нелинейный прогнозирующий контроллер моделиnlmpc
объектНелинейный прогнозирующий контроллер модели в виде nlmpc
объект.
x
— Начальные состояния нелинейной модели предсказанияНачальные состояния нелинейной модели предсказания в виде вектор-столбца длины Nx, где Nx является количеством состояний модели предсказания.
lastMV
— Начальная буква управляла сигналами управления переменнымиНачальная буква управляла сигналами управления переменными в виде вектор-столбца длины Nmv, где Nmv является количеством переменных, которыми управляют.
params
— Начальные значения параметровНачальные значения параметров в виде вектора ячейки с длиной равняются nlobj.Model.NumberOfParameters
, который является количеством дополнительных параметров в модели предсказания контроллера. Если у контроллера нет дополнительных параметров, задайте params
как {}
.
Для получения дополнительной информации о дополнительных параметрах модели предсказания смотрите, Задают Модель Предсказания для Нелинейного MPC.
field
— Онлайновый вес или ограничительное имя поляОнлайновый вес или ограничительное имя поля в виде строки или вектора символов. При создании структур данных для nlmpcmoveCodeGeneration
, можно добавить любое из следующих полей к onlineData
вывод структуры. Добавьте данное поле в онлайновую структуру данных, только если вы ожидаете, что соответствующий вес или ограничение будут варьироваться во время выполнения.
Онлайн настройка весов
"OutputWeights"
— Веса выходной переменной
"MVWeights"
— Переменные веса, которыми управляют,
"MVRateWeights"
— Веса с плавающей ставкой, которыми управляют,
"ECRWeight"
— Ослабьте переменный вес
Онлайновые ограничения
"OutputMin"
— Нижние границы выходной переменной
"OutputMax"
— Верхние границы выходной переменной
"StateMin"
— Нижние границы состояния
"StateMax"
— Верхние границы состояния
"MVMin"
— Переменные нижние границы, которыми управляют,
"MVMax"
— Переменные верхние границы, которыми управляют,
"MVRateMin"
— Плавающий курс, которым управляют, нижней границы изменения
"MVRateMax"
— Плавающий курс, которым управляют, верхней границы изменения
coreData
— Нелинейные параметры конфигурации MPCНелинейные параметры конфигурации MPC, которые являются постоянными во время выполнения, возвратились как структура. Эти параметры выведены из настроек контроллера в nlmpcobj
. При симуляции контроллера передайте coreData
к nlmpcmoveCodeGeneration
не изменяя параметров.
onlineData
— Онлайновый нелинейный контроллер MPC данныеОнлайновый нелинейный контроллер MPC данные, которые необходимо обновить в каждом контрольном интервале, возвратился как структура. Структура всегда содержит следующие поля.
Поле | Описание |
---|---|
ref | Выведите ссылочные значения, возвращенные как вектор-столбец из нулей с длиной |
mvTarget | Значения ссылки на переменную, которыми управляют, возвращенные как вектор-столбец из нулей с длиной Nmv, где Nmv является количеством переменных, которыми управляют. |
X0 | Исходное предположение для траектории состояния, возвращенной как вектор-столбец, равняется |
MV0 | Исходное предположение для переменной траектории, которой управляют, возвращенной как вектор-столбец, равняется |
Slack0 | Исходное предположение для слабой переменной, возвращенной как нуль. |
onlineData
может также содержать следующие поля, в зависимости от настройки контроллера и значений аргументов.
Поле | Описание |
---|---|
md | Измеренные значения воздействия — Это поле возвращено только, когда контроллер измерил входные параметры воздействия, то есть, когда |
Parameters | Значения параметров — Это поле возвращено только, когда диспетчер использует дополнительные параметры модели. |
| Вес и ограничительные значения — Каждое поле возвращено только, когда имя соответствующего поля задано с помощью field аргумент. Значение каждого поля равно соответствующему значению по умолчанию, заданному в контроллере, как возвращено в coreData . |
Для получения дополнительной информации о конфигурировании onlineData
поля, смотрите nlmpcmoveCodeGeneration
.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.