В этом примере используется systune для управления перевернутым маятником на тележке.
Сборка тележки/маятника изображена на рис. 1 и смоделирована в Simulink ® с использованием Simscape™ Multibody™.

Рис. 1: Перевернутый маятник на тележке

Рис. 2: модель Simscape Multibody
Управление системой осуществляется путем приложения переменной силы
к тележке. Контроллер должен держать маятник в вертикальном положении при перемещении тележки в новое положение или при подталкивании маятника вперед (импульсное возмущение).
Вертикальное положение является неустойчивым равновесием для перевернутого маятника. Нестабильный характер установки усложняет задачу контроля. В этом примере используется следующая двухконтурная структура управления:
open_system('rct_pendulum.slx') set_param('rct_pendulum','SimMechanicsOpenEditorOnUpdate','off');

Внутренняя петля использует контроллер состояния-пространства второго порядка для стабилизации маятника в его вертикальном положении (
управление), в то время как внешняя петля использует контроллер пропорциональной производной (PD) для управления положением тележки. Вы используете ПД, а не ПИД-контроллер, потому что завод уже обеспечивает некоторые интегральные действия.
Использовать TuningGoal требования к заданию требуемого режима замкнутого цикла. Укажите время отклика 3 секунды для отслеживания изменения уставки в положении корзины.
% Tracking of x command req1 = TuningGoal.Tracking('xref','x',3);
Для адекватного отклонения импульсных возмущений
на кончике маятника используйте штраф LQR вида

это подчеркивает небольшое угловое отклонение
и ограничивает усилия управления.
% Rejection of impulse disturbance dF Qxu = diag([16 1 0.01]); req2 = TuningGoal.LQG('dF',{'Theta','x','F'},1,Qxu);
Для надежности на входе установки требуется не менее 6 дБ запаса усиления и 40 градусов запаса фазы.
% Stability margins req3 = TuningGoal.Margins('F',6,40);
Наконец, ограничить демпфирование и собственную частоту полюсов с замкнутым контуром, чтобы предотвратить затухающие или недостаточно затухающие переходные процессы.
% Pole locations
MinDamping = 0.5;
MaxFrequency = 45;
req4 = TuningGoal.Poles(0,MinDamping,MaxFrequency);
Система с замкнутым контуром нестабильна для начальных значений контроллеров PD и state-space (1 и соответственно
). Вы можете использовать systune для совместной настройки этих двух контроллеров. Используйте slTuner для определения настраиваемых блоков и регистрации входного сигнала установки F в качестве точки анализа для измерения пределов устойчивости.
ST0 = slTuner('rct_pendulum',{'Position Controller','Angle Controller'}); addPoint(ST0,'F');
Далее используйте systune для настройки ПД и государственных контроллеров пространства в соответствии с указанными выше требованиями к производительности. Оптимизируйте характеристики отслеживания и отклонения возмущений (мягкие требования) с учетом пределов устойчивости и ограничений положения полюсов (жесткие требования).
rng(0)
Options = systuneOptions('RandomStart',5);
[ST, fSoft] = systune(ST0,[req1,req2],[req3,req4],Options);
Final: Soft = 1.36, Hard = 0.99983, Iterations = 244 Final: Soft = 1.44, Hard = 0.99921, Iterations = 138 Final: Soft = 1.44, Hard = 0.99955, Iterations = 311 Final: Soft = 1.26, Hard = 0.99808, Iterations = 270 Final: Soft = 1.44, Hard = 0.99998, Iterations = 266 Final: Soft = 1.27, Hard = 0.99673, Iterations = 236
Наилучшая конструкция достигает значения, близкого к 1 для мягких требований, при удовлетворении жестких требований (Hard<1). Это означает, что настроенная система управления почти достигает целевой производительности для отслеживания и отклонения возмущений при удовлетворении пределов устойчивости и ограничений расположения полюсов.
Использовать viewGoal для дальнейшего анализа того, как оптимальные проектные тарифы соотносятся с каждым требованием.
figure('Position',[100 100 575 660])
viewGoal([req1,req3,req4],ST)

Эти участки подтверждают, что первые два требования почти выполнены, в то время как последние два строго соблюдаются. Затем постройте график ответов на изменение положения шага и на импульс силы на тележке.
T = getIOTransfer(ST,{'xref','dF'},{'x','Theta'});
figure('Position',[100 100 650 420]);
subplot(121), step(T(:,1),10)
title('Tracking of set point change in position')
subplot(122), impulse(T(:,2),10)
title('Rejection of impulse disturbance')

Реакции являются гладкими с желаемым временем отстаивания. Проверьте настроенные значения контроллеров.
C1 = getBlockValue(ST,'Position Controller')
C1 =
s
Kp + Kd * --------
Tf*s+1
with Kp = 5.92, Kd = 1.95, Tf = 0.0513
Name: Position_Controller
Continuous-time PDF controller in parallel form.
C2 = zpk(getBlockValue(ST,'Angle Controller'))
C2 =
-1611.4 (s+12.86) (s+4.368)
---------------------------
(s+135.1) (s-14.26)
Name: Angle_Controller
Continuous-time zero/pole/gain model.
При этом регулятор угла имеет неустойчивый полюс, который соединяется с неустойчивым полюсом установки для стабилизации перевернутого маятника. Чтобы увидеть это, получите передачу с разомкнутым контуром на входе завода и постройте график локуса корня.
L = getLoopTransfer(ST,'F',-1); figure rlocus(L) set(gca,'XLim',[-25 20],'YLim',[-20 20])

Чтобы завершить проверку, загрузите настроенные значения в Simulink и смоделируйте нелинейный отклик сборки тележки/маятника. Ниже приводится видеозапись полученного моделирования.
writeBlockValue(ST)

Рис. 3: Имитация тележки/маятника с настроенными контроллерами.
Закройте модель после моделирования.
set_param('rct_pendulum','SimMechanicsOpenEditorOnUpdate','on'); close_system('rct_pendulum',0);
slTuner (Simulink Control Design) | systune(Проект управления Simulink)