Это часть 1 серии примеров из пяти частей по проектированию и настройке системы управления полетом для HL-20 транспортного средства. Эта часть касается обрезки и линеаризации корпуса самолета.
Модель HL-20 адаптирована по модели, описанной в NASA HL-20 Lifting Body Airfair (Aerospace Blockset). Это 6-DOF модель аппарата во время завершающей фазы снижения и посадки полета. На этой фазе тяга не используется, и корпус самолета скользит к посадочной полосе.
open_system('csthl20_trim')

Эта версия модели включает в себя уравнения движения (EOM), расчет силы и момента из аэродинамических таблиц, модель окружающей среды и блок «Control Selector», который отображает требования элерона, лифта и руля на отклонения шести управляющих поверхностей.
Тримминг состоит из вычисления отклонений элерона, лифта и руля направления, которые ноль сил и моментов на корпусе самолета, или эквивалентно, удерживают скорости корпуса ub, vb, wb и угловые скорости p, q, r устойчивыми. Поскольку тяга не используется во время снижения, одна степень свободы теряется, и условие отделки должно быть ослаблено, чтобы позволить ub изменяться. Значения обрезки отклонений da, de, dr зависят от ориентации корпуса самолета относительно ветра. Эта ориентация характеризуется альфа-углом атаки (AoA) и бета-углом боковой губы (AoS).

