Разработка математической модели системы управления углом тангажа летательного аппарата#
Система управления летательным аппаратом (ЛА) включает в себя несколько контуров управления для управления скоростью, высотой и навигацией самолёта.
Система управления углом тангажа самолёта является важным контуром для повышения устойчивости полёта и содержит контроллеры автопилота, отвечающие за продольное движение.
В данном практическом руководстве:
Представлен процесс разработки математической модели продольного движения самолёта[1] с помощью блока Jython;
Приведён процесс создания модели управления углом тангажа ЛА с использованием библиотеки блоков Автоматика;
Представлена Python программа для автоматизированной настройки коэффициентов ПИД-регулятора системы управления углом тангажа.
1. Математическая модель продольного движения самолёта#
В данном практическом руководстве будет выполнено моделирование продольного движения гражданского самолёта, схематично представленного на рисунке ниже[1].
Система координат гражданского самолёта#
На рисунке выше приняты следующие обозначения.
Обозначения |
Описание |
|---|---|
Чёрные оси координат |
Оси координат: \(\mathbf{x, z}\) - оси связанной СК; \(\mathbf{x', z'}\) - оси земной СК. |
Красные векторы сил |
Основные силы, действующие на ЛА при продольном движении: Thrust - сила тяги, Lift - подъёмная сила, Drag - сила сопротивления, Weight - вес ЛА. |
В модели гражданского самолёта используются следующие допущения:
ЛА находится в устойчивом состоянии на постоянной высоте и скорости;
Изменение угла тангажа не приводит к изменению скорости самолета.
Принятые допущения позволяют сформировать модель продольного движения ЛА в виде системы уравнений (1).
В уравнении (1) используются следующие множители:
В уравнениях (1) и (2) приняты следующие обозначения:
Обозначение |
Описание |
|---|---|
\(\alpha\) |
Угол атаки, приведён на рисунке выше |
\(\dot{\alpha}\) |
Производная первого порядка угла атаки |
\(\theta\) |
Угол тангажа (см. рисунок выше) |
\(\dot{\theta}\) |
Производная первого порядка угла тангажа |
\(q\) |
Угловая скорость тангажа |
\(\dot{q}\) |
Производная первого порядка угловой скорости тангажа |
\(\delta\) |
Угол руля высоты (см. рисунок выше) |
\(\rho\) |
Плотность воздуха |
\(S\) |
Площадь крыла |
\(\dot{c}\) |
Средняя длина хорды |
\(m\) |
Масса ЛА |
\(U\) |
Скорость установившегося полета |
\(C_{T}\) |
Коэффициент тяги |
\(C_{D}\) |
Коэффициент сопротивления |
\(C_{L}\) |
Коэффициент подъёмной силы |
\(C_{W}\) |
Коэффициент веса |
\(C_{M}\) |
Коэффициент момента тангажа |
\(\gamma\) |
Угол направления полета (см. рисунок выше) |
\(i_{yy}\) |
Нормализованный момент инерции |
В случае использования коэффициентов гражданского самолёта уравнение (1) принимает следующий вид (3).
Для последующей реализации модели продольного движения ЛА в блоке Jython потребуется матричное представление уравнения (3).
Математическая модель системы управления регулирует угол тангажа, поэтому выражение выходного сигнала для системы управления имеет вид (5).
Для решения задачи по определению угла тангажа \(\theta\) выполняется интегрирование \(\dot{\theta}\) производной угла тангажа численным методом Эйлера в соответствии с уравнением (6).
В уравнении (6) приняты следующие обозначения:
Обозначение |
Описание |
|---|---|
\(\Delta t\) |
Шаг интегрирования. Используемое значение шага для настройки проекта приведено в таблице ниже. |
\(\alpha_{t}\) |
Значение угла атаки на предыдущем шаге |
\(q_{t}\) |
Значение угловой скорости тангажа на предыдущем шаге |
\(\theta_{t}\) |
Значение угла тангажа на предыдущем шаге |
\(\alpha_{t + \Delta t}\) |
Значение угла атаки на текущем шаге |
\(q_{t + \Delta t}\) |
Значение угловой скорости тангажа на текущем шаге |
\(\theta_{t + \Delta t}\) |
Значение угла тангажа на текущем шаге |
2. Обзор демонстрационной модели управления углом тангажа самолёта в приложении REPEAT VISION#
В наборе демонстрационных проектов приложения REPEAT VISION доступен пример модели управления углом тангажа самолёта. Далее выполним анализ данного примера, который нам поможет описать все необходимые шаги по реализации модели управления углом тангажа ЛА на платформе REPEAT VISION.
В приложении REPEAT VISION добавьте себе проект [DEMO] Система управления углом тангажа самолёта из папки Демо проекты и откройте его для последующего выполнения обзора.
Демонстрационный проект системы управления углом тангажа самолёта#
В демонстрационном проекте, схема которого приведена на рисунке выше, используются следующие настройки.
Настройка |
Значение |
|---|---|
Синхронизация с реальным временем |
Выключена |
Время моделирования |
40 \([с]\) |
Шаг интегрирования |
1 \([мс]\) |
Шаг дискретизации |
100 \([мс]\) |
2.1. Реализация модели продольного движения ЛА#
Для расчёта угла тангажа \(\theta\) в модели продольного движения ЛА используется два блока:
Блок |
№ блока в проекте |
Назначение для модели |
|---|---|---|
Блок №1 |
Необходим для назначения \(\theta\), уставки угла тангажа (см. схему ЛА), величиной \(0.2 [рад]\) |
|
Блок №8 |
Необходим для непосредственной реализации уравнения (3) с использованием матричного вида (4) |
Модель продольного движения ЛА реализована на языке программирования Python с применением блока Jython.
Для обзора модели продольного движения ЛА требуется в свойствах блока №8 Jython нажать на кнопку Редактировать код блока.
В блоке Jython доступны три вкладки для реализации кода Python программы.
Код данного этапа выполняется 1 раз до начала моделирования с целью подготовки к процессу расчёта. На данном этапе необходимо выполнить:
Импорт необходимых библиотек;
Создать объекты программы, у которых требуется сохранять состояние между выполнением шагов интегрирования в процессе расчёта;
Создать необходимые функции и классы для последующего вызова на этапе моделирования, в Коде расчета.
Код данного этапа выполняется на каждом шаге интегрирования от начала расчёта до его остановки. На данном этапе необходимо:
Вызывать функции и методы классов Python программы, отвечающих за моделирование;
Использовать значения in входных портов блока Jython и возвращать результаты на out выходные порты блока Jython;
Объекты, созданные в рамках кода расчёта не сохраняют своего состояния после завершения шага интегрирования.
Если вашим объектам необходимо сохранять состояние между шагами интегрирования, то их необходимо создавать и настраивать на этапе инициализации, а затем использовать в коде расчёта.
Код данного этапа выполняется 1 раз при остановке расчёта.
При завершении расчёта может выполняться обработка данных объектов Python программы, у которых требовалось сохранять состояние между выполнением шагов интегрирования в процессе расчёта.
Далее в текстовом редакторе кода блока Jython требуется перейти на вкладку Инициализация для анализа кода подготовки и настройки модели продольного движения ЛА.
В рамках инициализации создаётся матрица и вектор коэффициентов, а также реализуется функция для решения системы уравнений (4) с целью дальнейшего получения вектора угловых значений атаки и тангажа при продольном движении ЛА на следующем этапе выполнения моделирования.
1from org.apache.commons.math3.linear import Array2DRowRealMatrix, ArrayRealVector
2
3
4COEFF_MATRIX = Array2DRowRealMatrix([
5 [-0.313, 56.7, 0.],
6 [-0.0139, -0.426, 0.],
7 [0., 56.7, 0.]
8])
9COEFF_VECTOR = ArrayRealVector([0.232, 0.0203, 0.])
10STATE_VECTOR = ArrayRealVector([0., 0., 0.])
11INTEGRATION_STEP = 1e-3
12
13def calculate_angles(input_value):
14 """
15 Функция выполняет расчёт вектора угловых значений атаки и тангажа
16 при продольном движении ЛА.
17
18 Входным аргументом input_value функции является
19 вещественное значение угла руля высоты.
20 """
21
22 # В левой части выполняется
23 # умножение матрицы коэффициентов на вектор состояния
24 left_part = COEFF_MATRIX.operate(STATE_VECTOR)
25
26 # В правой части выполняется
27 # умножение вектора коэффициентов на значение угла руля высоты
28 right_part = COEFF_VECTOR.mapMultiply(input_value)
29
30 # В результате выполняется сложение левой и правой частей
31 angles = left_part.add(right_part)
32
33 return angles
Строка 1. Импорт необходимых структур данных из модуля линейной алгебры библиотеки Apache Commons Math. Матрица
Array2DRowRealMatrixи векторArrayRealVectorвещественных значений будут использоваться далее для расчёта системы уравнений (3), представленных в матричном виде (4);Строки 4, 8. Создание объекта матрицы коэффициентов уравнений (4) продольного движения гражданского самолёта. Матрица далее будет использована в функции
calculate_angles;Строка 9. Создание вектора коэффициентов правой части уравнений (4);
Строка 10. Создание вектора состояний модели с начальными значениями угла атаки \(\alpha\), угловой скорости тангажа \(q\) и угла тангажа \(\theta\). Далее на этапе моделирования вектор
STATE_VECTORбудет обновлять состояние при завершении каждого шага интегрирования;Строка 11. Создание значения шага интегрирования (в секундах), ранее указанного при настройке проекта;
Строки 13, 33. Создание функции
calculate_anglesс целью решения системы уравнений (4) для расчёта вектора угловых значений атаки и тангажа при продольном движении ЛА. Аргументом функцииinput_valueявляется вещественное значение \(\delta\) угла руля высоты (см. рисунок выше).
Далее в текстовом редакторе кода блока Jython требуется перейти на вкладку Код расчета для анализа этапа программы, которая выполняется на этапе моделирования.
В рамках этапа моделирования рассчитывается вектор угловых значений атаки и тангажа на каждом шаге интегрирования с начального времени моделирования и до остановки расчёта. Данный вектор состояния обновляется с применением явного метода Эйлера.
В результате каждого шага интегрирования формируется актуальное значение угла тангажа для его последующего использования системой управления.
1# Выполняется расчёт вектора угловых значений атаки и тангажа
2# при продольном движении ЛА
3angles = calculate_angles(in_1)
4
5# Обновляется вектор состояния с учётом шага интегрирования
6angles_step = angles.mapMultiply(INTEGRATION_STEP)
7STATE_VECTOR = STATE_VECTOR.add(angles_step)
8
9# На выходной порт передаётся значение угла тангажа
10# по индексу №2 вектора состояния
11out_1 = STATE_VECTOR.getEntry(2)
Строка 3. На каждом шаге интегрирования, равном \(1 [мс]\), выполняется расчёт вектора угловых значений атаки и тангажа для актуального входного значения \(\delta\) угла руля высоты, полученного из объекта in_1 входного порта;
Строки 6, 7. Выполняется обновление вектора состояния
STATE_VECTORс применением явного метода Эйлера.Строка 11. В результате выполнения Кода расчета на каждом шаге интегрирования создаётся объект out_1 выходного порта блока Jython, в который выводится актуальное значение угла тангажа \(\theta\).
2.2. Реализация модели системы управления углом тангажа ЛА#
Для моделирования непосредственно системы управления используются следующие блоки:
Блок |
№ блока в проекте |
Назначение для модели |
|---|---|---|
Сравнивающее устройство |
Блок №2 |
Выполняет вычитание из уставки угла тангажа расчётное значение \(\theta\) угла тангажа модели, реализованной в блоке Jython. Разность передаётся в ПИД-регулятор системы управления через разветвитель №3. |
Разветвитель |
Блок №3 |
Передаёт сигнал от сравнивающего устройства в передаточные звенья №4, 5, 6 |
Усилитель |
Блок №4 |
Необходим для регулирования пропорционального коэффициента до достижения приемлемой скорости нарастания сигнала |
Интегрирующее звено |
Блок №5 |
Предназначен для усиления интегрального коэффициента для снижения установившейся ошибки |
Дифференцирующее звено |
Блок №6 |
Необходим для настройки дифференциального коэффициента для уменьшения критических осцилляций в системе |
Сумматор |
Блок №7 |
Суммирует результаты передаточных звеньев в рамках реализации ПИД-регулятора |
В блоке №6 дифференцирующего звена параметру Таu присваивается малое значение времени, равное \(1\mathrm{e}{-5}\).
Проект содержит набор глобальных переменных в соответствии с таблицей ниже.
Параметр |
Имя глобальной переменной |
Применяется к блоку |
|---|---|---|
Коэффициент пропорционального звена |
PROPORTIONAL_COEFF |
блок №4 |
Коэффициент интегрирующего звена |
INTEGRAL_COEFF |
блок №5 |
Коэффициент дифференцирующего звена |
DIFFERENTIAL_COEFF |
блок №6 |
Подсказка
Глобальные переменные позволяют удобно управлять настройками проекта в процессе адаптации и отладки модели.
Также глобальные переменные необходимы для взаимодействия внешних программ пользователя с моделью, реализованной на платформе REPEAT VISION. Подробнее о взаимодействии с платформой REPEAT VISION вы можете ознакомиться в разделе уроков.
Результаты первого моделирования системы управления углом тангажа ЛА#
Для получения первых результатов моделирования необходимо присвоить значения глобальным переменным ПИД-регулятора в соответствии с таблицей ниже.
Параметр |
Имя глобальной переменной |
Величина |
|---|---|---|
Коэффициент пропорционального звена |
PROPORTIONAL_COEFF |
1.0 |
Коэффициент интегрирующего звена |
INTEGRAL_COEFF |
0.0 |
Коэффициент дифференцирующего звена |
DIFFERENTIAL_COEFF |
0.0 |
Далее выполните запуск проекта на расчёт и создайте новый график на панели Визуализация.
На график добавьте параметр порта out_1 Jython блока №8 с целью анализа значений \(\theta\) угла тангажа.
Зависимость изменения угла тангажа от времени.#
На графике выше приняты следующие обозначения.
Линии |
Описание |
|---|---|
Синяя линия |
Зависимость изменения угла тангажа \(\theta [рад]\) от времени \([c]\) |
Для анализа результатов расчётов и адаптации модели системы управления углом тангажа ЛА используются следующие критерии качества отклика:
№ |
Критерий |
Максимальное допустимое значение |
|---|---|---|
1 |
Перерегулирование \(\sigma\) |
0.15 |
2 |
Время регулирования \(t_{рег}\) с коридором точности в 0.05 |
\(10 [c]\) |
3 |
Относительная ошибка стационарного значения угла тангажа \(\varepsilon_{S}\) |
0.05 |
Критерии качества отклика определяются по формулам (7).
В уравнении (7) приняты следующие обозначения:
Обозначение |
Описание |
|---|---|
\(\varepsilon_{S}\) |
Относительная ошибка стационарного значения угла тангажа |
\(\theta_{S}\) |
Расчётное стационарное значение угла тангажа \(\theta\) |
\(\theta_{T}\) |
Уставка угла тангажа \(\theta = 0.2 [рад]\) |
\(\sigma\) |
Перерегулирование |
\(\theta_{max}\) |
Максимальное расчётное значение угла тангажа \(\theta\) |
Критерий времени регулирования \(t_{рег}\) с коридором точности в 0.05 изображён на графике ниже.
Критерий времени регулирования с коридором точности.#
Далее необходимо провести анализ результатов расчёта модели системы управления углом тангажа ЛА, выполненного с исходными данными, приведённых в таблице выше.
Применяя формулу (7), получаются следующие значения критериев: \(\sigma = 0\), \(t_{рег} = 22.2 [с]\), \(\varepsilon_{S} = -0.012\).
Критерии качества не выполнены. Модель требует настройки коэффициентов системы управления.
Совет
Эмпирический метод настройки коэффициентов модели системы управления может занимать длительное рабочее время.
С целью снижения трудозатрат настройки коэффициентов системы управления и для повышения точности по адаптации модели необходимо воспользоваться оптимизатором.
Описание автоматизированного процесса адаптации модели системы управления углом тангажа ЛА через решение оптимизационной задачи приведено в следующем разделе.
2.3. Адаптация модели системы управления углом тангажа ЛА#
Для решения оптимизационной задачи определения оптимальных коэффициентов ПИД-регулятора системы управления углом тангажа ЛА в проекте используются следующие блоки:
Блок |
№ блока в проекте |
Назначение для модели |
|---|---|---|
Выходной порт |
блок №10 |
Необходим для передачи в Python программу результатов расчёта \(\theta\) угла тангажа ЛА |
В блоке №10 назначено пользовательское название pitch для удобства получения результатов расчёта.
Так же для решения оптимизационной задачи в проекте используются глобальные переменные, подготовленные ранее.
Глобальные переменные используются оптимизатором как параметры целевой функции для решения оптимизационной задачи.
См. также
Подробную информацию о настройке проекта платформы REPEAT VISION для взаимодействия с внешними программами можно получить в разделе уроков.
Постановка оптимизационной задачи#
Задача оптимизации Минимизировать целевую функцию вида (8)
В функции (8) применяются следующие обозначения \( w_{\sigma}, w_S, w_{t_{рег}} \) — весовые коэффициенты для перерегулирования, стационарной ошибки и времени регулирования, позволяющие по-разному учитывать эти компоненты ошибок.
Минимизация целевой функции означает уменьшение ошибок и достижение параметров требуемой работы системы управления.
Дополнительно, после проведения оптимизации проверяются требования критериев качества модели:
При решении оптимизационной задачи используются следующие ограничения на переменные:
В итоге имеем задачу оптимизации:
Реализация оптимизационной задачи на платформе REPEAT VISION#
Сначала откройте ноутбук и в новой тетрадке создайте скрипт для подключения к модели через платформу REPEAT VISION.
Далее в первую ячейку добавьте код загрузки Python пакета repeat, необходимого для взаимодействия с платформой REPEAT VISION и для решения оптимизационной задачи.
import piplite
await piplite.install("repeat")
В следующей ячейке выполните импорт Python пакетов, необходимых для подготовки данных, обработки результатов расчётов, а также для последующей визуализации графиков с целью выполнения анализа решения оптимизационной задачи.
import numpy as np
import pandas as pd
import scipy.optimize as so
import matplotlib.pyplot as plt
В следующей ячейке выполните импорт Python пакета repeat.
import repeat as rp
Далее требуется настроить подключение к платформе REPEAT VISION и выбрать модель для решения оптимизационной задачи.
user = rp.User(
"enter a unique API key from REPEAT VISION user cabinet instead of this comment"
)
app = rp.Application(user)
# enter a project ID from REPEAT VISION application instead of 12345
project = 12345
model = app.get_exploration_model(project)
Выполним проверку подключения в следующей ячейке, которую можно удалить после отладки программы
print(model, model.existing_variables, sep = "\n")
# ExplorationModel(project = 12345,
# name = '[DEMO] Система управления углом тангажа самолёта',
# time_interval = None)
# DIFFERENTIAL_COEFF 0.0
# INTEGRAL_COEFF 0.0
# PROPORTIONAL_COEFF 1.0
# dtype: float64
В следующей ячейке выполним подготовку критериев качества отклика в соответствии с формулами (7) и в соответствии с таблицей, содержащей допустимые значения критериев. Критерии качества реализуются в виде методов класса СontrolСriterion.
При инициализации экземпляра класса требуется передать в метод __init__() временной ряд результата расчёта модели, предварительно полученной от платформы REPEAT VISION.
1class СontrolСriterion:
2 """
3 Класс предназначен для определения критериев качества отклика
4
5 Parameters
6 ----------
7 results : pandas.Series
8 Временной ряд результата расчёта модели платформы REPEAT VISION
9 """
10 def __init__(self, results):
11 self.results = results
12 self.steady_state = results.iloc[-1]
13 self.maximum = results.max()
14
15 def get_stabilization_time(self, relative_width):
16 """
17 Метод рассчитывает время регулирования
18
19 Parameters
20 ----------
21 relative_width : float
22 Значение доли (от 0 до 0.5) установившейся величины результата расчёта.
23
24 Returns
25 -------
26 stabilization_time : float
27 Время регулирования.
28 """
29 up_bound = 1 + relative_width
30 low_bound = 1 - relative_width
31 values_up = self.results[self.results > self.steady_state * up_bound]
32 values_low = self.results[self.results < self.steady_state * low_bound]
33 stabilization_time = np.nanmax([
34 values_up.index.max(),
35 values_low.index.max()
36 ])
37 return stabilization_time
38
39 def get_overshoot_err(self):
40 """
41 Метод рассчитывает значение перерегулирования
42
43 Returns
44 -------
45 relative_error : float
46 Величина перерегулирования.
47 """
48 relative_error = (
49 self.maximum - self.steady_state
50 ) / self.steady_state
51
52 return relative_error
53
54 def get_steady_state_err(self, target):
55 """
56 Метод рассчитывает относительную ошибку стационарного значения
57
58 Parameters
59 ----------
60 target : float
61 Уставка значения.
62
63 Returns
64 -------
65 relative_error : float
66 Относительная ошибка стационарного значения.
67 """
68 relative_error = (
69 self.steady_state - target
70 ) / target
71
72 return relative_error
Строки 15, 37. Реализация метода расчёта времени регулирования. Аргументу
relative_widthпередаётся значение 0.05 коридора точности в соответствии с таблицей критериев качества;Строки 39, 52. Реализация метода расчёта перерегулирования в соответствии с формулой (7);
Строки 54, 72. Реализация метода расчёта относительной ошибки стационарного значения в соответствии с формулой (7). Аргументу
targetпередаётся значение уставки угла тангажа в соответствии с настройками блока №1 Константа.
Методы расчёта критериев качества класса СontrolСriterion далее будут использоваться при реализации целевой функции objective_kernel далее.
1def objective_kernel(angles, target, relative_width):
2 """
3 Целевая функция суммы квадратов нормализованных на единицу
4 критериев качества системы управления с учётом весов критериев.
5
6 Parameters
7 ----------
8 angles : pandas.Series
9 Временной ряд результатов расчёта угла [рад] тангажа ЛА.
10 target : float
11 Величина уставки угла [рад] тангажа ЛА.
12 relative_width : float
13 Значение доли (от 0 до 0.5) установившейся величины результата расчёта.
14
15 Returns
16 -------
17 y : float
18 Значение целевой функции.
19 """
20 angles.index = angles.index / 1e3 # [мс] в [с]
21 сrit = СontrolСriterion(angles)
22 overshoot_error = сrit.get_overshoot_err()
23 steady_state_error = сrit.get_steady_state_err(target)
24 stabilization_time = сrit.get_stabilization_time(relative_width)
25 stabilization_time_relative = stabilization_time / angles.index[-1]
26 weight_overshoot, weight_steady_state, weight_time = 5, 1, 10
27 y = (
28 weight_overshoot * overshoot_error**2
29 + weight_steady_state * steady_state_error**2
30 + weight_time * stabilization_time_relative**2
31 )
32 return y
Строка 20. Выполняется перевод величины времени из миллисекунд в секунды, поскольку API платформы REPEAT VISION формирует временные ряды с размерностью времени \([мс]\);
Строки 22, 24. Вычисление критериев качества регулятора в соответствии с формулами (7);
Строка 25. Нормализация критерия времени на единицу для использования в целевой функции (10);
Строка 26. Создание постоянных значений весов критериев для успешного решения задачи оптимизации. Веса критериев назначаются инженером эмпирически;
Строки 27, 31. Вычисление значения целевой функции в соответствии с уравнением (10).
В следующей ячейке необходимо подготовить вспомогательную функцию run() для взаимодействия с платформой REPEAT VISION для передачи variables значений глобальных переменных модели и для последующего получения результатов расчёта временного ряда значений угла тангажа.
1def run(model, variables):
2 """
3 Функция подготовки временного ряда результатов одного расчёта
4
5 Parameters
6 ----------
7 model : repeat.ExplorationModel
8 Экземпляр класса ExplorationModel для взаимодействия с платформой REPEAT VISION.
9 variables : pandas.Series
10 Набор глобальных переменных модели.
11
12 Returns
13 -------
14 angles : pandas.Series
15 Временной ряд результатов расчёта угла [рад] тангажа ЛА с 0 до 40 [с].
16
17 """
18 with model as md:
19 md.run(variables)
20 angles = md.get_results("pitch",
21 rp.TimeInterval(start = 0, end = 40.0e3))
22
23 return angles
Функция run() возвращает временной ряд значений угла тангажа из блока №10 Выходной порт. Пример результатов расчёта приведён на графике результатов первого расчёта.
В следующей ячейке выполняется подготовка вспомогательной функции для обеспечения взаимодействия с интерфейсом пакета scipy для дальнейшего процесса решения оптимизационной задачи.
1def objective(pid_terms, model, target, relative_width):
2 """
3 Вспомогательная внешняя функция для целевой функции objective_kernel и
4 и для функции run. Функция objective обеспечивает взаимодействие
5 непосредственно с оптимизационными алгоритмами пакета scipy
6
7 Parameters
8 ----------
9 pid_terms : numpy.array
10 Вектор трёх значений для глобальных переменных модели REPEAT VISION.
11 model : repeat.ExplorationModel
12 Экземпляр класса ExplorationModel для взаимодействия с платформой REPEAT VISION.
13 target : float
14 Величина уставки угла [рад] тангажа ЛА.
15 relative_width : float
16 Значение доли (от 0 до 0.5) установившейся величины результата расчёта.
17
18 Returns
19 -------
20 y : float
21 Значение целевой функции.
22 """
23 variables = pd.Series(dict(
24 DIFFERENTIAL_COEFF = pid_terms[0],
25 INTEGRAL_COEFF = pid_terms[1],
26 PROPORTIONAL_COEFF = pid_terms[2],
27 ))
28 angles = run(model, variables)
29 y = objective_kernel(angles, target, relative_width)
30 return y
Строки 23, 27. Создаётся объект
variablespandas.Series, необходимый для передачи глобальных переменных в платформу REPEAT VISION.
В следующей ячейке настраивается взаимодействие с оптимизатором differential_evolution из библиотеки scipy.optimize и выполняется процесс решения оптимизационной задачи.
1solution = so.differential_evolution(
2 objective,
3 x0 = [0, 0, 1],
4 args = (model, 0.2, 0.05),
5 popsize = 8,
6 maxiter = 4,
7 bounds = so.Bounds(
8 [0, 0, 0,],
9 [2, 2, 2,]
10 ),
11 seed = 5,
12)
13
14# Время расчёта 0:00:02.170500 ...
Строка 2. Первым аргументом оптимизатору передаётся целевая функция
objective, которую он будет минимизировать;Строка 3. Следующему именованному аргументу
x0передаётся список начальных значений глобальных переменных в строгом порядке, использованном в функцииobjective:DIFFERENTIAL_COEFF,INTEGRAL_COEFF,PROPORTIONAL_COEFF;Строка 4. Аргументу
argsпередаётся набор постоянных параметров и объектmodelв порядке, назначенном в функцииobjective:model,target,relative_width;Строки 7, 10. Аргументу
boundsназначаются ограничения на область вещественных значений поиска оптимальных значений переменныхDIFFERENTIAL_COEFF,INTEGRAL_COEFF,PROPORTIONAL_COEFFв соответствии с функциями ограничения целевой функцией (9);Строка 11. Аргументу
seedназначается величина для обеспечения воспроизводимости результата во время отладки решения задачи оптимизации.
Начальные значения глобальных переменных, переданные аргументу x0, формируются инженером эмпирически. Начальное приближение снижает время поиска оптимального решения.
Ограничения на область поиска оптимальных значений, переданные аргументу bounds, позволяют сосредоточить алгоритм на указанной области пространства параметров. Выбор области поиска оптимальных значений должен опираться на физические ограничения модели и технические требования к модели.
2.4. Анализ результатов адаптированной модели системы управления#
Для выполнения анализа результатов необходимо в следующей ячейке запустить модель системы управления с оптимальными значениями коэффициентов ПИД-регулятора для получения актуальных результатов изменения угла тангажа ЛА.
1variables = pd.Series(dict(
2 DIFFERENTIAL_COEFF = solution.x[0],
3 INTEGRAL_COEFF = solution.x[1],
4 PROPORTIONAL_COEFF = solution.x[2]
5))
6results = run(model, variables)
7results.index = results.index / 1e3
8axis = result.plot()
9axis.set_xlabel(r"Time, $[s]$")
10axis.set_ylabel(r"Pitch angle, $\theta, [rad]$")
11axis.grid(True)
Строки 1, 5. Создаётся объект
variablesс оптимальными значениями глобальных переменных модели, передаваемых из вектораxобъектаsolution, который был создан в предыдущей ячейке по результату решения оптимизационной задачи;Строка 7. Миллисекунды переводятся в секунды для удобства анализа временного ряда угла тангажа;
В результате работы ячейки выше выполняется построение графика,приведённого ниже, для анализа актуальных результатов.
Изменение угла тангажа от времени в адаптированной модели.#
Линии |
Описание |
|---|---|
Синяя линия |
Результаты первого расчёта зависимости угла тангажа от времени |
Зелёная линия |
Изменение угла тангажа от времени в адаптированной модели |
Результаты анализа критериев качества системы управления представлены в таблице ниже.
№ |
Критерий |
Результат оптимизации |
Максимальное допустимое значение |
|---|---|---|---|
1 |
Перерегулирование |
0.1293 |
0.15 |
2 |
Время регулирования с коридором точности в 0.05 |
4.80 |
\(10 [c]\) |
3 |
Относительная ошибка стационарного значения угла тангажа |
0.0034 |
0.05 |
3. Выводы#
В рамках данного практического руководства вам удалось освоить:
Процесс разработки математической модели продольного движения ЛА с помощью блока Jython;
Процесс создания модели управления углом тангажа ЛА с использованием библиотеки блоков Автоматика;
Процесс разработки Python программы для автоматизированной настройки коэффициентов ПИД-регулятора системы управления углом тангажа.