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