Биард Р.У., МакЛэйн Т.У. Малые БЛА - теория и практика (2015) (1245764), страница 49
Текст из файла (страница 49)
C.3 и указывают, каким образом координатыприсваиваются каждой метке. Для того чтобы создать рисунок в виде линий, не-СверхуСпередиСправаРис. C.3. Рисунок, используемый для создания анимации летательного аппарата. Использованы стандартные оси связанной системы, где ось x указывает вперед, ось y указывает вправо, а ось z указывает вниз корпуса самолета274Приложение Cобходимо будет соединить точки так, чтобы провести каждую из требуемых линий сегментов. Чтобы это можно было сделать одной непрерывной линией, некоторые сегменты потребуется повторить. Чтобы нарисовать летательныйаппарат, представленный на рис. C.3, следует пройти через следующие вершины: 1 2 3 4 1 5 6 2 6 7 3 7 8 4 8 5 1 9 10 2 10 11 3 11 12 4 12 9.
Программа Matlab, которая задает локальные координаты летательного аппарата, приводится ниже.123456789101112131415161718192021222324252627282930313233function XYZ = spacecraftPoints% define points on the spacecraft in local NEDcoordinatesXYZ = [...110;...% point 1110;...% point 2110;...% point 3110;...% point 4110;...% point 111 2;... % point 511 2;...
% point 6110;...% point 211 2;... % point 611 2;... % point 7110;...% point 311 2;... % point 711 2;... % point 8110;...% point 411 2;... % point 811 2;... % point 5110;...% point 11.51.5 0;...% point 91.5 1.5 0;...% point 10110;...% point 21.5 1.5 0;...% point 101.5 1.5 0;...% point 11110;...% point 31.5 1.5 0;...% point 111.51.5 0;...% point 12110;...% point 41.51.5 0;...% point 121.51.5 0;...% point 9]';Приложение C275Конфигурация летательного аппарата задана углами Эйлера ц, и и ш, которые представляют углы крена, тангажа и рысканья соответственно, а pn, pe, pdпредставляют положение на оси, направленной на север, восток и вниз соответственно.
Точки на летательном аппарате могут быть повернуты и перемещены по прямой с помощью программы Matlab, приводимой ниже.1234567891011121314151617function XYZ=rotate(XYZ,phi,theta,psi)% define rotation matrixR_roll = [...1, 0, 0;...0, cos(phi), sin(phi);...0, sin(phi), cos(phi)];R_pitch = [...cos(theta), 0, sin(theta);...0, 1, 0;...sin(theta), 0, cos(theta)];R_yaw = [...cos(psi), sin(psi), 0;...sin(psi), cos(psi), 0;...0, 0, 1];R = R_roll*R_pitch*R_yaw;% rotate verticesXYZ = R*XYZ;1 function XYZ = translate(XYZ,pn,pe,pd)2 XYZ = XYZ + repmat([pn;pe;pd],1,size(XYZ,2));Создание рисунка летательного аппарата в требуемом положении завершается с помощью следующей программы Matlab.1 function handle2 = drawSpacecraftBody(pn,pe,pd,phi,theta,psi, handle, mode)3% define points on spacecraft in local NED4%coordinates5NED = spacecraftPoints;6% rotate spacecraft by phi, theta, psi7NED = rotate(NED,phi,theta,psi);8% translate spacecraft to [pn; pe; pd]9NED = translate(NED,pn,pe,pd);10% transform vertices from NED to XYZ11R = [...120, 1, 0;...27613141516171819202122232425Приложение C1, 0, 0;...0, 0, 1;...];XYZ = R*NED;% plot spacecraftif isempty(handle),handle= plot3(XYZ(1,:),XYZ(2,:),XYZ(3,:), `EraseMode', mode);elseset (handle,`XData’,XYZ(1,:),`YData',XYZ(2,:),`ZData’,XYZ(3,:));drawnowendСтроки 11–16 используются для преобразованиякоординат из системы с осями, направленными насевер, восток и вниз (NED) в систему координатрисунка, используемую в Matlab, которая имеет осьx, находящуюся от наблюдателя справа, ось y, направленную на экран монитора, и ось z, направленную вверх.
Команда plot3 используется в строках 19и 20 для изображения исходного рисунка, и команда set используется для изменения XData, YData иZData в строках 22 и 23. Файл Simulink, которыйРис. C.4. Изображение летаможно использовать для отладки анимации, нахотельного аппарата с помодится на веб-сайте учебника. Изображение летащью линий и команды plot3тельного аппарата приводится на рис.
C.4.Недостаток применения анимации с использованием для этого функции spacecraftPoints, чтобы задать точки летательногоаппарата, состоит в том, что эта функция должна вызываться всякий раз, когда происходит обновление анимации. Поскольку эти точки статичные, то задать их необходимо только один раз. Функциональная маска Simulink можетиспользоваться, чтобы задавать точки в начале моделирования. Маскированиеm-файла drawSpacecraft в Simulink и последующий щелчок по Edit Mask приведут к появлению окна, похожего на то, что представлено на рис. C.5. Точкилетательного аппарата могут быть заданы в окне инициализации, как показанона рис. C.5, и преданы в m-файл drawSpacecraft в качестве параметра.Приложение C277Рис. C.5. Функциональная маска в Simulink позволяет инициализировать точки летательного аппарата в начале процесса моделированияC.4.
Пример анимации летательного аппарата, использующего вершины и граниКонтурный рисунок, представленый на рис. C.4, может быть визуально улучшен за счет использования в Matlab конструкции «вершина-грань». Вместокоманды plot3 для проведения непрерывной линии используется команду patch,чтобы нарисовать грани, заданные вершинами и цветом. Вершины, грани и цветадля воздушного аппарата задаются в программе Matlab, приведенной ниже.12345678910111213141516function [V, F, patchcolors]=spacecraftVFC% Define the vertices (physical location of verticesV = [...110;...% point 1110;...% point 2110;...% point 3110;...% point 411 2;...
% point 511 2;... % point 611 2;... % point 711 2;... % point 81.51.5 0;...% point 91.5 1.5 0;...% point 101.5 1.5 0;...% point 111.51.5 0;...% point 12];2781718192021222324252627282930313233343536373839Приложение C% define faces as a list of vertices numbered aboveF = [...1, 2, 6, 5;... % front4, 3, 7, 8;... % back1, 5, 8, 4;...
% right2, 6, 7, 3;... % left5, 6, 7, 8;... % top9, 10, 11, 12;... % bottom];% define colors for each facemyred = [1, 0, 0];mygreen = [0, 1, 0];myblue = [0, 0, 1];myyellow = [1, 1, 0];mycyan = [0, 1, 1];patchcolors = [...myred;...% frontmygreen;... % backmyblue;...% rightmyyellow;.. % leftmycyan;... % topmycyan;... % bottom];Вершины, показанные на рис. C.3, задаются в строках 3–16. Грани задаются перечислением индексов точек, которые задают грань. Например, передняягрань, заданная в строке 19, состоит из точек 1 2 6 5. Грани могут бытьзаданы с помощью N-точек, где матрица, которая задает грани, имеет N столбцов, а число строк является числом граней.
Цвет для каждой грани задается встроках 32–39. Программа Matlab, которая выполняет рисунок корпуса летательного аппарата, приведена ниже.12345678function handle= drawSpacecraftBody(pn,pe,pd,phi,theta,psi, handle, mode)[V, F, patchcolors] = spacecraftVFC;% define points on spacecraftV = rotate(V', phi, theta, psi)';}% rotate spacecraftV = translate (V', pn, pe, pd)';}% translate spacecraftПриложение C910111213141516171819202122279R = [...0, 1, 0;...1, 0, 0;...0, 0, 1;...];V = V*R; % transform vertices from NED to XYZif isempty(handle),handle = patch(`Vertices', V, `Faces', F,...`FaceVertexCData',patchcolors,...`FaceColor',`flat',...`EraseMode', mode);elseset(handle,`Vertices',V,`Faces',F);endЗнаки операции транспонирования в строках 5–8 используются из-за того,что положения точек в матрице смежности вершин V построены вдоль строк,а не вдоль столбцов.
Изображение летательного аппарата с помощью вершини граней приводится на рис. C.6. Дополнительные примеры использованияформата «вершина-грань» можно найти на веб-сайте книги.Рис. C.6. Изображение летательного аппарата с использованием вершин и гранейÏÐÈËÎÆÅÍÈÅ DÌîäåëèðîâàíèå â Simulink ñ ïîìîùüþ S-ôóíêöèéЭта глава предполагает наличие базовых знаний о рабочей среде ПО Matlab/Simulink. Для получения дополнительной информации следует обратитьсяк документации Matlab/Simulink. Simulink в основном представляет собой достаточно сложный инструмент для решения связанных обыкновенных простых гибридных дифференциальных уравнений и дифференциальных уравнений.
Каждый блок в Simulink имеет структуруx& c = f (t , x c , x d , u);x d [k + 1] = g (t , x c , x d , u);x c (0) = x c 0 ;x d [0] = x d 0 ;y = h(t , x c , x d , u),(D.1)(D.2)(D.3)где xc Î R n c является непрерывным состоянием с начальным условием xc0, xd Î R n dявляется дискретным состоянием с начальным условием xd0, u Î R m являетсявходными данными для этого блока, y Î R p является выходными данными блока, а t — пройденное время с момента начала моделирования. S-функция представляет собой инструмент Simulink для задания в явном виде функций f , g и hи начальных условий xc0 и xd0. Как объясняется в документации Matlab/Simulink, существует целый ряд методов для задания s-функций. В этом приложенииприводится описание двух различных методов: s-функция 1-го уровня m-файлаи s-функция C-файла.
S-функция C-файла транслируется в C-код и выполняется значительно быстрее, чем s-функции m-файла.D.1. Пример: дифференциальное уравнение второго порядкаВ этом разделе будет показано, как использовать систему, задаваемуюстандартной передаточной функцией второго порядкаY (s ) =w2nU (s )s 2 + 2 zwn s + wn2(D.4)с помощью функции m-файла 1-го уровня и s-функцию C-файла. Первым шагом в любом случае является представление уравнения (D.4) в форме пространства состояний.
Используя каноническую форму управления [30], имеемæ x& 1 ö æ -2 zwn - wn2 öæ c 1 ö æ1 ö÷ç ÷ + ç ÷ u,çç ÷÷ = çç0 ÷øçè c 2 ÷ø çè 0 ÷øè x& 2 ø è 1(D.5)æ c1 öy = (0 w2n ) çç ÷÷.èc2 ø(D.6)Приложение D281D.1.1. S,функция m,файла 1,го уровняПрограмма для s-функции m-файла, использующая систему, описаннуюуравнениями (D.5) и (D.6), показана ниже. Строка 1 задает главную функциюm-файла. Входными данными этой функции всегда являются истекшее время t,состояние x, которое является соединением непрерывного и дискретного состояний, u и flag, за которыми следуют задаваемые пользователем входные параметры, которыми в данном случае являются ж и щn.
Программа Simulink вызывает s-функцию и передает параметры t, x, входная величина u и flag. Когдаflag = 0, программа Simulink ожидает, чтобы s-функция вернула структуру sys,которая задает блок; начальные условия x0, пустую строчку str и массив ts, который задает время выборок блока. Когда flag = 1, программа Simulink ожидает,что s-функция вернет функцию f (t, x, u); когда флаг flag = 2, программа Simulinkожидает, что s-функция вернет g(t, x, u); и когда flag = 3, программа Simulinkожидает, что s-функция вернет h(t, x, u). Оператор переключения, который вызывает подходящую функцию на основании значения flag, показан в строках 2–11. Задание блока и начальных условий показано в строках 13–27.
Число непрерывных состояний, дискретных состояний, выходных данных и входных параметров задается в строках 16–19 соответственно. Член прямого проникновенияв строке 20 задается равным единице, если выходные данные зависят от входной величины u в явном виде, например если в линейном уравнении пространства состояний y = Cx + Du D ¹ 0.