Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования «Уральский федеральный университет имени первого Президента России Б.Н. Ельцина» (УрФУ) Институт радиоэлектроники и информационных технологий – РтФ Школа бакалавриата ИНДИВИДУАЛЬНОЕ ДОМАШНЕЕ ЗАДАНИЕ Дисциплина: "Основы теории сигналов" Вариант N 76 Тема: Разработка модели управляемого разворота космического аппарата, области достижимости и качественный анализ модели Студент гр. РИ-370004 Степанов В.А. Преподаватель: Кумков С.И. Екатеринбург 2020 Оглавление 1. Задание..................................................................................................................................................... 3 2. Постановка задачи .................................................................................................................................. 4 3. Структура моделирующей программы ................................................................................................. 6 4. Результаты моделирования ................................................................................................................... 9 5. Выводы ...................................................................................................................................................12 Литература .................................................................................................................................................13 Приложение ...............................................................................................................................................14 2 1. Задание Угловое движение космического аппарата (КА) описывается системой дифференциальных уравнений второго порядка F’ = Om , (1) Om’ = e, (2) где F,, Om – угол и угловая скорость разворота, градус и градус/с; e – управляющее угловое ускорение от двигателей, град/c2. Вследствие специфики управляющих двигателей управляющее угловое ускорение может принимать значения –emax, 0 , emax , град/c2, однако по времени управляющее ускорение может переключаться практически без задержек между указанными значениями. В начальный момент t0 задано состояние КА по углу F0, и угловой скорости Om0. Разработать алгоритмы построения множества достижимости – множества состояний КА по углу и угловой скорости через заданное время Tр. ОТЧЕТ по работе должен содержать: 1. Задание. 2. Постановку задачи, описание метода решения. 3. Описание разработанных алгоритмов и блок-схему моделирующей программы. 4. Результаты моделирования: как соответствующие числовые результаты, так и графические иллюстрации и рисунки. Качественный анализ искомого решения а) при управляющем ускорении постоянном на указанном интервале времени; б) при наличии ограничения tmin на время переключения управляющих двигателей. 3 2. Постановка задачи Управляемый объект – космический аппарат (КА). На космическом аппарате установлены двигатели для управления угловым положением и угловой скоростью. Специфика двигателей такова, что угловое ускорение может принимать только три значения, , град/ , но при этом переключаются они без задержек. Начальное угловое положение известно и равно F0, начальная угловая скорость также известна и равна Om0. Для простоты примем начальное время t0 = 0. Поскольку по заданию управляющее угловое ускорение может принимать только одно из трёх постоянных значений, угловая скорость разворота меняется линейно по времени на каждом из подинтервалов времени (ti+1 - ti), на котором угловое ускорение и угол будут описываться по формулам 3 и 4 соответственно [1]: Om(t) =Om0 + F(t) = F0 + = Om0 + ei∙ (ti+1 - ti), = F0 + Om0∙t + (ei∙(ti+1 - ti)2/2), (3) (4) где ei = const из множества {-emax, 0, emax} – значение углового ускорения на временном подинтервале (ti+1 - ti) . Для заданного времени Tp найдем минимальные и максимальные значения угла и угловой скорости разворота. Обозначим: Ommin = Om0 - emax∙Tp, (5) Ommax = Om0 + emax∙Tp, (6) Fmin = F0 + Om0∙Tp - emax∙Tp2/2, (7) 4 Fmax = F0 + Om0∙Tp + emax∙Tp2/2, (8) Из-за того, что управление может переключать двигатели в любой момент (см. формулы 3, 4), множество достижимости будет на фазовой плоскости выглядеть так, как показано на рис. 1. Рис. 1. Множество достижимости При всех остальных типах управления точки достижимости будут лежать внутри данной плоскости. На рисунке 2 изображены примеры траекторий управления: 1) с начальным нулевым ускорением и последующим ускорением emax. 2) с начальным ускорением emax и последующим ускорением emin. 3) с начальным ускорением emin и последующим ускорением emax. Для определения достигаемых точек были использованы формулы 5, 6, 7 и 8. 5 Рис. 2. Типы управления при различном ускорением e 3. Структура моделирующей программы Перечисленные выше расчетные формулы были сведены в моделирующую программу. Программа была реализована на языке Python [2]. Графическое выполнение результатов выполнялось с помощью [3-4] блок схема программы приведена на рисунке 3. Сначала в программе задаются начальные условия: F0, Тр, t0, Om0, e. Используя формулы 5-8 чертим границы множества достижимости состояний КА. Далее по формулам 3, 4 вычисляем, в какой точке окажется космический аппарат по прошествии Tр. 6 Начало Ввод начального значения угла F0 Ввод начального значения угловой скорости Om0 Ввод углового ускорения emax Ввод значения расчётного времени Тр Ввод начального значения интервалов состояний t0 1 1 e=emax, e=0, e=-emax 7 Вывод результата (F, Om) Построение графика (F, Om) Конец Рис. 3. Блок-схема 8 4. Результаты моделирования Для отладки и моделирования алгоритмов программы были взяты следующие числовые данные: F0 = 5 град; emax = 0.3 град/с2; Tp = 9 с; Om0 = 5 град/с; t0 = 0 с; Рис. 4. График, построенный моделирующей программой Как видно на рисунке 4, сначала КА двигался без ускорения, затем промежуток времени с ускорением emax, следующий промежуток с ускорением -emax до конца моделирования. С помощью программы, используя формулы 3 и 4, были получены координаты для левой и правой границ области достижимости. Координаты левой границы φl : φL1 = ( 62.15, 7.7 ) 9 φL2 = ( 59.525, 7.4 ) φL3 = ( 57.05, 7.1 ) φL4 = ( 54.725, 6.8 ) φL5 = ( 52.55, 6.5 ) φL6 = ( 50.525, 6.2 ) φL7 = ( 48.65, 5.9 ) φL8 = ( 46.925, 5.6 ) φL9 = ( 45.35, 5.3 ) φL10 = ( 43.925, 5.0 ) φL11 = ( 42.65, 4.7 ) φL12 = ( 41.525, 4.4 ) φL13 = ( 40.55, 4.1 ) φL14 = ( 39.725, 3.8 ) φL15 = ( 39.05, 3.5 ) φL16 = ( 38.525, 3.2 ) φL17 = ( 38.15, 2.9 ) φL18 = ( 37.925, 2.6 ) φL19 = ( 37.85, 2.3 ) Координаты правой границы φR: φR1 = ( 37.85 2.3 ) φR2 = ( 40.47500000000001 2.6000000000000005 ) φR3 = ( 42.949999999999996 2.9 ) φR4 = ( 45.275 3.2 ) φR5 = ( 47.449999999999996 3.4999999999999996 ) φR6 = ( 49.475 3.8 ) φR7 = ( 51.35000000000001 4.1000000000000005 ) φR8 = ( 53.074999999999996 4.4 ) φR9 = ( 54.65 4.7 ) φR10 = ( 56.074999999999996 5.0 ) φR11 = ( 57.35 5.3 ) φR12 = ( 58.475 5.6000000000000005 ) φR13 = ( 59.449999999999996 5.9 ) φR14 = ( 60.275 6.2 ) φR15 = ( 60.949999999999996 6.5 ) φR16 = ( 61.475 6.8 ) φR17 = ( 61.85 7.1000000000000005 ) φR18 = ( 62.074999999999996 7.3999999999999995 ) φR19 = ( 62.15 7.699999999999999 ) 10 Качественный анализ. а) при постоянном управляющем ускорении e на указанном интервале времени множество достижимости будет в виде гиперболы в фазовой плоскости с вершинами (F0, Om0) и (F0+Om0∙t+e∙Tp2/2, Om0+e∙Tp) б) при наличии ограничения tmin на время переключения управляющих двигателей общее решение будет содержать на множестве достижимости горизонтальные отрезки, характеризующие задержку. Вершины отрезка (F0, Om0) и (F0+Om0 tmin, Om0). 11 5. Выводы Благодаря разработанному алгоритму, решена задача для определения множества состояний КА по углу и угловой скорости. Из-за специфики управляющих двигателей, управляющее угловое ускорение может практически без задержек переключаться между значениями emax, -emax, 0. Исходя из графика, построенного программой, видно, что в зависимости от изменения углового ускорения множество достижимости будет находиться внутри или на границах области, описанной на рисунке 1. Данный алгоритм разработан и позволяет задавать любые начальные значения по углу и угловой скорости, что позволяет определять различные множества состояний КА. 12 Литература [1] Интегралы [Электронный ресурс]. URL: http://mathprofi.ru/chto_takoe_integral_teorija_dlja_chainikov.html (дата обращения: 23.12.2020) [2] Руководство по зыку программирования Python [Электронный ресурс]. URL: https://metanit.com/python/tutorial/ (дата обращения: 23.12.2020) [3] Библиотека mathplotlib для языка программирования Python [Электронный ресурс]. URL: https://devpractice.ru/matplotlib-lesson-1-quickstart-guide/ (дата обращения: 23.12.2020) [4] Библиотека [Электронный mathplotlib ресурс]. URL: для языка программирования https://matplotlib.org/ (дата Python обращения: 23.12.2020) 13 Приложение Моделирующая программа на языке программирования Python версии 3. import matplotlib.pyplot as plt import numpy as np from math import fabs f0 = 5; om0 = 5; #fp = 0; omp = 0; #ftmin=0; omtmin=0; #h=0; eh=0; tp=11; tmin=0; e=0.3 t = range(10) ommin = [(om0 - e*i) for i in t] fmin = [(f0+om0*i-(e*i*i)/2) for i in t] #ommax=om0 + e*tp #fmax=f0+om0*tp+(e*tp*tp)/2 ommax = [(om0 + e*i) for i in t] fmax = [(f0+om0*i+(e*i*i)/2) for i in t] plt.plot(fmax,ommax) plt.plot(fmin,ommin) e=0 ome0 = [(om0 - e*i) for i in t] fe0 = [(f0+om0*i-(e*i*i)/2) for i in t] plt.plot(fe0,ome0) fl = [62.15, 59.52499999999999, 57.050000000000004, 54.725, 52.550000000000004, 50.525, 48.65, 46.925000000000004, 45.35, 43.925000000000004, 42.65, 41.525, 40.550000000000004, 39.725, 39.05, 38.525, 38.15, 37.925000000000004, 37.85] 14 oml = [7.7, 7.3999999999999995, 7.1, 6.8, 6.5, 6.2, 5.8999999999999995, 5.6, 5.3, 5.0, 4.7, 4.4, 4.1, 3.8, 3.5, 3.2, 2.9, 2.6, 2.3000000000000003] plt.plot(fl, oml) fr = [37.85, 40.47500000000001, 42.949999999999996, 45.275, 47.449999999999996, 49.475, 51.35000000000001, 53.074999999999996, 54.65, 56.074999999999996, 57.35, 58.475, 59.449999999999996, 60.275, 60.949999999999996, 61.475, 61.85, 62.074999999999996, 62.15] omr = [2.3, 2.6000000000000005, 2.9, 3.2, 3.4999999999999996, 3.8, 4.1000000000000005, 4.4, 4.7, 5.0, 5.3, 5.6000000000000005, 5.9, 6.2, 6.5, 6.8, 7.1000000000000005, 7.3999999999999995, 7.699999999999999] plt.plot(fr, omr) import matplotlib.pyplot as plt import numpy as np from math import fabs f0 = 5; om0 = 5; #fp = 0; omp = 0; #ftmin=0; omtmin=0; #h=0; eh=0; tp=11; tmin=0; e=0.3 t = range(10) ommin = [(om0 - e*i) for i in t] fmin = [(f0+om0*i-(e*i*i)/2) for i in t] #ommax=om0 + e*tp #fmax=f0+om0*tp+(e*tp*tp)/2 ommax = [(om0 + e*i) for i in t] fmax = [(f0+om0*i+(e*i*i)/2) for i in t] plt.plot(fmax,ommax) plt.plot(fmin,ommin) 15 e=0 ome0 = [(om0 - e*i) for i in t] fe0 = [(f0+om0*i-(e*i*i)/2) for i in t] plt.plot(fe0,ome0) e = 0.3 #t = np.linspace(0.0, 0.5, num=2) #om1 = [(om0 - e*i) for i in t] #f1 = [(f0+om0*i-(e*i*i)/2) for i in t] #plt.plot(f1,om1) #t = np.linspace(0.0, 9.0, num=19) #om12 = [(om1[1] + e*i) for i in t] #f12 = [(f1[1]+om1[1]*i+(e*i*i)/2) for i in t] #plt.plot(f12,om12) def func1(a, b, x, y): t = np.linspace(0.0, a, num=x) omf1 = [(om0 - e*i) for i in t] ff1 = [(f0+om0*i-(e*i*i)/2) for i in t] plt.plot(ff1,omf1) t = np.linspace(0.0, b, num=y) omf2 = [(omf1[x-1] + e*i) for i in t] ff2 = [(ff1[x-1]+omf1[x-1]*i+(e*i*i)/2) for i in t] plt.plot(ff2,omf2) lst = [ff2[y-1], omf2[y-1]] return lst l = 0.5 x=2 y = 18 16 pointsMax = [] for i in range(18): pointsMax =pointsMax + func1(l, 9.0-l, x, y) #func1(l, 9.0-l) l = l+0.5 x=2+1 y=y-1 for i in pointsMax: print(i) l=len(pointsMax) fl=[62.15] oml=[7.7] for i in range(l): if i%2==0: fl.append(pointsMax[i]) else: oml.append(pointsMax[i]) print(fl) print(oml) l = l-1 for i in range(l): print(" = (", fl[i], oml[i], ")") plt.plot(fl, oml) om0 = 5 f0 = 5 def func2(a, b, x, y): t = np.linspace(0.0, a, num=x) 17 omf1 = [(om0 + e*i) for i in t] ff1 = [(f0+om0*i+(e*i*i)/2) for i in t] plt.plot(ff1,omf1) t = np.linspace(0.0, b, num=y) omf2 = [(omf1[x-1] - e*i) for i in t] ff2 = [(ff1[x-1]+omf1[x-1]*i-(e*i*i)/2) for i in t] plt.plot(ff2,omf2) lst = [ff2[y-1], omf2[y-1]] return lst l = 0.5 x=2 y = 18 pointsMax = [] for i in range(18): pointsMax = pointsMax + (func2(l, 9.0-l, x, y)) #func1(l, 9.0-l) l = l+0.5 x=2+1 y=y-1 print(pointsMax) l=len(pointsMax) fl=[37.85] oml=[2.3] for i in range(l): if i%2==0: fl.append(pointsMax[i]) else: oml.append(pointsMax[i]) 18 l = l-1 for i in range(l): print(" = (", fl[i], oml[i], ")") #print(fl) #print(oml) plt.plot(fl, oml) 19