суббота, 9 апреля 2011 г.

Пример выполнения лабы №4.

Выполнение лабораторной работы №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 с решением (требуется задание параметров ПИД-регулятора, как это описано выше)

Комментариев нет:

Отправить комментарий