Автопилот фиксированной структуры для пассажирского самолета

Этот пример показывает, как использовать slTuner и systune, чтобы настроить стандартную настройку продольного автопилота. Мы благодарим профессора Д. Алэзарда от Institut Superieur de l'Aeronautique et de l'Espace для обеспечения модели самолета и профессора Пьера Апкаряна от ONERA для разработки примера.

Модель самолета и настройка автопилота

Продольный автопилот для сверхзвукового пассажирского струйного полета в Махе 0.7 и 5 000 футов изображен в рисунке 1. Автопилот основная цель должен следовать за вертикальными ускоряющими командами, данными пилотом. Структура обратной связи состоит из внутреннего цикла, управляющего уровнем подачи и внешним циклом, управляющим вертикальным ускорением. Автопилот также включает feedforward компонент и эталонную модель, которая задает желаемый ответ на команду шага. Наконец, фильтр спада второго порядка

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

Рисунок 1: продольная настройка автопилота.

Модель самолета является моделью с 5 состояниями, переменные состояния, являющиеся аэродинамической скоростью (m/s), угол подъема (рад), угол нападения (рад), уровень подачи (rad/s) и высота (m). Отклонение лифта (рад) используется, чтобы управлять вертикальным коэффициентом загрузки. Движущие силы разомкнутого цикла включают колебание с частотой и отношением затухания = 1.7 (rad/s) и = 0.33, фугоидный режим = 0.64 (rad/s) и = 0.06 и медленный высотный режим =-0.0026.

load ConcordeData G
bode(G,{1e-3,1e2}), grid
title('Aircraft Model')

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

Настройка Setup

Когда система управления моделируется в Simulink, можно использовать интерфейс slTuner, чтобы быстро настроить настраивающуюся задачу. Откройте модель Simulink автопилота.

open_system('rct_concorde')

Сконфигурируйте интерфейс slTuner путем листинга настроенных блоков в модели Simulink (подсвеченный в оранжевом). Это автоматически выбирает все Линейные Аналитические точки в модели как интересные места для анализа и настройки.

ST0 = slTuner('rct_concorde',{'Ki','Kp','Kq','Kf','RollOff'});

Это также параметризовало каждый настроенный блок и инициализирует параметры блоков на основе их значений в модели Simulink. Обратите внимание на то, что четыре усиления Ki,Kp,Kq,Kf инициализируются, чтобы обнулить в этом примере. По умолчанию фильтр спада параметризован как типичная передаточная функция второго порядка. Параметризовать его как

создайте действительные параметры, создайте передаточную функцию, показанную выше, и сопоставьте ее с блоком RollOff.

wn = realp('wn', 3);               % natural frequency
zeta = realp('zeta',0.8);          % damping
Fro = tf(wn^2,[1 2*zeta*wn wn^2]); % parametric transfer function

setBlockParam(ST0,'RollOff',Fro)   % use Fro to parameterize "RollOff" block

Конструктивные требования

Автопилот должен быть настроен, чтобы удовлетворить три основных конструктивных требований:

1. Отслеживание заданного значения: ответ на команду должен тесно совпадать с ответом эталонной модели:

Эта эталонная модель задает хорошо ослабленный ответ с 2-секундным временем установления.

2. Высокочастотный спад: ответ с обратной связью от шумовых сигналов до должен прокрутиться от прошлых 8 рад/с с наклоном по крайней мере-40 дБ/десятилетие.

3. Запасы устойчивости: запасы устойчивости во входе объекта должны составить по крайней мере 7 дБ и 45 градусов.

Для отслеживания заданного значения мы требуем, чтобы усиление передачи с обратной связью от команды до ошибки отслеживания было маленьким в диапазоне частот [0.05,5] rad/s (вспомните, что мы не можем управлять установившейся ошибкой обнулить из-за нуля объекта в s=0). Используя несколько точек частоты, делайте набросок максимальной ошибки отслеживания как функции частоты и используйте его, чтобы ограничить усиление от.

Freqs = [0.005 0.05 5 50];
Gains = [5 0.05 0.05 5];
Req1 = TuningGoal.Gain('Nzc','e',frd(Gains,Freqs));
Req1.Name = 'Maximum tracking error';

