Учебное пособие для студентов высших учебных заведений
Скачать 5.41 Mb.
|
om=u; OM = [0 OM0 0]'; v=x(2:4); omMOM=om-OM; omPOM=om+OM; z(1)=-(v'*omMOM)/2; % уравнения скалярной части кватерниона z4=(x(1)*omMOM+cross(v,omPOM))/2; % уравнения векторной части кватерниона z(2:4)=z4; % Конец процедуры mdlDerivatives %=============================================% function y = mdlOutputs(x) y=x; % Конец процедуры mdlOutputs Полностью аналогично предыдущему создадим новый S-блок за именем S_Kuqwat. В нем входом является вектор проекций абсолютной угловой скорости КА, а выходом – вектор, состоящий из четырех компонентов кватерниона поворо- та КА относительно орбитальной системы координат. Первый компонент пред- ставляет собой скалярную часть, остальные три – проекции векторной части этого кватерниона. В результате получим окно библиотеки в виде, представленном на рис. 1.113. Наконец, довольно важно создать S-блок, который осуществлял бы опера- цию векторного умножения двух векторов, аналогичную М-функции cross. Для этого удобнее использовать другой стандартный блок SubSystem из раздела Signals & Systems. Перетянем его мышью в окно новой библиотеки (рис. 1.114). Дважды щелкнув на изображении этого блока, получим пустое окно, в ко- тором составим блок-схему подсистемы, приведенную на рис. 1.115. В ней использован блок MATLAB Function из раздела Functions & Tables, окно настраивания которого представлено на рис. 7.116. Именно он, собственно, и выполняет операцию векторного умножения двух входных векторов, используя для этого стандартную функцию cross системы MatLab. 7.5. Создание библиотек S-блоков пользователя 401 Рис. 1.113 Рис. 1.114 Рис. 7.115 Рис. 7.116 В итоге всего этого будем иметь новую библиотеку из трех новых собст- венных S-блоков. Запишем ее пока что как untitled1 (рис. 7.117). Рис. 7.117 7.5.2. Маскировка блоков 7.5. Создание библиотек S-блоков пользователя 402 Теперь рассмотрим процесс маскировки блока, т. е. образования окна на- страивания блока, которое является более удобным механизмом оперирования с блоком. Прежде всего, нужно выделить тот блок в библиотеке, для которого жела- тельно образовать маску. Пусть это будет блок S_DUE новой библиотеки. Выде- лим его, щелкнув мышкой на его изображении. Теперь нужно перейти в меню Edit окна библиотеки, в которой расположен выделенный блок. При этом возникнет перечень команд этого меню (рис. 7.118). Рис. 7.118 Рис. 7.119 В этом перечне следует выбрать команду Mask S-Function. Тогда на экране возникнет окно редактора маски, представленное на рис. 7.119. Примечание. При повторном вызове вашей библиотеки возможно, что эта команда не является активной. Тогда обратите внимание на предпоследнюю команду в перечне меню. Она должна быть активной и иметь такой вид Unlock Library. Нажмите на нее мышью. Вид перечня меню изменится, и команда Mask S-Function должна стать активной. Окно Mask Editor (рис. 7.119) имеет три вкладки: - Icon – для создания и редактирования изображений на пиктограмме блока; - Initialization – для создания и редактирования диалоговой части (введения па- раметров) окна настраивания; - Documentation – для оформления и редактирования текстовой части окна на- страивания блока и справочной части маски. Перейдем (с помощью мыши) к важнейшей из них – Initialization, - так как именно она, собственно, образовывает маску, ее главную часть, - окно настраива- ния. Она имеет вид, приведенный на рис. 7.119. 7.5. Создание библиотек S-блоков пользователя 403 Укажем, что из рассмотрения окон настраивания (масок) стандартных S- блоков вытекает, что эти окна имеют, в общем случае, три части: - первая (верхняя) часть содержит справочную информацию о назначении блока, его главных параметрах и правилах, которыми следует пользоваться при вве- дении параметров блока и его использовании; - вторая (нижняя) часть по имени Parameters содержит окошка введения пара- метров блока и надписи над этими окошками, которые объясняют содержание этих параметров; - третья, самая нижняя, стандартная часть содержит стандартные кнопки OK, Cancel, Help и Apply. Редактор маски предназначен для оформления первых двух частей окна на- страивания, а также создания справки, которая вызовется при нажатии кнопки Help в этом окне. Рассматривая вкладку Initialization, можно сделать вывод, что с ее помощью можно сконструировать вторую, важнейшую, часть маски, - ее диалоговую часть. Сконструируем диалоговую часть маски избранного блока. В нем всего два параметра, значения которых нужно вводить – матрица моментов инерции тела J размером (3*3) и вектор UgSk0 начальных значений трех проекций угловой ско- рости тела. Поэтому нужно создать два окошка введения значений этих парамет- ров и создать надписи на них. Рис. 7.120 Рис. 7.121 Сначала в верхнем окошке введения Mask type вкладки введем имя блока S_DUE. Введение очередного окошка в маску осуществляется нажатием мышью кнопки Add по левую сторону от наибольшего окна вкладки, где отображаются результаты редактирования. При этом надпись < 7.5. Создание библиотек S-блоков пользователя 404 жения надписи над создаваемым окошком введения. Сама запись этой надписи осуществляется в окошке с надписью Prompt. Запишем в это окошко такую строку UgSk0 (вектор начальных значений угловой скорости). Ниже в окошко с надписью Variable записывается имя идентификатора, со- держащего этот параметр в правой части обращения к соответствующей S- функции (UgSk0). Результат этих действий показан на рис. 1.120. Снова нажмем кнопку Add и введем в окошко с надписью Prompt строку J (матрица моментов инерции), а в окошко Variable введем имя J. В результате ок- но редактора маски приобретет вид, представленный на рис. 1.121. Теперь можно перейти к вкладке Documentation (рис. 7.122). В окно Mask type следует ввести имя блока. В окно Block description записывается информа- ция, которую бы вы желали иметь в верхней (справочной) части окна настраива- ния блока, а в окне Block Help записывается дополнительная справочная инфор- мация, которая вызовется, если в окне маски нажать кнопку Help. Рис.7.122 Рис. 7.123 Если теперь завершить редактирование маски нажатием кнопки 7.5. Создание библиотек S-блоков пользователя 405 Аналогично получается маска блока S_KUqwat, представленная на рис. 7.124, и маска блока "Векторное произведение", приведенная на рис. 7.126. Един- ственным исключением является то, что при создании последней маски была ис- пользована и вкладка Icon (рис. 7.125), в окно Drawing commands которой была введена команда disp('cross(U1,U2)') которая, собственно, выводит надпись cross(U1,U2) на изображении блока. Рис.7.124 Рис. 7.125 Рис. 7.126 Образованную библиотеку запишем под именем LibLAZ. mdl. 7.5.3. Моделирование процесса ориентации космического аппарата В качестве примера применения блоков собственной библиотеки рассмот- рим процесс образования S-модели и комплекса M-программ, предназначенных для моделирования процесса управления ориентацией космического аппарата (в частности, искусственного спутника Земли – ШСЗ). Для простоты будем рассматривать космический аппарат как одно твердое тело, которое обращается вокруг Земли по замкнутой орбите. Управление ориен- 7.5. Создание библиотек S-блоков пользователя 406 тацией (т. е. угловым положением относительно орбитальной системы координат) осуществляется с помощью трех маховичних двигателей, оси которых совпадают с осями декартової системы координат, жестко связанной с корпусом космическо- го аппарата (КА). Маховичные двигатели, с одной стороны, осуществляют разгон соответствующего ротора в соответствии с уравнениями k k M dt dH = , ( z y x k , , = ); а, с другой стороны, осуществляют наложение соответствующего момента сил (но в противоположном направлении) вокруг оси вращения ротора на корпус самого космического аппарата. Последний момент вызывает изменение углового движе- ния КА вокруг этой оси, т. е. осуществляет управление ориентацией. Изменение угловой ориентации космического аппарата в пространстве под- чиняется основным законам механики, из которых вытекают уравнения, вопло- щенные в блоках S_DUE и S_KUqwat. Составим S-модель системы ориентации и сохраним ее в файле SKOKA.mdl. Она приведена на рис. 7.127. Блок-схема моделювання роботи СИСТЕМИ КЕРУВАННЯ ОРІЄНТАЦІЄЮ орбітального космічного апарату 5 Гіроскопічний момент 4 МОМЕНТ сил 3 EPS 2 OM 1 КВАТ кват Момент S_KUqwat Кінематичні рівняння у кватерніонах S_DUE Динамічні рівняння Ейлера ГіроМомент cross(U1,U2) Векторний добуток MATLAB Function Векторна частина кватерніону om Manual Switch K Kr K J K Dr m [0 0 0] Constant Момент сил Рис. 7.127 Система ориентации состоит из последовательно соединенных блоков S_DUE и S_KUqwat. Полученное на выходе блока S_KUqwat значение кватер- ниона поворота подается на вход блока MATLAB Function, который выделяет век- торную часть этого кватерниона, необходимую для формирования вектора мо- мента управления угловым положением КА. В целом момент сил управления формируется по такому закону: ) ( ) ( ω ω ω q M ⋅ ⋅ × + ⋅ − ⋅ − = J D K r r (7.8) В нем можно различить три составляющие: - составляющую, пропорциональную векторной части кватерниону отклонения текущего положения КА от заданного его положения (в этой программе задан- 7.5. Создание библиотек S-блоков пользователя 407 ное положение отвечает нулевому значению векторной части кватерниона); именно эта составляющая момента управления заставляет приближаться КА к заданному угловому положению; - составляющую, пропорциональную вектору угловой скорости КА; она образу- ет демпфирование процесса приближения КА к заданному положению; - третья, последняя составляющая вводится для того, чтобы компенсировать воз- никающий при угловом движении КА гироскопический момент, который стремится повернуть КА вокруг оси, перпендикулярной оси действия момента сил управления; именно введение этой составляющей заставляет корпус КА возвращаться к заданному положению по кратчайшему пути, т. е., уменьшает энергетические затраты на переориентацию КА. Матрицы и определяют закон управления и должны быть предвари- тельно известными. r K r D Формирование первой составляющей момента управления на блок-схеме осуществляется верхней обратной цепью с матричным усилителем Kr . Вторая составляющая формируется цепью с матричным усилителем Dr . Третья состав- ляющая получается третьей обратной цепью, в состав которой входят матричный усилитель J и образованный ранее блок сross(U1,U2) (см. рис. 7.127). Эти три образованные составляющие суммируются на сумматоре и подают- ся на вход блока S_DUE. Этим получается замкнутая система управления ориен- тацией. Поставим задачу промоделировать поведение системы ориентации косми- ческого аппарата, управляемого по компонентам кватерниона при разных законах регулирования в соответствии с данными, приведенными в статье [6], т. е. при значении матрицы инерции КА J=[1200 100 -200;100 2200 300;-100 300 3100] J = 1200 100 -200 100 2200 300 -100 300 3100 матрицы моментов демпфирования Dr=0.315*diag([1200 2200 3100]) Dr = 378.0000 0 0 0 693.0000 0 0 0 976.5000 и четырех значениях матрицы позиционного управления: - случай 1 - матрица управления пропорциональна обратной матрице моментов инерции Kr=k/J=diag([201,110,78]); Kr = 201 0 0 0 110 0 0 0 78 - случай 2 - матрица управления пропорциональна единичной матрице Е Kr=k*E=diag([110,110,110]) ; Kr = 110 0 0 0 110 0 7.5. Создание библиотек S-блоков пользователя 408 0 0 110 - случай 3 - матрица управления представляет собой комбинацию Kr=( αJ+βE) =diag([72,110,204]); Kr = 72 0 0 0 110 0 0 0 204 - случай 4 - матрица управления пропорциональна матрице J моментов инерции Kr=k*J=diag([60,110,155]) Kr = 60 0 0 0 110 0 0 0 155 Будем предполагать, что орбитальная угловая скорость равняется нулю, а начальное отклонение положения КА от заданного определяется кватернионом Qw0=[0.159 0.57 0.57 0.57], что отвечает начальному отклонению от требуемого положения, равному 161,7 градусов. Чтобы начать моделирование, нужно присвоить исходные значения всем параметрам. После моделирования необходимо на основе полученных при моде- лировании данных построить ряд графиков, которые отображали бы процесс пе- реориентации КA. Сделаем это (а также собственно моделирование) при помощи специального М-файла SKOKAupr.m. Текст этого файла приведен ниже % SKOKAupr.m % Управляющая программа для запуска модели SKOKA.mdl % Лазарев Ю.Ф. 18-12-2001 % Последние изменения 24-12-2001 clear all clc K=[3,1,2]; OM0=0;%.01; % Введение значений матрицы инерции J=[1200 100 -200; 100 2200 300; -200 300 3100]; % Введение начальных значений: % 1) проекций угловой скорости тела UgSk0=[0 0 0]; % 2)_компонентов кватерниона поворота Ug0=[0.159,0.57,0.57,0.57]; qw0=Ug0(1); qw=Ug0(2:4); U0=2*acos(qw0); Cs0=qw/sin(U0/2); Zk=[1 0 0 0]; % Матрицы моментов УПРАВЛЕНИЯ Dr=0.315*diag(diag(J)) V=[201,110,78;110 110 110;72 110 204;60 110 155] for k=1:4 % Установление параметров моделирования Kr=diag(V(k,:)) options=simset('Solver','ode45','RelTol',1e-6); sim('SKOKA2',60,options); % МОДЕЛИРОВАНИЕ на S-модели % Формирование данных для вывода ГРАФИКОВ tt=tout; q0=yout(:,1); qx=yout(:,2); qy=yout(:,3); qz=yout(:,4); omx=yout(:,5); omy=yout(:,6); omz=yout(:,7); Mx=yout(:,11); My=yout(:,12); Mz=yout(:,13); if k==1 t1=tt; 7.5. Создание библиотек S-блоков пользователя 409 q01=q0; qx1=qx; qy1=qy; qz1=qz; omx1=omx; omy1=omy; omz1=omz; Mx1=Mx; My1=My; Mz1=Mz; elseif k==2 t2=tt; q02=q0; qx2=qx; qy2=qy; qz2=qz; omx2=omx; omy2=omy; omz2=omz; Mx2=Mx; My2=My; Mz2=Mz; elseif k==3 t3=tt; q03=q0; qx3=qx; qy3=qy; qz3=qz; omx3=omx; omy3=omy; omz3=omz; Mx3=Mx; My3=My; Mz3=Mz; elseif k==4 t4=tt; q04=q0; qx4=qx; qy4=qy; qz4=qz; omx4=omx; omy4=omy; omz4=omz; Mx4=Mx; My4=My; Mz4=Mz; end clear tt q0 qx qy qz omx omy omz Mx My Mz end A=180/pi; D1=2*acos(q01); D2=2*acos(q02); D3=2*acos(q03); D4=2*acos(q04); dt1=diff(t1); dHx1=diff(Mx1); DHx1=cumsum([0;dHx1.*dt1]); dHy1=diff(My1); DHy1=cumsum([0;dHy1.*dt1]) ; dHz1=diff(Mz1); DHz1=cumsum([0;dHz1.*dt1]); dH1=DHx1+DHy1+DHz1; dt2=diff(t2); dHx2=diff(Mx2); DHx2=cumsum([0;dHx2.*dt2]); dHy2=diff(My2); DHy2=cumsum([0;dHy2.*dt2]) ; dHz2=diff(Mz2); DHz2=cumsum([0;dHz2.*dt2]); dH2=DHx2+DHy2+DHz2; dt3=diff(t3); dHx3=diff(Mx3); DHx3=cumsum([0;dHx3.*dt3]); dHy3=diff(My3); DHy3=cumsum([0;dHy3.*dt3]) ; dHz3=diff(Mz3); DHz3=cumsum([0;dHz3.*dt3]); dH3=DHx3+DHy3+DHz3; dt4=diff(t4); dHx4=diff(Mx4); DHx4=cumsum([0;dHx4.*dt4]); dHy4=diff(My4); DHy4=cumsum([0;dHy4.*dt4]) ; dHz4=diff(Mz4); DHz4=cumsum([0;dHz4.*dt4]); d4=DHx4+DHy4+DHz4; % Графики проекций компонентов кватерниона на плоскости subplot(2,2,1) plot(qx1,qy1, qx2,qy2,':',qx3,qy3,'--',qx4,qy4,'.'), grid title(' Проекции КОМПОНЕНТОВ кватерниона') xlabel('Qx') ylabel('Qy') subplot(2,2,2) |