exponenta event banner

Рабочий процесс MATLAB для настройки автопилота HL-20

Это часть 5 примера серии по проектированию и настройке системы управления полетом для HL-20 транспортного средства. В этой части показано, как выполнять большую часть конструкции в MATLAB без взаимодействия с моделью Simulink.

Фон

В этом примере используется модель HL-20, адаптированная из NASA HL-20 Lifting Body Airframe (Aerospace Blockset), см. Часть 1 серии (Trimming and Linearization of the HL-20 Airfair) для получения подробной информации. Автопилот, контролирующий положение самолета, состоит из трех внутренних петель и трех внешних петель.

В части 2 (Угловой Контроль за Уровнем в автопилоте HL-20) и Части 3 (Контроль за отношением в автопилоте HL-20 - Дизайн SISO), мы показали, как замкнуть внутренние круги и настроить графики выгоды для внешних петель. В этих примерах использовались slTuner интерфейс для взаимодействия с моделью Simulink, получения линеаризованных моделей и ответов системы управления и возврата настроенных значений в Simulink.

Для простых архитектур и быстрых итераций конструкции может быть предпочтительным (и концептуально проще) манипулировать линеаризованными моделями в MATLAB и использовать такие основные команды, как feedback для закрытия контуров. В этом примере показано, как выполнять шаги проектирования деталей 2 и 3 в MATLAB.

Получение моделей завода

Для настройки автопилота нужны линеаризованные модели передаточной функции от отклонений до углового положения и скоростей. Чтобы сделать это, начните с результатов «Отделки и Линеаризуйте» шаг (см. Отделку и Линеаризацию корпуса HL-20). Напомним, что G7 является семигосударственной линейной моделью планера при 40 различных (альфа, бета) условиях, иCS - линеаризация блока выбора элементов управления.

load csthl20_TrimData G7 CS

Используя модель Simulink «csthl20_trim» в качестве ссылки для выбора ввода-вывода, создайте нужные модели завода путем подключения G7 и CS в сериях. Не забудьте перевести фи, альфа, бета из радиан в градусы.

r2d = 180/pi;
G = diag([1 1 1 r2d r2d r2d]) * G7([4:7 31:32],1:6) * CS(:,1:3);

G.InputName = {'da','de','dr'};
G.OutputName = {'p','q','r','Phi_deg','Alpha_deg','Beta_deg'};

size(G)
8x5 array of state-space models.
Each model has 6 outputs, 3 inputs, and 7 states.

Это дает нам массив моделей растений по сетке 8 на 5 условий (альфа, бета), используемых для обрезки.

Закрытие внутренних контуров

Чтобы замкнуть внутренние круги, мы выполняем ту же процедуру как в части 2 (Угловой Контроль за Уровнем в автопилоте HL-20). Это состоит в выборе коэффициента усиления Kp, Kq, Kr для установки частоты пересечения p, q, r контуров на 30, 22,5 и 37,5 рад/с соответственно.

% Compute Kp,Kq,Kr for each (alpha,beta) condition.
Gpqr = G({'p','q','r'},:);
Kp = 1./abs(evalfr(Gpqr(1,1),30i));
Kq = -1./abs(evalfr(Gpqr(2,2),22.5i));
Kr = -1./abs(evalfr(Gpqr(3,3),37.5i));

bode(Gpqr(1,1)*Kp,Gpqr(2,2)*Kq,Gpqr(3,3)*Kr,{1e-1,1e3}), grid
legend('da to p','de to q','dr to r')

Figure contains 2 axes. Axes 1 contains 120 objects of type line. These objects represent da to p, de to q, dr to r. Axes 2 contains 120 objects of type line. These objects represent da to p, de to q, dr to r.

Использовать feedback для замыкания трех внутренних контуров. Вставьте точку анализа на заводских входах da, de, dr для последующей оценки полей устойчивости.

Cpqr = append(ss(Kp),ss(Kq),ss(Kr));
APu = AnalysisPoint('u',3);  APu.Location = {'da','de','dr'};

