exponenta event banner

Контроль положения в автопилоте HL-20 - проектирование SISO

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

Фон

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

В части 2 (Угловой Контроль за Уровнем в автопилоте HL-20), мы показали, как замкнуть внутренние круги, управляющие угловыми ставками p, q, r. Следующие команды описывают соответствующие шаги. Обратите внимание, что это создает и настраивает slTuner интерфейс ST0 для взаимодействия с моделью Simulink.

load_system('csthl20_control')
CTYPE = 2;  % Select SISO architecture
HL20recapPart2

ST0
 
slTuner tuning interface for "csthl20_control":

No tuned blocks. Use the addBlock command to add new blocks.
9 Analysis points: 
--------------------------
Point 1: Signal "da;de;dr", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller
Point 2: Signal "pqr", located at 'Output Port 2' of csthl20_control/HL20 Airframe
Point 3: 'Output Port 1' of csthl20_control/Flight Control System/Alpha_deg
Point 4: 'Output Port 1' of csthl20_control/Flight Control System/Beta_deg
Point 5: 'Output Port 1' of csthl20_control/Flight Control System/Phi_deg
Point 6: 'Output Port 1' of csthl20_control/Flight Control System/Controller/Classical/Demands
Point 7: Signal "p_demand", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller/Classical/Roll-off1
Point 8: Signal "q_demand", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller/Classical/Roll-off2
Point 9: Signal "r_demand", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller/Classical/Roll-off3
 
No permanent openings. Use the addOpening command to add new permanent openings.
Properties with dot notation get/set access:
      Parameters         : [] 
      OperatingPoints    : [] (model initial condition will be used.)
      BlockSubstitutions : [3x1 struct]
      Options            : [1x1 linearize.SlTunerOptions]
      Ts                 : 0

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

Теперь мы переключаем фокус на три запланированных по коэффициенту усиления ПИ-контура, контролирующие крен (phi), угол атаки (alpha) и угол бокового скольжения (beta). Эти контуры можно настраивать по одному (3 контура и 40 рабочих точек равны 120 расчетным точкам). Вы также можете использовать pidtune настройка коэффициентов усиления PI в пакетном режиме для конкретных требований к целевой полосе пропускания и запасам по фазе. Оба подхода имеют оговорки:

  • Трудно учесть петлевые взаимодействия.

  • Выигрыши, полученные в каждой точке проектирования, могут быть противоречивыми и требовать сглаживания в разных рабочих точках.

Альтернативным подходом является концепция «Настройки поверхности усиления» [1], в которой схемы усиления P (альфа, бета) и I (альфа, бета) параметризуются как полиномиальные поверхности и используютсяsystune для настройки полиномиальных коэффициентов. Этот подход охватывает все рабочие точки одновременно и может учитывать взаимодействия петель, в частности, для соображений запаса устойчивости. Вот такой подход представлен здесь.

Чтобы настроить внешние петли, мы должны замкнуть внутренние петли и получить линеаризованную модель «растения», видимую внешними петлями при каждом (альфа, бета) условии. Мы могли бы спроситьslTuner для вычисления соответствующей передаточной функции, но это эффективно фиксировало бы коэффициенты усиления внутреннего контура Kp, Kq, Kr к их значениям в рабочем состоянии по умолчанию. Чтобы получить правильную линеаризацию, мы должны сказатьslTuner что эти выигрыши варьируются с (альфа, бета). Подстановка блоков - это снова самый простой способ сделать это. Чтобы отметить Kp как изменяющийся, найдите блок Product, используемый для умножения сигнала ошибки на Kp, и замените его массивом коэффициентов усиления, по одному для каждого (альфа, бета) условия.

ProductBlk = 'csthl20_control/Flight Control System/Controller/Classical/Product1';
BlockSub4 = struct('Name',ProductBlk,'Value',[0 ss(Kp)]);

Легко проверить, что эта блочная линеаризация представляет собой умножение сигнала ошибки на переменную величину Kp, вычисленную выше. Аналогично, замените соответствующие блоки продукта для Kq и Kr путем изменения коэффициентов усиления.

ProductBlk = 'csthl20_control/Flight Control System/Controller/Classical/Product3';
BlockSub5 = struct('Name',ProductBlk,'Value',[0 ss(Kq)]);

