주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

Simulink Control Design를 사용한 기체 트리밍 및 선형화

이 예제에서는 Simulink® Control Design™ 소프트웨어를 사용하여 기체를 트리밍하고 선형화하는 방법을 보여줍니다.

전통적인 설계 기법을 사용하여 오토파일럿을 설계하려면, 몇 가지 트리밍된 비행 조건에 대한 기체 피치 동역학의 선형 모델이 필요합니다. MATLAB® 기술 계산 환경은 트림 조건을 결정하고, 비선형 Simulink® 및 Aerospace Blockset™ 모델로부터 직접 선형 상태공간 모델을 도출할 수 있습니다. 이 단계는 시간을 절약해 줄 뿐만 아니라 모델의 타당성을 검증하는 데 도움이 됩니다. Simulink Control Design 함수를 사용하면 개방 루프 주파수 응답 또는 시간 응답을 통해 기체의 움직임을 시각화할 수 있습니다.

유도 모델 초기화

첫 번째 과제는 승강타(elevator)의 편향을 구하고, 이에 따라 미사일이 설정된 속도로 비행할 때 주어진 붙임각을 생성하게 될 트리밍된 바디 속도(q)를 구하는 것입니다. 트림 조건이 확인되면, 트림 조건 주변 상태에서의 섭동 동역학에 대한 선형 모델을 도출할 수 있습니다.

open_system('aeroblk_guidance_airframe');

상태 값 정의

트리밍에 사용할 상태 값을 정의하십시오:

  • 높이 [m]

  • 마하 수

  • 붙임각 [rad]

  • 비행 경로 각도 [rad]

  • 총 속도 [m/s]

  • 초기 피치 바디 속도 [rad/sec]

heightIC    = 10000/m2ft;
machIC      = 3;
alphaIC     = -10*d2r;
thetaIC     = 0*d2r;
velocityIC  = machIC*(340+(295-340)*heightIC/11000);
pitchRateIC = 0;

동작점 및 상태 사양 설정

첫 번째 상태 사양은 위치 상태입니다. 두 번째 상태 사양은 Theta입니다. 두 가지 모두 알려져 있지만, 정상 상태에서는 그렇지 않습니다. 세 번째 상태 사양은 바디 축 각속도이며, 이 중에서 변수 w는 정상 상태에 있습니다.

opspec = operspec('aeroblk_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];

동작점을 검색하고, I/O를 설정한 다음 선형화하기

상태 사양을 충족하는 동작점을 찾은 다음, 지정된 입력 및 출력을 사용하여 선형 모델을 도출하십시오.

op = findop('aeroblk_guidance_airframe',opspec);

io(1) = linio('aeroblk_guidance_airframe/Fin Deflection',1,'input');
io(2) = linio('aeroblk_guidance_airframe/Selector',1,'output');
io(3) = linio(sprintf(['aeroblk_guidance_airframe/Aerodynamics &\n', ...
                       'Equations of Motion']),3,'output');

sys = linearize('aeroblk_guidance_airframe',op,io);
 Operating point search report:
---------------------------------

opreport = 


 Operating point search report for the Model aeroblk_guidance_airframe.
 (Time-Varying Components Evaluated at time t=0)

Operating point search completed successfully using optimization.
States: 
----------
   Min         x         Max       dxMin        dx       dxMax   
__________ __________ __________ __________ __________ __________
                                                                 
(1.) aeroblk_guidance_airframe/Aerodynamics & Equations of Motion/3DOF (Body Axes)/Position
    0          0          0         -Inf     967.6649     Inf    
-3047.9999 -3047.9999 -3047.9999    -Inf    -170.6254     Inf    
(2.) aeroblk_guidance_airframe/Aerodynamics & Equations of Motion/3DOF (Body Axes)/Theta
    0          0          0         -Inf     -0.21604     Inf    
(3.) aeroblk_guidance_airframe/Aerodynamics & Equations of Motion/3DOF (Body Axes)/U,w
 967.6649   967.6649   967.6649     -Inf     -14.0977     Inf    
-170.6254  -170.6254  -170.6254      0      -7.439e-08     0     
(4.) aeroblk_guidance_airframe/Aerodynamics & Equations of Motion/3DOF (Body Axes)/q
   -Inf     -0.21604     Inf         0      3.3582e-08     0     

Inputs: 
----------
  Min      u      Max  
_______ _______ _______
                       
(1.) aeroblk_guidance_airframe/Fin Deflection
 -Inf   0.13615   Inf  

Outputs: 
----------
   Min         y         Max    
__________ __________ __________
                                
(1.) aeroblk_guidance_airframe/q
   -Inf     -0.21604     Inf    
(2.) aeroblk_guidance_airframe/az
   -Inf    -7.439e-08    Inf    

트리밍된 상태 선택, LTI 객체 생성 및 보드 응답 플로팅

상태 벡터에서 원하는 상태의 인덱스를 찾으십시오. 그런 다음 LTI 객체를 생성하고 주파수 응답을 보드 다이어그램으로 확인하십시오.

names = sys.StateName;
q_idx = find(strcmp('q',names));
az_idx = find(strcmp('U,w(2)',names));

airframe = ss(sys.A([az_idx q_idx],[az_idx q_idx]),sys.B([az_idx q_idx],:),sys.C(:,[az_idx q_idx]),sys.D);

set(airframe,'inputname',{'Elevator'}, ...
             'outputname',[{'az'} {'q'}]);

linearSystemAnalyzer('bode',airframe);

Copyright 1990-2023 The MathWorks, Inc.

참고 항목

블록

함수