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

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

Фон

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

В части 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

Используя модель "csthl20_trim" Simulink как ссылка для выбора 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). Это состоит из выбора усиления Kp, Kq, криптон, чтобы установить частоту среза 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 objects. Axes object 1 contains 120 objects of type line. These objects represent da to p, de to q, dr to r. Axes object 2 contains 120 objects of type line. These objects represent da to p, de to q, dr to r.

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

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 - Проект SISO), параметрируйте шесть расписаний усиления, когда полином появляется в альфе и бете. Снова мы используем квадратичные поверхности для пропорциональных составляющих и полилинейные поверхности для интегральных составляющих.

% 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 objects. Axes object 1 with title F r o m : blank P h i indexOf d baseline e m a n d contains 40 objects of type line. This object represents T0. Axes object 2 contains 40 objects of type line. This object represents T0. Axes object 3 contains 40 objects of type line. This object represents T0. Axes object 4 with title F r o m : blank A l p h a indexOf d baseline e m a n d contains 40 objects of type line. This object represents T0. Axes object 5 contains 40 objects of type line. This object represents T0. Axes object 6 contains 40 objects of type line. This object represents T0. Axes object 7 with title F r o m : blank B e t a indexOf d baseline e m a n d contains 40 objects of type line. This object represents T0. Axes object 8 contains 40 objects of type line. This object represents T0. Axes object 9 contains 40 objects of type line. This object represents T0.

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

Используйте те же настраивающие цели в качестве в части 3 (Управление ориентацией в автопилоте HL-20 - Проект SISO). Они включают "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 = 51

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

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

Figure contains 9 axes objects. Axes object 1 with title F r o m : blank P h i indexOf d baseline e m a n d contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 2 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 3 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 4 with title F r o m : blank A l p h a indexOf d baseline e m a n d contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 5 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 6 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 7 with title F r o m : blank B e t a indexOf d baseline e m a n d contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 8 contains 80 objects of type line. These objects represent Baseline, Tuned. Axes object 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 objects. Axes object 1 with title Gain Pphi(alpha,beta) contains an object of type surface. Axes object 2 with title Gain Palpha(alpha,beta) contains an object of type surface. Axes object 3 with title Gain Pbeta(alpha,beta) contains an object of type surface. Axes object 4 with title Gain Iphi(alpha,beta) contains an object of type surface. Axes object 5 with title Gain Ialpha(alpha,beta) contains an object of type surface. Axes object 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);

Смотрите также

Похожие темы