Gpos = feedback(G * APu * Cpqr, eye(3), 1:3, 1:3);
Gpos.InputName = {'p_demand','q_demand','r_demand'};

size(Gpos)
8x5 array of generalized state-space models.
Each model has 6 outputs, 3 inputs, 7 states, and 1 blocks.

Обратите внимание, что эти команды легко управляют тем, что мы имеем дело с массивами растений и выигрышей, соответствующих различным (альфа, бета) условиям.

Настройка внешних контуров

Следующий переход к внешним контурам. У нас уже есть массив линейных моделей Gpos для «растения», видимого внешними петлями. Как и в Части 3 (Управление ориентацией в HL-20 Autopilot - SISO Design), параметризовать шесть графиков усиления как полиномиальные поверхности в альфа и бета. Снова мы используем квадратичные поверхности для пропорциональных коэффициентов усиления и многолинейные поверхности для интегральных коэффициентов усиления.

% Grid of (alpha,beta) design points
alpha_vec = -10:5:25;	 % Alpha Range
beta_vec = -10:5:10;     % Beta Range
[alpha,beta] = ndgrid(alpha_vec,beta_vec); 
SG = struct('alpha',alpha,'beta',beta);

% Proportional gains
alphabetaBasis = polyBasis('canonical',2,2);
P_PHI = tunableSurface('Pphi', 0.05, SG, alphabetaBasis);
P_ALPHA = tunableSurface('Palpha', 0.05, SG, alphabetaBasis);
P_BETA = tunableSurface('Pbeta', -0.05, SG, alphabetaBasis);

% Integral gains
alphaBasis = @(alpha) alpha;
betaBasis = @(beta) abs(beta);
alphabetaBasis = ndBasis(alphaBasis,betaBasis);
I_PHI = tunableSurface('Iphi', 0.05, SG, alphabetaBasis);
I_ALPHA = tunableSurface('Ialpha', 0.05, SG, alphabetaBasis);
I_BETA = tunableSurface('Ibeta', -0.05, SG, alphabetaBasis);

Общий контроллер для внешнего контура представляет собой диагональный контроллер 3 на 3 PI, принимающий ошибки в угловых положениях phi, alpha, beta и вычисляющий требования скорости p_demand,q_demand,r_demand.

KP = append(P_PHI,P_ALPHA,P_BETA);
KI = append(I_PHI,I_ALPHA,I_BETA);
Cpos = KP + KI * tf(1,[1 0]);

Наконец, используйте feedback для получения перестраиваемой модели с замкнутым контуром внешних контуров. Чтобы включить настройку и анализ по замкнутому контуру, вставьте точки анализа на выходе установки.

RollOffFilter = tf(10,[1 10]);
APy = AnalysisPoint('y',3);  APy.Location = {'Phi_deg','Alpha_deg','Beta_deg'};

T0 = feedback(APy * Gpos(4:6,:) * RollOffFilter * Cpos ,eye(3));
T0.InputName = {'Phi_demand','Alpha_demand','Beta_demand'};
T0.OutputName = {'Phi_deg','Alpha_deg','Beta_deg'};

Можно построить график откликов с замкнутым контуром для начальных настроек поверхности усиления (постоянное усиление 0,05).

step(T0,6)

Figure contains 9 axes. Axes 1 with title From: Phi_demand contains 40 objects of type line. This object represents T0. Axes 2 contains 40 objects of type line. This object represents T0. Axes 3 contains 40 objects of type line. This object represents T0. Axes 4 with title From: Alpha_demand contains 40 objects of type line. This object represents T0. Axes 5 contains 40 objects of type line. This object represents T0. Axes 6 contains 40 objects of type line. This object represents T0. Axes 7 with title From: Beta_demand contains 40 objects of type line. This object represents T0. Axes 8 contains 40 objects of type line. This object represents T0. Axes 9 contains 40 objects of type line. This object represents T0.

Настройка целей

