В этом примере показано, как аппроксимировать нелинейное поведение системы как массив взаимосвязанных моделей LTI.
Пример описывает линейную аппроксимацию динамики оси тангажа корпуса в области значений условий работы. Массив линейных систем, таким образом полученных, используется, чтобы создать представление Линейного варьирования параметра (LPV) динамики. Модель LPV служит приближением нелинейной динамики тангажа.
Во многих ситуациях нелинейная динамика системы должна быть аппроксимирована с помощью более простых линейных систем. Одна линейная система предоставляет разумную модель для поведения, ограниченного маленьким окружением вокруг рабочей точки нелинейной системы. Когда нелинейное поведение должно быть аппроксимировано в области значений условий работы, мы можем использовать массив линейных моделей, которые соединяются подходящими правилами интерполяции. Такая модель называется моделью LPV.
Чтобы сгенерировать модель LPV, нелинейная модель обрезается и линеаризуется по сетке рабочих точек. С этой целью операционный пробел параметрируется небольшим количеством планирования параметров. Эти параметры часто являются подмножеством входных параметров, состояний и выходных переменных нелинейной системы. Важное соображение в создании моделей LPV является идентификацией набора параметров планирования и выбором области значений значений параметров, в которых можно линеаризовать модель.
Мы иллюстрируем этот подход для аппроксимации динамики тангажа корпуса.
Рассмотрите три модели степени свободы динамики оси тангажа корпуса. Состояния являются Наземными координатами, координатами тела, углом тангажа и уровнем тангажа. Рисунок 1 обобщает отношение между инерционными и системами координат тела, углом угла тангажа, углом установки и углом тангажа.
Рисунок 1: динамика Корпуса.
Движущие силы корпуса нелинейны и аэродинамические силы, и моменты зависят от скорости и падения. Модель scdairframeTRIM
описывает эти движущие силы.
open_system('scdairframeTRIM')
Используйте скорость и угол установки как планирование параметров; то есть, обрежьте модель корпуса по сетке и значениям. Обратите внимание на то, что это два из пяти выходных параметров scdairframeTRIM
модель.
Примите, что падение варьируется между-20 и 20 градусами и что скорость варьируется между 700 и 1 400 м/с. Используйте 15 12 сетка линейно расположенных с интервалами пар для планирования:
nA = 15; % number of alpha values nV = 12; % number of V values alphaRange = linspace(-20,20,nA)*pi/180; VRange = linspace(700,1400,nV); [alpha,V] = ndgrid(alphaRange, VRange);
Для каждого условия рейса линеаризуйте динамику корпуса в обрезке (обнулите нормальное ускорение и подачу момента). Это требует вычисления отклонения лифта и уровня тангажа, которые приводят к устойчивому и.
Используйте operspec
чтобы задать условие для обрезки, используйте findop
вычислить значения для обрезки и и линеаризовать динамику корпуса для получившейся рабочей точки. Смотрите "Обрезку и Линеаризацию Корпуса" пример для деталей.
Координаты тела, известны состояния обрезкой. Поэтому необходимо предоставить соответствующие значения им, которых можно задать явным образом. Однако в этом примере, позвольте модели получить эти известные значения на основе каждой пары. Для каждого условия рейса обновите значения в модели и создайте спецификацию рабочей точки. Повторите эти шаги для всех 180 условий рейса.
clear op report for ct = 1:nA*nV alpha_ini = alpha(ct); % Incidence [rad] v_ini = V(ct); % Speed [m/s] % Specify trim condition opspec(ct) = operspec('scdairframeTRIM'); % Xe,Ze: known, not steady. opspec(ct).States(1).Known = [1;1]; opspec(ct).States(1).SteadyState = [0;0]; % u,w: known, w steady opspec(ct).States(3).Known = [1 1]; opspec(ct).States(3).SteadyState = [0 1]; % theta: known, not steady opspec(ct).States(2).Known = 1; opspec(ct).States(2).SteadyState = 0; % q: unknown, steady opspec(ct).States(4).Known = 0; opspec(ct).States(4).SteadyState = 1; end opspec = reshape(opspec, [nA nV]);
Обрежьте модель для всех заданных технических требований рабочей точки.
Options = findopOptions('DisplayReport','off', ... 'OptimizerType','lsqnonlin'); Options.OptimizationOptions.Algorithm = 'trust-region-reflective'; [op, report] = findop('scdairframeTRIM',opspec,Options);
op
массив содержит рабочие точки, найденные findop
это будет использоваться для линеаризации. report
массив содержит запись входа, выхода и значений состояния в каждой точке.
Задайте вводы и выводы линеаризации.
io = [linio('scdairframeTRIM/delta',1,'in');... % delta linio('scdairframeTRIM/Airframe Model',1,'out');... % alpha linio('scdairframeTRIM/Airframe Model',2,'out');... % V linio('scdairframeTRIM/Airframe Model',3,'out');... % q linio('scdairframeTRIM/Airframe Model',4,'out');... % az linio('scdairframeTRIM/Airframe Model',5,'out')]; % gamma
Пакет - линеаризует модель при условиях для обрезки. Храните информацию смещения линеаризации в info
структура.
[G,~,info] = linearize('scdairframeTRIM',op,io, ... linearizeOptions('StoreOffsets',true)); G = reshape(G,[nA nV]); G.u = 'delta'; G.y = {'alpha','V','q','az','gamma'}; G.SamplingGrid = struct('alpha',alpha,'V',V);
G
15 12 массив линеаризовавших моделей объекта управления при 180 условиях рейса. Движущие силы объекта варьируются существенно через конверт рейса, включая планирование местоположений, где локальные движущие силы нестабильны.
bodemag(G(3:5,:,:,:))
title('Variations in airframe dynamics')
Блок LPV System в библиотеке блоков Control System Toolbox™ упрощает симуляцию линейного параметра различные системы. Первичные данные, требуемые блоком, являются массивом системы в пространстве состояний G
это было сгенерировано пакетной линеаризацией. Мы увеличиваем это с информацией о вводе/выводе, состоянии, и утверждаем производные смещения от info
структура.
Извлеките информацию о смещении.
offsets = getOffsetsForLPV(info); xOffset = offsets.x; yOffset = offsets.y; uOffset = offsets.u; dxOffset = offsets.dx;
Откройте систему scdairframeLPV
, который содержит блок LPV System, который был сконфигурирован на основе массива линейной системы G
и различные смещения.
open_system('scdairframeLPV')
Входной сигнал был подготовлен на основе желаемой траектории корпуса. Этот u
сигнала и соответствующий временной вектор
t
сохранены в scdairframeLPVsimdata.mat
файл. Задайте начальные условия для симуляции.
alpha_ini = 0;
v_ini = 700;
x0 = [0; 700; 0; 0];
sim('scdairframeLPV')
Симуляция показывает хорошую эмуляцию ответа корпуса системой LPV. Мы выбрали очень прекрасный gridding планирования продвижения пробела к большому количеству (180) из линейных моделей. Размеры большого массива могут увеличить затраты на внедрение. Однако преимущество представлений LPV состоит в том, что мы можем настроить сетку планирования (и следовательно количество линейных систем в массиве) на основе:
Подпространство планирования заполнено ожидаемой траекторией
Уровень точности желаем в приложении
Бывшая информация помогает уменьшать область значений для переменных планирования. Последний помогает выбрать оптимальное разрешение (интервал) выборок на пробеле планирования.
Давайте построим фактическую траекторию планирования переменных в предыдущей симуляции на фоне пробела планирования с координатной сеткой. Выходные параметры регистрировались через их осциллографы (содержавший в блоке Compare Responses scdairframeLPV
).
Stable = false(nA,nV); for ct = 1:nA*nV Stable(ct ) = isstable(G(:,:,ct)); end alpha_trajectory = Alpha_V_Data.signals(1).values(:,1); V_trajectory = Alpha_V_Data.signals(2).values(:,1); plot(alpha(Stable)*180/pi,V(Stable),'g.',... alpha(~Stable)*180/pi,V(~Stable),'k.',... alpha_trajectory,V_trajectory,'r.') title('Trajectory of scheduling variables') xlabel('\alpha'); ylabel('V') legend('Stable locations','Unstable locations','Actual trajectory')
Траекторию, прослеженную в процессе моделирования, отображают красным. Обратите внимание на то, что это пересекает и стабильные области и нестабильные регионы пробела планирования. Предположим, что вы хотите реализовать эту модель на целевом компьютере для входных профилей, похожих на тот, используемый для симуляции выше при использовании наименьшего количества объема памяти. Симуляция предполагает, что траектория в основном остается в области значений на 890 - 1 200 м/с скоростей и-15 к 12 областям значений степени угла установки. Кроме того, можно исследовать увеличение интервала между точками выборки. Предположим, что вы используете только каждую третью выборку по измерению и каждую вторую выборку по измерению. Редуцированный системный массив, соответствующий этим ограничениям, может быть извлечен из G
можно следующим образом:
I1 = find(alphaRange>=-15*pi/180 & alphaRange<=12*pi/180); I2 = find(VRange>=890 & VRange<=1200); I1 = I1(1:2:end); I2 = I2(1:3:end); Gr = G(:,:,I1,I2); size(Gr)
5x2 array of state-space models. Each model has 5 outputs, 1 inputs, and 4 states.
Новая сетка выборки, Gr
, имеет более экономичный размер 5 2. Симулируйте упрощенную модель и проверяйте ее точность в репродуцирование исходного поведения.
Измените директорию в перезаписываемую директорию, поскольку модель должна была бы быть перекомпилирована
cwd = pwd; cd(tempdir) lpvblk = 'scdairframeLPV/LPV System'; set_param(lpvblk,... 'sys','Gr',... 'uOffset','uOffset(:,:,I1,I2)',... 'yOffset','yOffset(:,:,I1,I2)',... 'xOffset','xOffset(:,:,I1,I2)',... 'dxOffset','dxOffset(:,:,I1,I2)') sim('scdairframeLPV') cd(cwd)
Нет никакого значительного сокращения перекрытия между ответом исходной модели и ее прокси LPV.
Модель LPV может служить прокси для исходной системы в ситуациях, где более быстрые симуляции требуются. Линейные системы, используемые моделью LPV, могут также быть получены методами системы идентификации (с дополнительной осторожностью, требуемой обеспечить непротиворечивость состояния через массив). Модель LPV может обеспечить хороший суррогат для инициализации simulink задачи оптимизации проекта и выполнение быстрых симуляций оборудования в цикле.