Обрезка и линеаризация корпуса HL-20

Это - Часть 1 ряда в качестве примера с пятью частями на проекте и настройке системы управления полетом для автомобиля HL-20. Это расстается соглашения с обрезкой и линеаризацией корпуса.

Модель 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)
 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, тета, 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)
 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 (Угловое Управление Уровнем в Автопилоте (Control System Toolbox) 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

С этими линеаризовавшими моделями в руке можно переместиться в задачу настройки и планирования системных усилений управления полетом. Смотрите Угловое Управление Уровнем в Автопилоте (Control System Toolbox) HL-20 для Части 2 этого примера.

Похожие темы