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

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

Фон

Этот пример использует модель HL-20, адаптированную из планера НАСА HL-20 грузоподъемного тела (Aerospace Blockset), см. Часть 1 серии (Обрезка и линеаризация HL-20 планера) для получения дополнительной информации. Автопилот, контролирующий положение самолета, состоит из трёх внутренних циклов и трех внешних контуров.

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

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

Получение моделей объекта управления

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

load csthl20_TrimData G7 CS

Используя модель Simulink «csthl20_trim» в качестве ссылки для выбора I/Os, создайте желаемые модели объекта управления путем соединения G7 и CS последовательно. Не забудьте перевести phi, альфа, бета из радианов в степени.

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 Autopilot). Это состоит из выбора коэффициентов усиления 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 (Attitude Control в 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, который принял ошибки в угловых положениях phi, альфа, бета-версии и вычисляет 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);

См. также

Похожие темы