Этот пример показывает, как обрезать и линеаризовать корпус в среде Simulink® с помощью программного обеспечения Control System Toolbox™
Разработка автопилота с классическими методами проектирования требует линейных моделей динамики подачи корпуса для нескольких обрезанных условий рейса. MATLAB® техническая вычислительная среда может определить условия для обрезки и вывести линейные модели в пространстве состояний непосредственно из нелинейной модели Simulink и Aerospace Blockset™. Этот шаг экономит время и помогает подтвердить модель. Функции Control System Toolbox позволяют вам визуализировать движение корпуса с точки зрения частоты разомкнутого цикла или ответов времени.
Первая проблема состоит в том, чтобы найти отклонение лифта и получившийся обрезанный уровень тела (q), который сгенерирует данное значение падения, когда ракета переместится на скорости набора. Если условие для обрезки найдено, линейная модель может быть выведена для динамики возмущений в состояниях вокруг условия для обрезки.
open_system('aeroblk_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]
[sizes,x0,names]=aeroblk_guidance_airframe([],[],[],'sizes'); state_names = cell(1,numel(names)); for i = 1:numel(names) n = max(strfind(names{i},'/')); state_names{i}=names{i}(n+1:end); end
fixed_states = [{'U,w'} {'Theta'} {'Position'}];
fixed_derivatives = [{'U,w'} {'q'}]; % w and q
fixed_outputs = []; % Velocity
fixed_inputs = [];
n_states=[];n_deriv=[];
for i = 1:length(fixed_states)
n_states=[n_states find(strcmp(fixed_states{i},state_names))]; %#ok<AGROW>
end
for i = 1:length(fixed_derivatives)
n_deriv=[n_deriv find(strcmp(fixed_derivatives{i},state_names))]; %#ok<AGROW>
end
n_deriv=n_deriv(2:end); % Ignore U
[X_trim,U_trim,Y_trim,DX]=trim('aeroblk_guidance_airframe',x0,0,[0 0 v_ini]', ... n_states,fixed_inputs,fixed_outputs, ... [],n_deriv) %#ok<NOPTS>
X_trim =
1.0e+03 *
-0.0002
0
0.9677
-0.1706
0
-3.0480
U_trim =
0.1362
Y_trim =
-0.2160
0
DX =
0
-0.2160
-14.0977
0
967.6649
-170.6254
[A,B,C,D]=linmod('aeroblk_guidance_airframe',X_trim,U_trim); if exist('control','dir') airframe = ss(A(n_deriv,n_deriv),B(n_deriv,:),C([2 1],n_deriv),D([2 1],:)); set(airframe,'StateName',state_names(n_deriv), ... 'InputName',{'Elevator'}, ... 'OutputName',[{'az'} {'q'}]); zpk(airframe) ltiview('bode',airframe) end
ans =
From input "Elevator" to output...
-170.45 s (s+1133)
az: ----------------------
(s^2 + 30.04s + 288.9)
-194.66 (s+1.475)
q: ----------------------
(s^2 + 30.04s + 288.9)
Continuous-time zero/pole/gain model.
