Многоуровневое управление вертолетом

В этом примере показано, как использовать slTuner и systune для настройки мультицикла для винтокрылой машины.

Модель вертолета

Этот пример использует модель вертолета с 8 состояниями при условии зависания отделки. Вектор состояния x = [u,w,q,theta,v,p,phi,r] состоит из

  • Продольная скорость u (м/с)

  • Поперечная скорость v (м/с)

  • Нормальная скорость w (м/с)

  • Тангаж theta (град)

  • Крен угла phi (град)

  • Скорость крена p (град/с)

  • Тангаж скорости q (град/с)

  • Скорость рыскания r (град/с).

Контроллер генерирует команды ds,dc,dT в степенях для коллектива продольных циклических, боковых циклических и хвостовых роторов с использованием измерений theta, phi, p, q, и r.

Архитектура управления

Следующая модель Simulink изображает архитектуру управления:

open_system('rct_helico')

Система управления состоит из двух циклов обратной связи. Внутренний цикл (статическая выходная обратная связь) обеспечивает увеличение устойчивости и развязку. Внешний контур ( ПИ-контроллеры) обеспечивает требуемую эффективность отслеживания уставки. Основные цели управления заключаются в следующем:

  • Отслеживайте изменения уставки в theta, phi, и r при нулевой установившейся ошибке, временах нарастания около 2 секунд, минимальном перерегулировании и минимальном перекрестном соединении

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

  • Обеспечьте сильный многопараметрический коэффициент усиления и запасов по фазе (робастность к одновременным изменениям коэффициента усиления/фазы на входах и выходах объекта управления, см diskmargin для получения дополнительной информации).

Мы используем lowpass с отсечкой 40 рад/с, чтобы частично применить вторую цель.

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

Можно совместно настроить внутренний и внешние контуры с systune команда. Эта команда требует только моделей объекта управления и контроллера наряду с желаемой пропускной способностью (которая является функцией требуемого времени отклика). Когда система управления моделируется в Simulink, можно использовать slTuner интерфейс для быстрой настройки задачи настройки. Создайте образец этого интерфейса со списком блоков, которые будут настроены.

ST0 = slTuner('rct_helico',{'PI1','PI2','PI3','SOF'});

Каждый настраиваемый блок автоматически параметризован в соответствии с его типом и инициализирован со своим значением в модели Simulink ($1+1/s$для ПИ-контроллеров и нуля для статического коэффициента усиления с обратной связью). Симуляция модели показывает, что система управления нестабильна для этих начальных значений:

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

addPoint(ST0,{'theta-ref','phi-ref','r-ref'})   % setpoint commands
addPoint(ST0,{'theta','phi','r'})               % corresponding outputs
addPoint(ST0,{'u','y'});

Наконец, соберите требования к проекту, используя TuningGoal объекты. Мы используем следующие требования для этого примера:

  • Требование отслеживания: Реакция theta, phi, r к шаговым командам theta_ref, phi_ref, r_ref должен напоминать развязанный ответ первого порядка с одной второй временной константой

  • Пределы устойчивости: Многомерный коэффициент усиления и запасов по фазе на входах объекта u и выходы объекта y должно быть не менее 5 дБ и 40 степени

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

% Less than 20% mismatch with reference model 1/(s+1)
TrackReq = TuningGoal.StepTracking({'theta-ref','phi-ref','r-ref'},{'theta','phi','r'},1);
TrackReq.RelGap = 0.2;

% Gain and phase margins at plant inputs and outputs
MarginReq1 = TuningGoal.Margins('u',5,40);
MarginReq2 = TuningGoal.Margins('y',5,40);

% Limit on fast dynamics
MaxFrequency = 25;
PoleReq = TuningGoal.Poles(0,0,MaxFrequency);

Теперь можно использовать systune для совместной настройки всех параметров контроллера. Это возвращает настроенную версию ST1 системы управления ST0.

AllReqs = [TrackReq,MarginReq1,MarginReq2,PoleReq];
ST1 = systune(ST0,AllReqs);
Final: Soft = 1.12, Hard = -Inf, Iterations = 75

Окончательное значение близко к 1, поэтому требования почти выполняются. Постройте графики настроек на пошаговые команды в theta, phi, r:

T1 = getIOTransfer(ST1,{'theta-ref','phi-ref','r-ref'},{'theta','phi','r'});
step(T1,5)

Время нарастания составляет около двух секунд без перерегулирования и небольшого сцепления. Можно использовать viewGoal для получения более подробной валидации каждого требования, включая визуальную оценку многопараметрических запасов устойчивости (см. diskmargin для получения дополнительной информации):

figure('Position',[100,100,900,474])
viewGoal(AllReqs,ST1)

Осмотрите настроенные значения ПИ-контроллеров и статического коэффициента усиления с обратной связью.

showTunable(ST1)
Block 1: rct_helico/PI1 =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 1.03, Ki = 2.14
 
Name: PI1
Continuous-time PI controller in parallel form.

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

Block 2: rct_helico/PI2 =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = -0.098, Ki = -1.33
 
Name: PI2
Continuous-time PI controller in parallel form.

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

Block 3: rct_helico/PI3 =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 0.141, Ki = -2.22
 
Name: PI3
Continuous-time PI controller in parallel form.

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

Block 4: rct_helico/SOF =
 
  D = 
              u1         u2         u3         u4         u5
   y1      2.276    -0.3148   -0.00348     0.7863   -0.01576
   y2    -0.1846     -1.251    0.01889   -0.07602    -0.1178
   y3   -0.03125   -0.01057     -1.897  -0.008094    0.06802
 
Name: SOF
Static gain.

Преимущество внутреннего цикла

Вы можете задаться вопросом, необходима ли статическая выходная обратная связь и недостаточно ли ПИД-регуляторов для управления вертолетом. На этот вопрос легко ответить, перестроив контроллер с разомкнутым внутренним циклом. Сначала сломайте внутренний цикл, добавив открытие цикла после SOF блок:

addOpening(ST0,'SOF')

Затем удалите SOF блокируйте из настраиваемого списка блоков и повторно параметризовайте блоки PI как полномасштабные ПИДы с правильными знаками цикла (как было выведено из первого проекта).

PID = pid(0,0.001,0.001,.01);  % initial guess for PID controllers

removeBlock(ST0,'SOF');
setBlockParam(ST0,...
   'PI1',tunablePID('C1',PID),...
   'PI2',tunablePID('C2',-PID),...
   'PI3',tunablePID('C3',-PID));

Перестроите три ПИД-регуляторов и постройте график переходных характеристик с обратной связью.

ST2 = systune(ST0,AllReqs);
Final: Soft = 4.94, Hard = -Inf, Iterations = 67
T2 = getIOTransfer(ST2,{'theta-ref','phi-ref','r-ref'},{'theta','phi','r'});
figure, step(T2,5)

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

См. также

| | | |

Похожие темы