exponenta event banner

Настройка запланированного трехконтурного автопилота усиления

В этом примере используется systune для создания графиков плавного усиления для трехконтурного автопилота.

Модель планера и трехконтурный автопилот

В этом примере используется трехстепенная модель динамики оси тангажа планера. Состояния - это координаты Земли, $(X_e,Z_e)$координаты тела, $(u,w)$угол тангажа $\theta$и скорость тангажа. $q = \dot\theta$На следующем рисунке представлена взаимосвязь между инерциальной рамой и рамой корпуса, углом траектории полета, $\gamma$углом падения и $\alpha$углом наклона.$\theta$

Мы используем классическую трехконтурную конструкцию автопилота для контроля угла траектории полета. $\gamma$Этот автопилот регулирует траекторию полета, доставляя адекватные всплески нормального ускорения ($a_z$ускорение вдоль). $w$В свою очередь, нормальное ускорение создается регулировкой отклонения лифта для$\delta$ создания качки и изменения величины подъема. Автопилот использует пропорциональное-интегральное (PI) управление в контуре скорости основного тона и$q$ пропорциональное управление в$a_z$ контурах и.$\gamma$ Система замкнутого контура (планер и автопилот) смоделирована в Simulink.

open_system('rct_airframeGS')

Планирование усиления автопилота

Динамика планера нелинейна и аэродинамические силы и моменты зависят от скорости$V$ и падения. $\alpha$Для получения подходящей производительности на протяжении всего$(\alpha,V)$ полета прирост автопилота должен регулироваться как функция и$\alpha$ для$V$ компенсации изменений в динамике установки. Этот процесс регулировки называется «планированием усиления» и$\alpha,V$ называется переменными планирования. В модели Simulink графики усиления реализуются как таблицы поиска, управляемые измерениями и.$\alpha$$V$

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

  1. Обрезка и линеаризация установки при каждом рабочем состоянии

  2. Настройка коэффициентов усиления контроллера для линеаризованной динамики при каждом рабочем состоянии

  3. Согласование значений коэффициента усиления для обеспечения плавного перехода между рабочими условиями.

В этом примере комбинируются шаги 2 и 3 путем параметризации коэффициентов усиления автопилота в качестве полиномов первого порядка и$\alpha,V$ непосредственной настройки коэффициентов полинома для всей огибающей полета. Этот подход исключает этап 3 и гарантирует плавные изменения коэффициента усиления в зависимости от$\alpha$ и. $V$Кроме того, коэффициенты графика усиления могут быть автоматически настроены на systune.

Обрезка и линеаризация

Предположим, что частота падения$\alpha$ колеблется от -20 до 20 градусов и скорость$V$ колеблется от 700 до 1400 м/с. При пренебрежении гравитацией динамика планера симметрична в. $\alpha$Поэтому рассмотрим только положительные значения. $\alpha$Используйте сетку 5 на 9 из линейно разнесенных$(\alpha,V)$ пар для покрытия огибающей полета.

nA = 5;  % number of alpha values
nV = 9;  % number of V values
[alpha,V] = ndgrid(linspace(0,20,nA)*pi/180,linspace(700,1400,nV));

Для каждого условия полета $(\alpha,V)$провести линеаризацию динамики планера при тримме (нулевом нормальном разгоне и креновом моменте). Это требует вычисления отклонения подъемника$\delta$ и скорости наклона$q$, которые приводят к устойчивому и$w$. Для $q$этого сначала изолировать модель планера в отдельной модели Simulink.

mdl = 'rct_airframeTRIM';
open_system(mdl)

Использовать operspec чтобы задать условие обрезки, используйте findop для вычисления значений обрезки$\delta$ и $q$и линеаризации динамики планера для полученных рабочих точек. Дополнительные сведения см. в разделе Обрезка и линеаризация планера (Simulink Control Design). Повторите эти шаги для 45 условий полета.$(\alpha,V)$

Вычислите условие обрезки для каждой$(\alpha,V)$ пары.

for ct=1:nA*nV
   alpha_ini = alpha(ct);      % Incidence [rad]
   v_ini = V(ct);              % Speed [m/s]

   % Specify trim condition
   opspec(ct) = operspec(mdl);
   % Xe,Ze: known, not steady
   opspec(ct).States(1).Known = [1;1];
   opspec(ct).States(1).SteadyState = [0;0];
   % u,w: known, w steady
   opspec(ct).States(3).Known = [1 1];
   opspec(ct).States(3).SteadyState = [0 1];
   % theta: known, not steady
   opspec(ct).States(2).Known = 1;
   opspec(ct).States(2).SteadyState = 0;
   % q: unknown, steady
   opspec(ct).States(4).Known = 0;
   opspec(ct).States(4).SteadyState = 1;
