Биард Р.У., МакЛэйн Т.У. Малые БЛА - теория и практика (2015) (1245764), страница 50
Текст из файла (страница 50)
Начальные условия задаются в строке 24. Время выборок задается в строке 27. Формат этой строки — ts = [period offset], гдеperiod задает периодичность выборок и равен 0 для непрерывного времени или1 для прошедшего и где offset определяет сдвиг времени выборки, которыйобычно равен 0. Функция f(t, x, u) задается в строках 30–32, а выходная функция h(t, x, u) задается в строках 35–36.
Файл Simulink, который называютm-файлом s-функции, содержится на веб-сайте учебника.123456789101112function [sys,x0,str,ts] = second_order_m(t,x,u,flag,zeta,wn)switch flag,case 0,[sys,x0,str,ts]=mdlInitializeSizes;% initialize blockcase 1,sys=mdlDerivatives(t,x,u,zeta,wn);% define xdot = f(t,x,u)case 3,sys=mdlOutputs(t,x,u,wn);% define xup = g(t,x,u)282Приложение D13141516171819202122232425262728293031323334353637383940otherwise,sys = [];end%========================================================%function [sys,x0,str,ts]=mdlInitializeSizessizes = simsizes;sizes.NumContStates = 2;sizes.NumDiscStates = 0;sizes.NumOutputs = 1;sizes.NumInputs = 1;sizes.DirFeedthrough = 0;sizes.NumSampleTimes = 1;sys = simsizes(sizes);x0 = [0; 0]; % define initial conditionsstr = []; % str is always an empty matrix% initialize the array of sample timests = [0 0]; % continuous sample time%========================================================%function xdot=mdlDerivatives(t,x,u,zeta,wn)xdot(1) = 2*zeta*wn*x(1) wn^2*x(2) + u;xdot(2) = x(1);%========================================================%function y=mdlOutputs(t,x,u,wn)y = wn^2*x(2);D.1.2.
S,функция С,файлаПрограмма для s-функции С-файла, которая использует систему и задаетсяуравнениями (D.5) и (D.6), приведена ниже. Имя функции должно быть задано в 3-й строке. Число параметров, которые передаются s-функции, задаютсяв 17-й строке, а макрос, который получает доступ к этим параметрам, задан в6-й и 7-й строках. В 8-й строке задается макрос, предоставляющий простойдоступ к входным данным блока. Структура блока задается с использованиемmdlInitializeSizes в строках 15–36. Число непрерывных состояний, дискретныхсостояний, входных и выходных параметров задается в строках 21–27. Времявыборки и сдвиг задаются в строках 41–46.
Начальные условия для состоянийзадаются в строках 52–57. Функция f (t, x, u) задается в строках 76–85, а функция h(t, x, u) – в строках 62–69. S-функция С-файла составляется с помощьюПриложение D283команды Matlab ? mex secondOrder_c.c. Файл Simulink, который вызывает этуs-функцию C-файла, содержится на веб-сайте учебника.1 /* File : secondOrder_c.c2 */3 #define S_FUNCTION_NAME secondOrder_c4 #define S_FUNCTION_LEVEL 25 #include «simstruc.h»6 #define zeta_PARAM(S) mxGetPr(ssGetSFcnParam(S,0))7 #define wn_PARAM(S) mxGetPr(ssGetSFcnParam(S,1))8 #define U(element) (*uPtrs[element])9 /* Pointer to Input Port0 */1011 /* Function: mdlInitializeSizes12 * Abstract:13 * The sizes information is used by Simulink to14 * determine the S?function blocks characteristics15 (number of inputs, outputs, states, etc.).16 */17 static void mdlInitializeSizes(SimStruct *S)18 {19 ssSetNumSFcnParams(S, 2);20 /* Number of expected parameters */21 if (ssGetNumSFcnParams(S)22 != ssGetSFcnParamsCount(S)) { return;23 /* Parameter mismatch will be reported by Simulink */24 }25 ssSetNumContStates(S, 2);26 ssSetNumDiscStates(S, 0);27 if (!ssSetNumInputPorts(S, 1)) return;28 ssSetInputPortWidth(S, 0, 1);29 ssSetInputPortDirectFeedThrough(S, 0, 1);30 if (!ssSetNumOutputPorts(S, 1)) return;31 ssSetOutputPortWidth(S, 0, 1);32 ssSetNumSampleTimes(S, 1);33 ssSetNumRWork(S, 0);34 ssSetNumIWork(S, 0);35 ssSetNumPWork(S, 0);36 ssSetNumModes(S, 0);37 ssSetNumNonsampledZCs(S, 0);38 ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);39 }4028441424344454647484950515253545556575859606162636465666768697071727374757677787980818283Приложение D/* Function: mdlInitializeSampleTimes */static void mdlInitializeSampleTimes(SimStruct *S){ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME);ssSetOffsetTime(S, 0, 0.0);ssSetModelReferenceSampleTimeDefaultInheritance(S);}#define MDL_INITIALIZE_CONDITIONS/* Function: mdlInitializeConditions* Set initial conditions*/static void mdlInitializeConditions(SimStruct *S){real_T *x0 = ssGetContStates(S);x0[0] = 0.0;x0[1] = 0.0;}/* Function: mdlOutputs* output function*/static void mdlOutputs(SimStruct *S, int_T tid){real_T*y = ssGetOutputPortRealSignal(S,0);real_T*x = ssGetContStates(S);InputRealPtrsType uPtrs= ssGetInputPortRealSignalPtrs(S,0);UNUSED_ARG(tid); /* not used */const real_T *wn = wn_PARAM(S);y[0] = wn[0]*wn[0]*x[1];}#define MDL_DERIVATIVES/* Function: mdlDerivatives* Calculate state?space derivatives*/static void mdlDerivatives(SimStruct *S){real_T *dx = ssGetdX(S);real_T *x = ssGetContStates(S);InputRealPtrsType uPtrsПриложение D84 = ssGetInputPortRealSignalPtrs(S,0);8586 const real_T *zeta = zeta_PARAM(S);87 const real_T *wn = wn_PARAM(S);88 dx[0] = ?2*zeta[0]*wn[0]*x[0] ? wn[0]*wn[0]*x[1] + U(0);89 dx[1] = x[0];90 }9192 /* Function: mdlTerminate93 * No termination needed.94 */95 static void mdlTerminate(SimStruct *S)96 {97 UNUSED_ARG(S); /* unused input argument */98 }99100 #ifdef MATLAB_MEX_FILE101 #include «simulink.c»102 #else103 #include «cg_sfun.h»104 #endif285ÏÐÈËÎÆÅÍÈÅ EÏàðàìåòðû êîðïóñà ëåòàòåëüíîãî àïïàðàòàВ этом приложении приводятся физические параметры для двух малых беспилотных самолетов: «летающее крыло» Zagi, показанное на рис.
E.1(a), и БЛА«Аэрозонд», показанный на рис. E.1(б). Масса, геометрия, двигательная установка и аэродинамические параметры для «летающего крыла» Zagi приведеныв табл. E.1. Масса, геометрия, двигательная установка и аэродинамическиепараметры для Aerosonde приведены в табл. E.2 [129].а)б)Рис. E.1. (a) Корпус летательного аппарата Zagi. (б) БЛА AerosondeE.1. Летающее крыло ZagiТаблица E.1. Параметры «летающего крыла» ZagiПараметрЗначениеПродольныйкоэфф.Боковойкоэфф.ЗначениеЗначениеm1,56 кгC L00,09167C Y00Jx0,1147 кг м2C D00,01631C l000,0576 кгм2C m00,02338C n00Jz0,1712 кгм2C La3,5016C Yb0,07359Jxz0,0015 кг м2C Da0,2108C lb0,02854C ma0,5675C nb0,00040Jyм2S0,2589b1,4224 мC Lq2,8932C Yp0c0,3302 мC Dq0C lp0,3209C mq1,3990C np0,01297SПроп.0,0314м2Приложение E287Окончание табл.
E.1ПараметрПродольныйкоэфф.ЗначениеБоковойкоэфф.ЗначениеЗначениеr1.2682 кг/м3C Ld e0,2724C Yr0kДвиг.20C Dd e0,3045C lr0,03066kTp0C md e0,3254C nr0,00434kW0CПроп.1,0C Yd a0e0,9M50C lda0,1682a00,4712C nd a0,00328e0,1592C Dp0,0254E.2. БЛА «Аэрозонд»Таблица E.2. Аэродинамические коэффициенты для БЛА «Аэрозонд»ПараметрmПродольныйкоэфф.Значение13,5 кгкг-м2Боковойкоэфф.ЗначениеЗначениеC L00,8C Y00Jx0,8244C D00,03C l00Jу1,135 кг-м2C m0-0,02338C n00кг-м2C La3,45C Yb-0,98Jz1,759кг-м2Jxz0,1204C Da0,30C lb-0,12S0,55 м2C ma-0,38C nb0,25b2,8956 мC Lq0C Yp0c0,18994 мC Dq0C lp-0,260.2027м2C mq-3,6C np0,022r1,2682кг/м3C Ld e-0,36C Yr0kДвиг.80C Dd e0C lr0,14kTp0C md e-0,5C nr-0,35kW0CПроп.1,0C Yd a0e0,9M50C lda0,08SПроп.a00,4712C nd a0,06e0,1592C Yd r-0,17C Dp0,0437C ldr0,105C тd r-0,032ÏÐÈËÎÆÅÍÈÅ FÁàëàíñèðîâêà è ëèíåàðèçàöèÿ â SimulinkF.1.
Использование команды trim в SimulinkSimulink использует встроенную процедуру для расчета условий балансировки для общих диаграмм Simulink. Полезные инструкции по использованию этойкоманды могут быть получены набором на клавиатуре help trim в подсказкеMatlab. Как было описано в разделе 5.3, при условии заданных параметров V a* ,R * и R * необходимо найти x* и u*, такие, чтобы x& * = f (x*, u*), где x и u задаютсяуравнениями (5.17) и (5.18), а x& * — уравнением (5.21) и где f (x, u) задается правой частью уравнений (5.1)–(5.12). Формат команды trim Simulink имеет вид[X,U,Y,DX] = TRIM(’SYS’,X0,U0,Y0,IX,IU,IY,DX0,IDX),где X является рассчитанным сбалансированным состоянием x*, U являетсярассчитанным входным параметром сбалансированного состояния u*, Y —рассчитанным выходным параметром сбалансированного состояния y*, а DXявляется рассчитанной производной состояния x& *.
Эта система определяетсямоделью SYS.mdl Simulink, где состояние модели определяется объединениемвсех состояний в подсистеме SYS.mdl, а входные и выходные параметры определяются Inports в Simulink и Outports соответственно. На рис. F.1 представлена модель Simulink, которую можно использовать для расчета сбалансированного состояния воздушного аппарата. К входным параметрам системы,определяемым Inports, относятся команды сервоприводу delta_e, delta_a, delta_r и delta_t. Состояния этого блока являются состояниями модели Simulink,которые в нашем случае являются о = (pn, pe, pd, u, v, w, ц, и, ш, p, q, r )Т,1delta_eX2delta_aForces &Momentsmav_dynamicsStates1Vaair data3delta_rDX DATADynamicsUYWindForces & Moments4delta_t[0 0[F M]Selector2alfa3beta0]Рис.
F.1. Диаграмма Simulink, используемая для расчета сбалансированных и линейных состояний пространственных моделейПриложение F289а выходные параметры задаются тремя Outports, такими как воздушная скорость Va, угол атаки б и угол бокового скольжения в. Наша цель задания Va, би в в качестве выходных параметров состоит в том, чтобы заставить командуtrim в Simulink поддерживать Va = V a* и б*. Если есть доступ к рулю направления, тогда можно обеспечить координированный поворот, заставив командуtrim поддерживать в* = 0. Если руль направления недоступен, тогда в не должен быть равен нулю.Поскольку проблема расчета сбалансированных условий упрощается до решения нелинейных алгебраических уравнений, которые могут иметь много решений, то для команды trim Simulink требуются априорные оценки для состояния X0, входного параметра U0, выходного параметра Y0 и производныхсостояния DX0.
Если на начальном этапе уже известно, что некоторые состояния, входные данные, выходные данные или производные состояний зафиксированы и задаются своими начальными условиями, тогда эти ограниченияуказываются индексами векторов IX, IU, IY и IDX.В нашем случае известно, чтоx& * = ([безразличное состояние], [безразличное состояние],*V a sin г*, 0, 0, 0, 0, 0, V a* /R*, 0, 0, 0)Т,поэтому предполагается, чтоDX = [0; 0; Va*sin(gamma); 0; 0; 0; 0; 0;Va/R; 0; 0; 0]IDX = [3; 4; 5; 6; 7; 8; 9; 10; 11; 12].Аналогично начальное состояние, входные и выходные параметры могутбыть заданы какX0 = [0; 0; 0; Va; 0; 0; 0; gamma; 0; 0; 0; 0]IX0 = []U0 = [0; 0; 0; 1]IU0 = []Y0 = [Va; gamma; 0]IY0 = [1,3] .F.2.
Численные расчеты сбалансированного состоянияЕсли моделирование разрабатывается в среде, отличной от Simulink, возможно, потребуется написать отдельную процедуру балансировки. В этом разделе кратко описывается, как можно будет это сделать. Параметры V a* , г* и R*полностью описывают сбалансированный маневр поворота с набором высотыи поэтому будут входить в алгоритм нахождения сбалансированных условий.В последующих расчетах будет показано, что переменные б, в и ц, наряду свходными параметрами V a* , г* и R*, полностью определяют сбалансированныесостояния и входные данные. Таким образом, если можно найти балансировочные значения б*, в* и ц* для заданных V a* , г* и R*, то возможно будет аналитически решить задачу определения балансировочных состояний и входных290Приложение Fданных для балансировки. Прежде всего необходимо показать, что переменные состояния и входные команды могут быть выражены через V a* , г* и R*, б*,в* и ц*.