ProductBlk = 'csthl20_control/Flight Control System/Controller/Classical/Product4';
BlockSub6 = struct('Name',ProductBlk,'Value',[0 ss(Kr)]);

ST0.BlockSubstitutions = [ST0.BlockSubstitutions ; BlockSub4 ; BlockSub5 ; BlockSub6];

Теперь можно построить график угловых откликов для начальных настроек графика усиления в модели.

T0 = getIOTransfer(ST0,'Demand',{'Phi_deg','Alpha_deg','Beta_deg'});
step(T0,6)

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

Основные цели управления включают полосу пропускания (время отклика) и пределы стабильности. Используйте цели «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';

Используйте цель «Margins», чтобы установить адекватные пределы стабильности в каждом контуре и по контурам. Эта цель основана на понятии полей диска, которое гарантирует стабильность перед лицом одновременного усиления и фазовых изменений во всех трех контурах. Поскольку целевые поля в 7 дБ и 40 градусов трудно получить для экстремальных ориентаций (углы сетки (альфа, бета)), мы используем переменную цель, чтобы ослабить требования к коэффициенту усиления и пределу фазы в углах.

% 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);

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

Чтобы настроить графики усиления P и I для внешнего цикла, отметьте три функциональных блока MATLAB и три блока таблицы поиска как настраиваемые.

TunedBlocks = {'P phi','P alpha','P beta','I phi','I alpha','I beta'};
ST0.addBlock(TunedBlocks)

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

% 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);
ST0.setBlockParam('P phi',P_PHI);
ST0.setBlockParam('P alpha',P_ALPHA);
ST0.setBlockParam('P beta',P_BETA);

% 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);
ST0.setBlockParam('I phi',I_PHI);
ST0.setBlockParam('I alpha',I_ALPHA);
ST0.setBlockParam('I beta',I_BETA);

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

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

ST = systune(ST0,[R1 R2 R3]);
Final: Soft = 1.03, Hard = -Inf, Iterations = 41

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

T = getIOTransfer(ST,'Demand',{'Phi_deg','Alpha_deg','Beta_deg'});
step(T0,T,6)
legend('Baseline','Tuned','Location','SouthEast')

Результаты сопоставимы с базовой линией с меньшими колебаниями в откликах валка и бокового выступа и уменьшенным количеством поперечного соединения. Использовать viewSurf для осмотра настроенных поверхностей усиления.

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

Проверка

Для дальнейшей проверки этой конструкции переместите настроенные поверхности усиления в модель Simulink.

writeBlockValue(ST)

Для трех блоков таблицы поиска «I phi», «I alpha», «I beta», writeBlockValue выполняет выборку поверхностей усиления в точках останова таблицы и обновляет данные таблицы в рабочем пространстве модели. Для функциональных блоков MATLAB «P phi», «P alpha», «P beta», writeBlockValue генерирует код MATLAB для уравнений поверхности усиления. Например, код для блока «P phi» выглядит как

Simulink Coder автоматически превращает этот код MATLAB в эффективный встроенный код C. Использование таблиц подстановки или функциональных блоков MATLAB зависит от приложения. Опция MATLAB Function (функция MATLAB) обеспечивает плавное изменение коэффициентов усиления как функции альфа и бета (отсутствие искривлений в точках останова). Он также может быть более эффективным с точки зрения памяти, поскольку ему необходимо только сохранять коэффициенты полиномиального уравнения для поверхности усиления. С другой стороны, оценка усиления в данной (альфа, бета) точке может занять несколько больше операций, чем в таблице поиска, и дальнейшая корректировка усиления проще в таблице поиска.

Как только вы передвинули выигрыш в Simulink, настройка автопилота завершена, и вы можете смоделировать его поведение во время захода на посадку.

Производительность удовлетворительна, но линейные ответы показали значительное количество перекрестной связи между осями, и мы не смогли полностью достичь цели пределов стабильности в угловых точках (альфа, бета) диапазона. Будет ли полезно использовать архитектуру MIMO, которая объединяет все три измерения phi, alpha, beta для вычисления отклонений поверхности? Эта идея дополнительно изучена в Части 4 этой серии (Управление отношением в HL-20 Autopilot - MIMO Design).

Ссылки

[1] П. Гахинет и П. Апкарян, «Автоматизированная настройка систем управления с планированием усиления», в Proc. IEEE Conf. Decision and Control, Dec 2013.

См. также

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