Выполнение лабораторной работы №4 рассмотрим на примере перевернутого маятника.
0. Модель.
Рассмотрим модель перевернутого маятника, взятую из источника, приведенного по ссылке в задании:
$$ m \ddot x cos \Theta + m l \ddot \Theta = m g \sin \Theta $$
где $\Theta$ -- угол отклонения маятника от вертикали, $m$ -- масса маятника, $l$ -- длина маятника, $\ddot x = a$ -- ускорение перемещения платформы.
В аффинной форме $\dot x = f(x) + g(x)u$, $y = h(x)$ динамика объекта управления может быть представлена в виде:
$$\dot x = \begin{pmatrix} x_2 \\ \frac{g}{l} \sin x_1 \end{pmatrix} + \begin{pmatrix} 0 \\ -\frac{1}{l} \cos x_1 \end{pmatrix}u$$
$$y = x_1$$
где $x = (x_1, x_2)^T = (\Theta, \dot \Theta)^T$, $u = a$.
Заметим, что это уравнение моделирует лишь отдельную часть перевернутого маятника как системы -- собственно сам подвижный груз, но не рассматривает динамику платформы, на которой находится маятник. Более реалистичная модель должна учитывать массу платформы и маятника, по приложенной к подвижной платформе силе $F$ моделировать изменение ускорения $a$. Также необходимым является моделирование трения в точке крепления маятника и трения при движении платформы.
1. Моделирование нелинейных систем в пространстве состояний в Simulink.
Для моделирования нелинейных систем вида $\dot x = f(x,u)$ в Simulink необходимо использовать два блока: интегратор, чтобы по значению $\dot x$ получить $x$ и блок вычисления нелинейной функции $f(x,u)$.
Поместим в модель блок Integrator и блок Embedded MATLAB Function из библиотеки Simulink\User-Definded Functions. Дважды щелкнув по блоку Embedded MATLAB Function, открывается текстовый редактор, в котором необходимо ввести текст на скриптовом языке MATLAB, вычисляющий функцию $f(x,u)$.
Введем следующий текст, который вычисляет правые части $f(x,u)$ уравнения модели перевернутого маятника:
После соединения блоков между собой, получаем следующую модель:
Откроем свойства блока интегратора и установим начальные значения. Поскольку пространство состояний -- плоскость $(\Theta, \dot \Theta)^T$, то необходимо задать в поле Initial condition вектор двух чисел.
Для теста промоделируем поведение системы вокруг положения $\Theta = \pi$, где маятник опущен в нижнее вертикальное положение. Зададим начальные состояния $\Theta(0) = \pi - \pi/4$, $\dot \Theta(0) = 0$:
В результате моделирования системы получаем гармонические колебания между угловыми положениями $\pi - \pi/4 \le \Theta \le \pi + \pi/4$ (желтая кривая -- угловое положение $\Theta(t)$, сиреневая -- скорость $\dot \Theta(t)$):
2. Синтез линейного управления.
Поскольку объект управления существенно нелинейный, то с помощью линейного регулятора гарантированно можно решить лишь задачу стабилизации системы вокруг заданной точки фазового пространства.
Решим задачу стабилизации положения маятника в верхнем вертикальном положении с помощью перемещения каретки основания с управляемым ускорением. Предварительно ограничим значение ускорения на уровне примерно 10 g, добавив блок Saturation: в реальности актуирование всегда производится с ускорением, ограниченным мощностью приводов и механической прочностью конструкции.
Добавим в систему ПИД регулятор, работающий по ошибке регулирования углового положения. Также необходимым является расщепление вектора состояния после интегратора с помощью блока Demux для получения скалярного сигнала $\Theta(t)$.
Следует заметить, что стандартный ПИД регулятор с положительными коэффициентами работает только тогда, когда коэффициент усиления системы -- положительный, т.е. положительное воздействие $u$ приводит к увеличению значения выхода $y$ и уменьшению сигнала ошибки $e = r - y$. В противном случае, ПИД регулятор не способен решить задачу управления.
Перевернутый маятник вблизи точки $\Theta = 0$ имеет отрицательный коэффициент усиления поскольку в уравнение модели при $x_1 \approx 0$ управление $u$ входит с отрицательным знаком:
$$\dot x = \begin{pmatrix} x_2 \\ \frac{g}{l} \sin x_1 \end{pmatrix} + \begin{pmatrix} 0 \\ -\frac{1}{l} \cos x_1 \end{pmatrix} u \approx \begin{pmatrix} x_2 \\ \frac{g}{l} x_1 \end{pmatrix} + \begin{pmatrix} 0 \\ -\frac{1}{l} \end{pmatrix} u$$
Поэтому выход системы должен быть проинвертирован для решения задачи управления. Проще всего это сделать, заведя на вход регулятора не сигнал ошибки $e = r - y$ (как в обычной схеме управления), а прямое значение $y$, также учитывая, что в нашем случае $r = 0$.
Следуя стандартной процедуре параметрического синтеза регуляторов в Simulink, поместим в модель блок Signal Constraint, подключенный к регулируемому выходу системы -- сигналу $\Theta(t)$.
Установим вектор начальных значений, записав в поле Initial condition блока интегратора вектор [pi/4 0] -- маятник изначально находится выше точки крепления.
В результате получаем модель системы с замкнутой обратной связью:
Определим переменные, являющиеся параметрами ПИД-регулятора, введя в командной строке
Kp = 10; Ki = 0; Kd = 0;
и вписав в свойствах ПИД-регулятора в полях Proportional (P), Integral (I), Derivative (D) соответственно имена переменных Kp, Ki, Kd. Также добавим эти переменные как Tuned parameters в блоке Signal Constraint, ограничив их снизу значением 0:
Настроим ограничения на выходную реакцию системы в окне параметров Block Parameters: Signal Constraint, таким образом, чтобы установившееся значение сигнала было не 1 (как по умолчанию), а 0.
После запуска процесса оптимизации, получаем множество реакций в окне Signal Constraint, среди которых по окончанию поиска будет оптимальная:
Моделирование системы с полученными параметрами регулятора дает искомую реакцию на выходе:
Файл модели Simulink с решением (требуется задание параметров ПИД-регулятора, как это описано выше)
Комментариев нет:
Отправить комментарий