Используйте те же цели настройки, что и в Части 3 (Управление отношением в HL-20 Autopilot - SISO Design). К ним относятся цели «MinLoopGain» и «MaxLoopGain» для установки коэффициента усиления внешних контуров между 0,5 и 5 рад/с.

R1 = TuningGoal.MinLoopGain({'Phi_deg','Alpha_deg','Beta_deg'},0.5,1);  
R1.LoopScaling = 'off';
R2 = TuningGoal.MaxLoopGain({'Phi_deg','Alpha_deg','Beta_deg'},tf(50,[1 10 0]));
R2.LoopScaling = 'off';

Они также включают в себя изменяющуюся цель «полей», чтобы навязать адекватные пределы стабильности в каждом контуре и по контурам.

% Gain margins vs (alpha,beta)
GM = [...
   6     6     6     6     6
   6     6     7     6     6
   7     7     7     7     7
   7     7     7     7     7
   7     7     7     7     7
   7     7     7     7     7
   6     6     7     6     6
   6     6     6     6     6];

% Phase margins vs (alpha,beta)
PM = [...
   40         40          40         40        40
   40         40          45         40        40
   45         45          45         45        45
   45         45          45         45        45
   45         45          45         45        45
   45         45          45         45        45
   40         40          45         40        40
   40         40          40         40        40];

% Create varying goal
FH = @(gm,pm) TuningGoal.Margins({'da','de','dr'},gm,pm);
R3 = varyingGoal(FH,GM,PM);

Настройка графика усиления

Теперь вы можете использовать systune для формирования шести поверхностей усиления в соответствии с целями настройки во всех 40 точках проектирования.

T = systune(T0,[R1 R2 R3]);
Final: Soft = 1.03, Hard = -Inf, Iterations = 52

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

step(T0,T,6)
legend('Baseline','Tuned','Location','SouthEast')

Figure contains 9 axes. Axes 1 with title From: Phi_demand contains 80 objects of type line. These objects represent Baseline, Tuned. Axes 2 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes 3 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes 4 with title From: Alpha_demand contains 80 objects of type line. These objects represent Baseline, Tuned. Axes 5 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes 6 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes 7 with title From: Beta_demand contains 80 objects of type line. These objects represent Baseline, Tuned. Axes 8 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes 9 contains 80 objects of type line. These objects represent Baseline, Tuned.

Результаты соответствуют результатам, полученным в частях 2 и 3. Настроенные поверхности усиления также аналогичны.

clf
% NOTE: setBlockValue updates each gain surface with the tuned coefficients in T
subplot(3,2,1), viewSurf(setBlockValue(P_PHI,T))
subplot(3,2,3), viewSurf(setBlockValue(P_ALPHA,T))
subplot(3,2,5), viewSurf(setBlockValue(P_BETA,T))
subplot(3,2,2), viewSurf(setBlockValue(I_PHI,T))
subplot(3,2,4), viewSurf(setBlockValue(I_ALPHA,T))
subplot(3,2,6), viewSurf(setBlockValue(I_BETA,T))

Figure contains 6 axes. Axes 1 with title Gain Pphi(alpha,beta) contains an object of type surface. Axes 2 with title Gain Palpha(alpha,beta) contains an object of type surface. Axes 3 with title Gain Pbeta(alpha,beta) contains an object of type surface. Axes 4 with title Gain Iphi(alpha,beta) contains an object of type surface. Axes 5 with title Gain Ialpha(alpha,beta) contains an object of type surface. Axes 6 with title Gain Ibeta(alpha,beta) contains an object of type surface.

Теперь можно использовать evalSurf для выборки поверхностей усиления и обновления таблиц поиска в модели Simulink. Вы также можете использовать codegen способ формирования кода для уравнений поверхности усиления. Например,

% Generate code for "P phi" block
MCODE = codegen(setBlockValue(P_PHI,T));

% Get tuned values for the "I phi" lookup table
Kphi = evalSurf(setBlockValue(I_PHI,T),alpha_vec,beta_vec);

См. также

Связанные темы