С помощью operspec и findop функции позволяют эффективно вычислять отклонения отделки по сетке значений (альфа, бета), охватывающих рабочий диапазон транспортного средства. Здесь мы обрезаем модель для 8 значений альфа в диапазоне от -10 до 25 градусов, и 5 значений бета в диапазоне от -10 до + 10 градусов. Номинальная высота и скорость установлены в 10000 футов и Mach 0,6.
d2r = pi/180; % degrees to radians m2ft = 3.28084; % meter to feet Altitude = 10000/m2ft; % Nominal altitude Mach = 0.6; % Nominal Mach alpha_vec = -10:5:25; % Alpha Range beta_vec = -10:5:10; % Beta Range [alpha,beta] = ndgrid(alpha_vec,beta_vec); % (Alpha,Beta) grid
Использовать operspec для создания массива спецификаций рабочих точек.
opspec = operspec('csthl20_trim',size(alpha));
opspec(1)
Operating point specification for the Model csthl20_trim. (Time-Varying Components Evaluated at time t=0) States: ---------- (1.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/Calculate DCM & Euler Angles/phi theta psi spec: dx = 0, initial guess: 0 spec: dx = 0, initial guess: -0.199 spec: dx = 0, initial guess: 0 (2.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/p,q,r spec: dx = 0, initial guess: 0 spec: dx = 0, initial guess: 0 spec: dx = 0, initial guess: 0 (3.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/ub,vb,wb spec: dx = 0, initial guess: 203 spec: dx = 0, initial guess: 0 spec: dx = 0, initial guess: 23.3 (4.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/xe,ye,ze spec: dx = 0, initial guess: -1.21e+04 spec: dx = 0, initial guess: 0 spec: dx = 0, initial guess: -3.05e+03 Inputs: ---------- (1.) csthl20_trim/da initial guess: 0 (2.) csthl20_trim/de initial guess: 0 (3.) csthl20_trim/dr initial guess: 0 Outputs: ---------- (1.) csthl20_trim/p;q;r (1-3) spec: none spec: none spec: none (2.) csthl20_trim/phi;theta;psi (4-6) spec: none spec: none spec: none (3.) csthl20_trim/alpha (7) spec: none (4.) csthl20_trim/beta (8) spec: none (5.) csthl20_trim/Mach (9) spec: none (6.) csthl20_trim/Ax,Ay,Az (10-12) spec: none spec: none spec: none
Задайте условия равновесия для каждой ориентации корпуса самолета. Для этого:
Укажите ориентацию, зафиксировав выходы альфа и бета в нужных значениях.
Задайте скорость корпуса самолета, зафиксировав выход М на 0,6.
Отметьте угловые скорости p, q, r как постоянные.
Отметьте скорости vb и wb как постоянные.
for ct=1:40 % Specify alpha angle opspec(ct).Outputs(3).y = alpha(ct); opspec(ct).Outputs(3).Known = true; % Specify beta angle opspec(ct).Outputs(4).y = beta(ct); opspec(ct).Outputs(4).Known = true; % Specify Mach speed opspec(ct).Outputs(5).y = Mach; opspec(ct).Outputs(5).Known = true; % Mark p,q,r as steady opspec(ct).States(2).SteadyState = true(3,1); % Mark vb,wb as steady opspec(ct).States(3).SteadyState = [false;true;true]; % (phi,theta,psi) and (Xe,Ye,Ze) are not steady opspec(ct).States(1).SteadyState = false(3,1); opspec(ct).States(4).SteadyState = false(3,1); end
Чтобы полностью охарактеризовать состояние отделки, также
Установите p = 0, чтобы предотвратить качение.
Установите углы крена/тангажа/рыскания (phi, theta, psi) на (0, alpha, beta), чтобы выровнять рамки ветра и земли.
Укажите положение планера (Xe, Ye, Ze) как (0,0, -Высота).
for ct=1:40 % Set (phi,theta,psi) to (0,alpha,beta) opspec(ct).States(1).x = [0 ; alpha(ct)*d2r ; beta(ct)*d2r]; opspec(ct).States(1).Known = true(3,1); % Set p=0 (no rolling) opspec(ct).States(2).x(1) = 0; opspec(ct).States(2).Known(1) = true; % Set (Xe,Ye,Ze) to (0,0,-Altitude) opspec(ct).States(4).x = [0 ; 0 ; -Altitude]; opspec(ct).States(4).Known = true(3,1); end
Теперь используйте findop для вычисления условий обрезки для всех комбинаций 40 (альфа, бета) в одном шаге. Этот подход пакетного режима включает в себя одну компиляцию модели. FINDOP использует оптимизацию для решения нелинейных уравнений, характеризующих каждое равновесие. Здесь мы используем алгоритм «SQP» для этой задачи.
% Set options for FINDOP solver TrimOptions = findopOptions; TrimOptions.OptimizationOptions.Algorithm = 'sqp'; TrimOptions.DisplayReport = 'off'; % Trim model [ops,rps] = findop('csthl20_trim',opspec,TrimOptions);
Это возвращает массивы 8 на 5 OPS (рабочие условия) и RPS (отчеты об оптимизации). Можно использовать RPS для проверки того, что каждое условие обрезки было успешно вычислено. Результаты для первой (альфа, бета) пары показаны ниже.
[alpha(1) beta(1)]
ans = -10 -10
ops(1)
Operating point for the Model csthl20_trim.
(Time-Varying Components Evaluated at time t=0)
States:
----------
(1.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/Calculate DCM & Euler Angles/phi theta psi
x: 0
x: -0.175
x: -0.175
(2.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/p,q,r
x: 0
x: -0.158
x: 0.008
(3.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/ub,vb,wb
x: 191
x: -34.2
x: -33.7
(4.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/xe,ye,ze
x: 0
x: 0
x: -3.05e+03
Inputs:
----------
(1.) csthl20_trim/da
u: -24
(2.) csthl20_trim/de
u: -6.49
(3.) csthl20_trim/dr
u: 4.09
rps(1).TerminationString
ans =
'Operating point specifications were successfully met.'
Прибыль системы управления полетом, как правило, намечается как функция альфы и беты, видит Часть 2 (Угловой Контроль за Уровнем в автопилоте HL-20) для получения дополнительной информации. Для настройки этих коэффициентов усиления необходимы линеаризованные модели корпуса самолета HL-20 в условиях 40 комплектаций. Использовать linearize для вычисления этих моделей на основе рабочих условий отделки ops.
% Linearize airframe dynamics at each trim condition G = linearize('csthl20_trim','csthl20_trim/HL20 Airframe',ops); size(G)
8x5 array of state-space models. Each model has 34 outputs, 9 inputs, and 12 states.
Линейный эквивалент блока «Control Selector» зависит от величины отклонения лифта и должен рассчитываться для qbar_inv=1 (номинальное динамическое давление при М = 0,6). Для удобства также линеаризуйте этот блок в условиях 40 отделки.
CS = linearize('csthl20_trim','csthl20_trim/Controls Selector',ops); % Zero out a/b and qbar_inv channels CS = [CS(:,1:3) zeros(6,2)];
Линеаризованные модели планера имеют 12 состояний:
xG = G.StateName
xG =
12x1 cell array
{'phi theta psi(1)'}
{'phi theta psi(2)'}
{'phi theta psi(3)'}
{'p,q,r (1)' }
{'p,q,r (2)' }
{'p,q,r (3)' }
{'ub,vb,wb(1)' }
{'ub,vb,wb(2)' }
{'ub,vb,wb(3)' }
{'xe,ye,ze(1)' }
{'xe,ye,ze(2)' }
{'xe,ye,ze(3)' }
Некоторые состояния не находятся под властью автопилота крена/тангажа/рыскания, а другие состояния мало способствуют проектированию этого автопилота. Для целей управления наиболее важными состояниями являются угол крена phi, скорости тела ub, vb, wb и угловые скорости p, q, r. Соответственно, использованиеmodred для получения модели 7-го порядка, которая сохраняет только эти состояния.
G7 = G;
xKeep = {...
'phi theta psi(1)'
'ub,vb,wb(1)'
'ub,vb,wb(2)'
'ub,vb,wb(3)'
'p,q,r(1)'
'p,q,r(2)'
'p,q,r(3)'};
[~,xElim] = setdiff(xG,xKeep);
for ct=1:40
G7(:,:,ct) = modred(G(:,:,ct),xElim,'truncate');
end
С помощью этих линеаризованных моделей можно перейти к задаче настройки и планирования усиления системы управления полетом. Часть 2 этого примера приведена в разделе Управление угловой скоростью в автопилоте HL-20.