В этом примере показано, как использовать 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')

Система управления состоит из двух контуров обратной связи. Внутренний контур (статическая выходная обратная связь) обеспечивает увеличение стабильности и разъединение. Внешний контур (контроллеры PI) обеспечивает требуемую производительность отслеживания уставок. Основными задачами контроля являются:
Отслеживание изменений уставки в theta, phi, и r при нулевой стационарной ошибке, времени подъема около 2 секунд, минимальном превышении и минимальном перекрестном соединении
Ограничение полосы пропускания управления для защиты от забытой высокочастотной динамики ротора и шума измерений
Обеспечьте сильный многовариантный коэффициент усиления и запас по фазе (устойчивость к одновременным изменениям коэффициента усиления/фазы на входах и выходах установки, см. diskmargin для получения подробной информации).
Для частичного выполнения второй задачи мы используем фильтры нижних частот с отсечкой 40 рад/с.
Вы можете совместно настроить внутренний и внешний контуры с systune команда. Эта команда требует только моделей установки и контроллера вместе с требуемой полосой пропускания (которая является функцией требуемого времени отклика). При моделировании системы управления в Simulink можно использовать slTuner для быстрой настройки задачи настройки. Создайте экземпляр этого интерфейса со списком настраиваемых блоков.
ST0 = slTuner('rct_helico',{'PI1','PI2','PI3','SOF'});
Каждый настраиваемый блок автоматически параметризуется в соответствии с его типом и инициализируется с его значением в модели Simulink (
для PI-контроллеров и нулем для статического коэффициента усиления «выход-обратная связь»). Моделирование модели показывает, что система управления нестабильна для этих исходных значений:

Отметьте интересующие сигналы ввода-вывода для отслеживания уставок и определите входы и выходы установки (управляющие и измерительные сигналы), в которых измеряется запас устойчивости.
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, поэтому требования почти выполнены. Постройте график настроенных ответов на пошаговые команды в тета, фи, 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)

Проверьте настроенные значения PI-контроллеров и статического коэффициента усиления обратной связи на выходе.
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));
Переконфигурируйте три контроллера 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, и ответы на шаги подтверждают более низкую производительность в отношении времени подъема, превышения и разъединения. Это говорит о том, что внутренний контур имеет важный стабилизирующий эффект, который должен быть сохранен.
slTuner | systune (slTuner) | TuningGoal.Margins | TuningGoal.Poles | TuningGoal.StepTracking