Это - Часть 4 ряда в качестве примера на проекте и настройке системы управления полетом для транспортного средства HL-20. Эта часть показывает, как настроить архитектуру PI MIMO для управления креном, тангажом и рысканием транспортного средства.
Этот пример использует модель HL 20, адаптированную от Корпуса Несущего тела (Aerospace Blockset) NASA HL-20, смотрите Часть 1 ряда (Обрезка и Линеаризация корпуса HL-20) для деталей. В Частях 2 и 3 мы показали, как замкнуть внутренние круги и настроить внешние контуры классической архитектуры SISO для автопилота HL-20, смотрите Угловое Управление Уровнем в автопилоте HL-20 и Управление ориентацией в автопилоте HL-20 - Проект SISO для деталей. В этом примере мы исследуем преимущества переключения на архитектуру MIMO для внешних контуров.
В этой архитектуре, трех циклах PI для тангажа, альфы, бета заменяется ПИ-контроллером с 3 выходами, с 3 входами, который смешивает тангаж, альфу и бета измерения, чтобы вычислить заданные значения внутреннего цикла p_demand, q_demand, r_demand. Интуитивно, эта архитектура должна быть более успешной при сокращении перекрестных связей между осями. Обратите внимание на то, что P и я получаем, имеют размер 3х3 матрицы, запланированные в зависимости от альфы и беты.
Чтобы начать, загрузите модель, установите CTYPE
к 3, чтобы выбрать вариант MIMO блока Controller и повторно применить шаги Части 2 для того, чтобы замкнуть внутренние круги (эта часть проекта неизменна). Обратите внимание на то, что это создает и конфигурирует slTuner
интерфейс ST0
для взаимодействия с моделью Simulink.
load_system('csthl20_control') CTYPE = 3; % MIMO 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/MIMO/Demands Point 7: Signal "p_demand", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller/MIMO/Roll-off1 Point 8: Signal "q_demand", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller/MIMO/Roll-off2 Point 9: Signal "r_demand", located at 'Output Port 1' of csthl20_control/Flight Control System/Controller/MIMO/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
Как в проекте SISO (Управление ориентацией в автопилоте HL-20 - Проект SISO), первый шаг должен получить линеаризовавшую модель "объекта", замеченного внешними контурами в каждом (альфа, бета) условие. С учетом того, что внутренний цикл получает Kp, Kq, криптон меняется (альфа, бета), заменяет блок "MIMO/Product" своим линейным эквивалентом, который является диагональной матрицей усиления
Blk = 'csthl20_control/Flight Control System/Controller/MIMO/Product'; Subs = [zeros(3) append(ss(Kp),ss(Kq),ss(Kr))]; BlockSub4 = struct('Name',Blk,'Value',Subs); ST0.BlockSubstitutions = [ST0.BlockSubstitutions ; BlockSub4];
Расписания "P" и "I" усиления инициализируются к постоянным диагональным матрицам diag([0.05, 0.05, -0.05])
. Постройте угловые ответы для этих начальных установок.
T0 = getIOTransfer(ST0,'Demand',{'Phi_deg','Alpha_deg','Beta_deg'}); step(T0,6)
Чтобы настроить MIMO получают расписания, мы используем следующие три настраивающихся гола:
Цель "Чувствительности" задать желаемую полосу пропускания (время отклика) и максимизировать разъединение в низкой частоте.
s = tf('s'); R1 = TuningGoal.Sensitivity({'Phi_deg','Alpha_deg','Beta_deg'},s); R1.Focus = [1e-2 1]; R1.LoopScaling = 'off'; viewGoal(R1)
Ограничение "Усиления" на передачу с обратной связью от угловых требований до угловых ответов. Профиль усиления выбран, чтобы осуществить соответствующий спад и предельное перерегулирование (который связан с горбом около перекрестного соединения).
MaxGain = 1.2 * (10/(s+10))^2; % max gain profile R2 = TuningGoal.Gain('Demands',{'Phi_deg','Alpha_deg','Beta_deg'},MaxGain); viewGoal(R2)
Цель "Полей" потребовать запасов по амплитуде по крайней мере 7 дБ и запасов по фазе по крайней мере 45 градусов (в дисковом смысле поля).
R3 = TuningGoal.Margins('da;de;dr',7,45);
Расписания усиления для ПИ-контроллера MIMO заданы блоками "P" и "I" в архитектуре MIMO. Вспомните, что эти блоки выводят 3х3 матрицы и реализуют передаточную функцию MIMO:
Для пользы рисунка мы используем блок MATLAB function, чтобы реализовать расписание пропорциональной составляющей и блок Matrix Interpolation, чтобы реализовать расписание интегральной составляющей. Блок Matrix Interpolation живет в библиотеке "Simulink Extras" и является интерполяционной таблицей, где каждая запись таблицы является матрицей.
Чтобы настроить P и я получаю расписания, отмечаю соответствующие блоки как настраиваемые в slTuner
интерфейс.
TunedBlocks = {'MIMO/P' , 'MIMO/I'}; 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 gain matrix alphabetaBasis = polyBasis('canonical',2,2); P0 = diag([0.05 0.05 -0.05]); % initial (constant) value PS = tunableSurface('P', P0, SG, alphabetaBasis); ST0.setBlockParam('P',PS); % Integral gain matrix alphaBasis = @(alpha) alpha; betaBasis = @(beta) abs(beta); alphabetaBasis = ndBasis(alphaBasis,betaBasis); I0 = diag([0.05 0.05 -0.05]); IS = tunableSurface('I', I0, SG, alphabetaBasis); ST0.setBlockParam('I',IS);
Наконец, используйте systune
настроить 6 поверхностей усиления против трех настраивающихся голов.
ST = systune(ST0,[R1 R2 R3]);
Final: Soft = 1.13, Hard = -Inf, Iterations = 107
Окончательное значение целевой функции указывает, что настраивающимся целям почти удовлетворяют (настраивающейся цели удовлетворяют, когда ее "значение" меньше одного). Постройте угловые ответы с обратной связью и сравните с базовым проектом.
T = getIOTransfer(ST,'Demand',{'Phi_deg','Alpha_deg','Beta_deg'}); step(T0,T,6) legend('Baseline','Tuned','Location','SouthEast')
Эти ответы показывают значительные сокращения перерегулирования и перекрестную связь, когда по сравнению с SISO проектируют.
Чтобы далее подтвердить этот проект, продвиньте настроенные поверхности усиления к модели Simulink.
writeBlockValue(ST)
Для блока "I" Matrix Interpolation это производит поверхность усиления в табличных точках останова и обновляет табличные данные в рабочем пространстве модели. Для блока MATLAB function "P", это генерирует код MATLAB для уравнений поверхности усиления. Вы видите этот код путем двойного клика на блоке.
Если вы продвигаете усиления к Simulink, настройка архитектуры MIMO завершена, и можно симулировать ее поведение во время приземляющегося подхода.
Эти ответы не очень отличаются от проекта SISO (Управление ориентацией в автопилоте HL-20 - Проект SISO) из-за умеренных требований в течение маневра. Преимущества проекта MIMO больше отобразились бы в более сложном маневре.