end
opspec = reshape(opspec,[nA nV]);

Обрезать модель для заданных спецификаций.

Options = findopOptions('DisplayReport','off');
op = findop(mdl,opspec,Options);

Линеаризация модели в условиях обрезки.

G = linearize(mdl,op);
G.u = 'delta';
G.y = {'alpha','V','q','az','gamma','h'};
G.SamplingGrid = struct('alpha',alpha,'V',V);

Этот процесс позволяет получить массив линеаризованных моделей установок 5 на 9 при 45 условиях полета. $(\alpha,V)$Динамика растения существенно варьирует по всей оболочке полета.

sigma(G)
title('Variations in airframe dynamics')

Настраиваемая поверхность усиления

Автопилот состоит из четырех коэффициентов усиления$K_p, K_i, K_a, K_g$, которые должны быть «запланированы» (скорректированы) как функция$\alpha$ и. $V$Практически это означает настройку 88 значений в каждой из соответствующих четырех таблиц преобразования. Вместо настройки каждой записи таблицы отдельно параметризуйте коэффициенты усиления как двумерные поверхности усиления, например, поверхности с простой многолинейной зависимостью от и$\alpha$:$V$

$$ K(\alpha,V) = K_0 + K_1 \alpha + K_2 V + K_3 \alpha V $$.

Это сокращает число переменных с 88 до 4 для каждой таблицы подстановки. Используйте tunableSurface объект для параметризации каждой усиливающей поверхности. Обратите внимание, что:

  • TuningGrid задает «сетку настройки» (точки проектирования). Эта сетка должна соответствовать той, которая используется для линеаризации, но не должна соответствовать точкам останова таблицы закольцовывания

  • ShapeFcn определяет базовые функции для параметризации поверхности (, $\alpha$и$V$)$\alpha V$

Каждая поверхность инициализируется с постоянным усилением, используя результаты настройки для$\alpha$ = 10 ° и =$V$ 1050 м/с (конструкция среднего диапазона).

TuningGrid = struct('alpha',alpha,'V',V);
ShapeFcn = @(alpha,V) [alpha,V,alpha*V];

Kp = tunableSurface('Kp',0.1, TuningGrid,ShapeFcn);
Ki = tunableSurface('Ki',2, TuningGrid,ShapeFcn);
Ka = tunableSurface('Ka',0.001, TuningGrid,ShapeFcn);
Kg = tunableSurface('Kg',-1000, TuningGrid,ShapeFcn);

Далее создать slTuner интерфейс для настройки поверхностей усиления. Замена блока используется для замены нелинейной модели растения линеаризованными моделями по сетке настройки. Использовать setBlockParam для связывания настраиваемых поверхностей усиления Kp, Ki, Ka, Kg с одноименными блоками Интерполяции.

BlockSubs = struct('Name','rct_airframeGS/Airframe Model','Value',G);
ST0 = slTuner('rct_airframeGS',{'Kp','Ki','Ka','Kg'},BlockSubs);

% Register points of interest
ST0.addPoint({'az_ref','az','gamma_ref','gamma','delta'})

% Parameterize look-up table blocks
ST0.setBlockParam('Kp',Kp,'Ki',Ki,'Ka',Ka,'Kg',Kg);

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

systune может автоматически настраивать коэффициенты усиления поверхности для всей огибающей полета. Использовать TuningGoal объекты для определения целей производительности:

  • $\gamma$ цикл: Отслеживание уставки с 1 секундным временем отклика, менее 2% погрешности установившегося состояния и менее 30% погрешности пика.

Req1 = TuningGoal.Tracking('gamma_ref','gamma',1,0.02,1.3);
viewGoal(Req1)

  • $a_z$ Контур: Обеспечить хорошее отклонение возмущений на низкой частоте (для отслеживания требований ускорения) и более 10 рад/с (чтобы быть нечувствительным к помехам измерения). Нарушение вводится в az_ref местоположение.

RejectionProfile = frd([0.02 0.02 1.2 1.2 0.1],[0 0.02 2 15 150]);
Req2 = TuningGoal.Gain('az_ref','az',RejectionProfile);
viewGoal(Req2)

  • $q$ loop: Обеспечить хорошее отклонение возмущений до 10 рад/с. Нарушение вводится на входе в установку delta.

