В этом примере показано, как обрезать и линеаризовать корпус с помощью Simulink® Control Design™
Разработка автопилота с помощью классических методов проектирования требует линейных моделей динамики тангажа корпуса для многих обрезанных условий рейса. MATLAB® может определить условия для обрезки и вывести линейные модели в пространстве состояний непосредственно из нелинейного Simulink® и модели Aerospace Blockset™. Это экономит время и помогает подтвердить модель. Функции, обеспеченные Simulink Control Design, позволяют вам визуализировать поведение корпуса в терминах частоты разомкнутого контура (или время) ответы.
Первая проблема состоит в том, чтобы найти отклонение лифта и получившийся обрезанный уровень тела (q), который сгенерирует данное значение падения, когда ракета переместится на скорости набора. Если условие для обрезки найдено, линейная модель может быть выведена для динамики возмущений в состояниях вокруг условия для обрезки.
open_system('aero_guidance_airframe');

h_ini = 10000/m2ft; % Trim Height [m] M_ini = 3; % Trim Mach Number alpha_ini = -10*d2r; % Trim Incidence [rad] theta_ini = 0*d2r; % Trim Flightpath Angle [rad] v_ini = M_ini*(340+(295-340)*h_ini/11000); % Total Velocity [m/s] q_ini = 0; % Initial pitch Body Rate [rad/sec]
Первыми техническими требованиями состояния являются состояния Положения, второй спецификацией состояния является Theta. Оба известны, но не в устойчивом состоянии. Третьими техническими требованиями состояния является связанная ось, угловыми уровнями которой переменная w в устойчивом состоянии.
opspec = operspec('aero_guidance_airframe');
opspec.States(1).Known = [1;1];
opspec.States(1).SteadyState = [0;0];
opspec.States(2).Known = 1;
opspec.States(2).SteadyState = 0;
opspec.States(3).Known = [1 1];
opspec.States(3).SteadyState = [0 1];
op = findop('aero_guidance_airframe',opspec); io(1) = linio('aero_guidance_airframe/Fin Deflection',1,'input'); io(2) = linio('aero_guidance_airframe/Selector',1,'output'); io(3) = linio(sprintf(['aero_guidance_airframe/Aerodynamics &\n', ... 'Equations of Motion']),3,'output'); sys = linearize('aero_guidance_airframe',op,io);
Operating point search report:
---------------------------------
opreport =
Operating point search report for the Model aero_guidance_airframe.
(Time-Varying Components Evaluated at time t=0)
Operating point specifications were successfully met.
States:
----------
<strong>Min</strong> <strong>x</strong> <strong>Max</strong> <strong>dxMin</strong> <strong>dx</strong> <strong>dxMax</strong>
<strong>_______</strong> <strong>________</strong> <strong>_______</strong> <strong>_____</strong> <strong>__________</strong> <strong>_____</strong>
(1.) aero_guidance_airframe/Aerodynamics & Equations of Motion/ Equations of Motion (Body Axes)/Position
0 0 0 -Inf 967.66 Inf
-3048 -3048 -3048 -Inf -170.63 Inf
(2.) aero_guidance_airframe/Aerodynamics & Equations of Motion/ Equations of Motion (Body Axes)/Theta
0 0 0 -Inf -0.21604 Inf
(3.) aero_guidance_airframe/Aerodynamics & Equations of Motion/ Equations of Motion (Body Axes)/U,w
967.66 967.66 967.66 -Inf -14.098 Inf
-170.63 -170.63 -170.63 0 -7.439e-08 0
(4.) aero_guidance_airframe/Aerodynamics & Equations of Motion/ Equations of Motion (Body Axes)/q
-Inf -0.21604 Inf 0 3.3582e-08 0
Inputs:
----------
<strong>Min</strong> <strong>u</strong> <strong>Max</strong>
<strong>____</strong> <strong>_______</strong> <strong>___</strong>
(1.) aero_guidance_airframe/Fin Deflection
-Inf 0.13615 Inf
Outputs:
----------
<strong>Min</strong> <strong>y</strong> <strong>Max</strong>
<strong>____</strong> <strong>________</strong> <strong>___</strong>
(1.) aero_guidance_airframe/q
-Inf -0.21604 Inf
(2.) aero_guidance_airframe/az
-Inf 199.25 Inf
airframe = ss(sys.A(3:4,3:4),sys.B(3:4,:),sys.C(:,3:4),sys.D); set(airframe,'inputname',{'Elevator'}, ... 'outputname',[{'az'} {'q'}]); ltiview('bode',airframe); bdclose('aero_guidance_airframe');