Конструктор TuningGoal.Gain автоматически превращает эскиз максимальной погрешности в сглаженную функцию взвешивания. Используйте viewGoal, чтобы графически проверить желаемый ошибочный профиль.

viewGoal(Req1)

Повторите тот же процесс, чтобы ограничить высокочастотное усиление от шумовых входных параметров до и осуществить наклон на-40 дБ/десятилетие в диапазоне частот от 8 до 800 рад/с

Freqs = [0.8 8 800];
Gains = [10 1 1e-4];
Req2 = TuningGoal.Gain('n','delta_m',frd(Gains,Freqs));
Req2.Name = 'Roll-off requirement';

viewGoal(Req2)

Наконец, укажите вход объекта как сайт для анализа разомкнутого цикла и используйте TuningGoal.Margins, чтобы получить требование запаса устойчивости.

addPoint(ST0,'delta_m')

Req3 = TuningGoal.Margins('delta_m',7,45);

Настройка автопилота

Мы теперь готовы настроить параметры автопилота с systune. Эта команда берет ненастроенную настройку ST0 и эти три конструктивных требований и возвращает настроенную версию ST ST0. Все требования удовлетворены, когда окончательное значение - меньше чем один.

[ST,fSoft] = systune(ST0,[Req1 Req2 Req3]);
Final: Soft = 0.965, Hard = -Inf, Iterations = 97

Используйте showTunable, чтобы видеть настроенные значения блока.

showTunable(ST)
Block 1: rct_concorde/Ki =
 
  D = 
             u1
   y1  -0.02996
 
Name: Ki
Static gain.

-----------------------------------

Block 2: rct_concorde/Kp =
 
  D = 
              u1
   y1  -0.009684
 
Name: Kp
Static gain.

-----------------------------------

Block 3: rct_concorde/Kq =
 
  D = 
            u1
   y1  -0.2863
 
Name: Kq
Static gain.

-----------------------------------

Block 4: rct_concorde/Kf =
 
  D = 
             u1
   y1  -0.02267
 
Name: Kf
Static gain.

-----------------------------------

wn = 4.82
-----------------------------------
zeta = 0.513

Чтобы получить настроенное значение, используйте getBlockValue, чтобы оценить Fro для настроенных значений параметров в ST:

Fro = getBlockValue(ST,'RollOff');
tf(Fro)
ans =
 
          23.19
  ---------------------
  s^2 + 4.937 s + 23.19
 
Continuous-time transfer function.

Наконец, используйте viewGoal, чтобы графически проверить, что все требования удовлетворены.

figure('Position',[100,100,550,710])
viewGoal([Req1 Req2 Req3],ST)

Симуляции с обратной связью

Мы теперь проверяем, что настроенный автопилот удовлетворяет конструктивные требования. Сначала сравните переходной процесс с переходным процессом эталонной модели. Снова используйте getIOTransfer, чтобы вычислить настроенную передачу с обратной связью от Nzc до Nz:

Gref = tf(1.7^2,[1 2*0.7*1.7 1.7^2]);    % reference model

T = getIOTransfer(ST,'Nzc','Nz');  % transfer Nzc -> Nz

figure, step(T,'b',Gref,'b--',6), grid,
ylabel('N_z'), legend('Actual response','Reference model')

Также постройте отклонение и соответствующие вклады путей к обратной связи и feedforward:

T = getIOTransfer(ST,'Nzc','delta_m');  % transfer Nzc -> delta_m
Kf = getBlockValue(ST,'Kf');            % tuned value of Kf
Tff = Fro*Kf;         % feedforward contribution to delta_m

step(T,'b',Tff,'g--',T-Tff,'r-.',6), grid
ylabel('\delta_m'), legend('Total','Feedforward','Feedback')

Наконец, проверяйте спад и требования запаса устойчивости путем вычисления ответа разомкнутого цикла в.

OL = getLoopTransfer(ST,'delta_m',-1); % negative-feedback loop transfer
margin(OL);
grid;
xlim([1e-3,1e2]);

Диаграмма Боде подтверждает спад прошлых 8 рад/с на-40 дБ/десятилетие и указывает на запасы по амплитуде и фазе сверх 10 дБ и 70 градусов.

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

| | |

Похожие темы