Req3 = TuningGoal.Gain('delta','az',600*tf([0.25 0],[0.25 1]));
viewGoal(Req3)

  • Переходные процессы: обеспечить минимальный коэффициент демпфирования 0,35 для переходных процессов без колебаний

MinDamping = 0.35;
Req4 = TuningGoal.Poles(0,MinDamping);

Используя systune, настройте 16 коэффициентов усиления поверхности, чтобы наилучшим образом соответствовать этим требованиям к производительности при всех 45 условиях полета.

ST = systune(ST0,[Req1 Req2 Req3 Req4]);
Final: Soft = 1.13, Hard = -Inf, Iterations = 57

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

% Get tuned gain surfaces.
TGS = getBlockParam(ST);

% Plot gain surfaces.
clf
subplot(2,2,1)
viewSurf(TGS.Kp)
title('Kp')
subplot(2,2,2)
viewSurf(TGS.Ki)
title('Ki')
subplot(2,2,3)
viewSurf(TGS.Ka)
title('Ka')
subplot(2,2,4)
viewSurf(TGS.Kg)
title('Kg')

Проверка

Сначала проверьте настроенный автопилот при рассмотренных выше 45 условиях полета. Постройте график реакции на шаговое изменение угла траектории полета и реакции на шаговое возмущение при отклонении лифта.

clf
subplot(2,1,1)
step(getIOTransfer(ST,'gamma_ref','gamma'),5)
grid
title('Tracking of step change in flight path angle')
subplot(2,1,2)
step(getIOTransfer(ST,'delta','az'),3)
grid
title('Rejection of step disturbance at plant input')

Ответы удовлетворительны при всех условиях полета. Далее проведите проверку автопилота по нелинейной модели планера. Первое использование writeBlockValue для применения результатов настройки к модели Simulink. Это вычисляет каждую формулу поверхности усиления в точках останова, указанных в двух блоках Prelookup, и записывает результат в соответствующий блок интерполяции.

writeBlockValue(ST)

Имитировать характеристики автопилота для маневра, который пропускает планер через большую часть его полетной оболочки. Приведенный ниже код эквивалентен нажатию кнопки Play в модели Simulink и проверке ответов в блоках Scope.

% Specify the initial conditions.
h_ini = 1000;
alpha_ini = 0;
v_ini = 700;

% Simulate the model.
SimOut = sim('rct_airframeGS', 'ReturnWorkspaceOutputs', 'on');

% Extract simulation data.
SimData = get(SimOut,'sigsOut');
Sim_gamma = getElement(SimData,'gamma');
Sim_alpha = getElement(SimData,'alpha');
Sim_V = getElement(SimData,'V');
Sim_delta = getElement(SimData,'delta');
Sim_h = getElement(SimData,'h');
Sim_az = getElement(SimData,'az');
t = Sim_gamma.Values.Time;

% Plot the main flight variables.
clf
subplot(2,1,1)
plot(t,Sim_gamma.Values.Data(:,1),'r--',t,Sim_gamma.Values.Data(:,2),'b')
grid
legend('Commanded','Actual','location','SouthEast')
title('Flight path angle \gamma in degrees')
subplot(2,1,2)
plot(t,Sim_delta.Values.Data)
grid
title('Elevator deflection \delta in degrees')

subplot(2,1,1)
plot(t,Sim_alpha.Values.Data)
grid
title('Incidence \alpha in degrees')
subplot(2,1,2)
plot(t,Sim_V.Values.Data)
grid
title('Speed V in m/s')

subplot(2,1,1)
plot(t,Sim_h.Values.Data)
grid
title('Altitude h in meters')
subplot(2,1,2)
plot(t,Sim_az.Values.Data)
grid
title('Normal acceleration a_z in g''s')

Отслеживание профиля угла траектории полета остается хорошим на протяжении всего маневра. Обратите внимание, что изменения в падении$\alpha$ и скорости$V$ охватывают большую часть рассматриваемой здесь огибающей полета ([-20,20] градусов для$\alpha$ и [700 1400] для). $V$И пока автопилот настраивался на номинальную высоту 3000 м, он хорошо платит за изменение высоты с 1000 до 10000 м.

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

См. также

| (Simulink Control Design) | (Проект управления Simulink)

Связанные примеры

Подробнее