Это - Часть 1 ряда в качестве примера с пятью частями на проекте и настройке системы управления полетом для транспортного средства HL-20. Это расстается соглашения с обрезкой и линеаризацией корпуса.
Модель HL 20 адаптируется из модели, описанной в Корпусе Несущего тела (Aerospace Blockset) NASA HL-20. Это - модель 6-DOF транспортного средства во время итогового спуска и приземляющейся фазы рейса. Никакая тяга не используется во время этой фазы, и корпус скользит к взлетно-посадочной полосе.
open_system('csthl20_trim')
Эта версия модели включает уравнения движения (EOM), силу и вычисление момента из аэродинамических таблиц, модели среды и блока "Controls Selector", который сопоставляет элерон, лифт, и руководящий принцип требует на отклонения шести поверхностей управления.
Обрезка состоит из вычисления элерона, лифт и отклонения руководящего принципа, которые обнуляют силы и моменты на корпусе, или эквивалентно, сохраняют скорости тела ub, vb, wb и угловые уровни p, q, r устойчивыми. Поскольку втиснутый не используется во время спуска, одна степень свободы потеряна, и условие для обрезки должно быть ослаблено, чтобы позволить ub, чтобы варьироваться. Значения для обрезки отклонений da, de, доктор зависит от ориентации корпуса относительно ветра. Эта ориентация характеризуется альфой угла нападения (AoA) и углом заноса (AoS) бета.
С operspec
и findop
функции, можно эффективно вычислить отклонения для обрезки по сетке (альфа, бета) значения, покрывающие рабочий диапазон транспортного средства. Здесь мы обрезаем модель для 8 значений альфы в пределах от-10 до 25 градусов и 5 значений беты в пределах от-10 до +10 градусов. Номинальная высота и скорость установлены в 10 000 футов и Мах 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)
ans = Operating point specification for the Model csthl20_trim. (Time-Varying Components Evaluated at time t=0) States: ---------- <strong>x</strong> <strong>Known</strong> <strong>SteadyState</strong> <strong>Min</strong> <strong>Max</strong> <strong>dxMin</strong> <strong>dxMax</strong> <strong>________</strong> <strong>_____</strong> <strong>___________</strong> <strong>____</strong> <strong>___</strong> <strong>_____</strong> <strong>_____</strong> (1.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/Calculate DCM & Euler Angles/phi theta psi 0 false true -Inf Inf -Inf Inf -0.19945 false true -Inf Inf -Inf Inf 0 false true -Inf Inf -Inf Inf (2.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/p,q,r 0 false true -Inf Inf -Inf Inf 0 false true -Inf Inf -Inf Inf 0 false true -Inf Inf -Inf Inf (3.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/ub,vb,wb 202.67 false true -Inf Inf -Inf Inf 0 false true -Inf Inf -Inf Inf 23.257 false true -Inf Inf -Inf Inf (4.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/xe,ye,ze -12072 false true -Inf Inf -Inf Inf 0 false true -Inf Inf -Inf Inf -3048 false true -Inf Inf -Inf Inf Inputs: ---------- <strong>u</strong> <strong>Known</strong> <strong>Min</strong> <strong>Max</strong> <strong>_</strong> <strong>_____</strong> <strong>____</strong> <strong>___</strong> (1.) csthl20_trim/da 0 false -Inf Inf (2.) csthl20_trim/de 0 false -Inf Inf (3.) csthl20_trim/dr 0 false -Inf Inf Outputs: ---------- <strong>y</strong> <strong>Known</strong> <strong>Min</strong> <strong>Max</strong> <strong>_</strong> <strong>_____</strong> <strong>____</strong> <strong>___</strong> (1.) csthl20_trim/p;q;r (1-3) 0 false -Inf Inf 0 false -Inf Inf 0 false -Inf Inf (2.) csthl20_trim/phi;theta;psi (4-6) 0 false -Inf Inf 0 false -Inf Inf 0 false -Inf Inf (3.) csthl20_trim/alpha (7) 0 false -Inf Inf (4.) csthl20_trim/beta (8) 0 false -Inf Inf (5.) csthl20_trim/Mach (9) 0 false -Inf Inf (6.) csthl20_trim/Ax,Ay,Az (10-12) 0 false -Inf Inf 0 false -Inf Inf 0 false -Inf Inf
Задайте условия равновесия для каждой ориентации корпуса. Для этого:
Задайте ориентацию путем фиксации выходной альфы и беты к их требуемым значениям.
Задайте скорость корпуса путем фиксации выхода Маха к 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, альфа, бета) выравнивать наземные системы координат и ветер.
Задайте положение корпуса (Ксенон, Вы, Зе) как (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)
ans = Operating point for the Model csthl20_trim. (Time-Varying Components Evaluated at time t=0) States: ---------- <strong>x</strong> <strong>________</strong> (1.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/Calculate DCM & Euler Angles/phi theta psi 0 -0.17453 -0.17453 (2.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/p,q,r 0 -0.15825 0.008004 (3.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/ub,vb,wb 191.09 -34.214 -33.695 (4.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/xe,ye,ze 0 0 -3048 Inputs: ---------- <strong>u</strong> <strong>_______</strong> (1.) csthl20_trim/da -23.984 (2.) csthl20_trim/de -6.4896 (3.) csthl20_trim/dr 4.0858
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.
Линейный эквивалент блока "Controls Selector" зависит от суммы отклонения лифта и должен быть вычислен для qbar_inv=1 (номинальное динамическое давление в Mach=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
С этими линеаризовавшими моделями в руке можно переместиться в задачу настройки и планирования системных усилений управления полетом. Смотрите Угловое Управление Уровнем в автопилоте HL-20 для Части 2 этого примера.