このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
線形制御と静的安定性解析のための状態空間モデルの解析
この例では、固定翼機を線形解析用の線形時間不変 (LTI) 状態空間モデルに変換する方法を示します。
この例では次のことを説明します。
DATCOM ファイルからデータをインポートして入力します。
DATCOM データから固定翼機を構築する。
固定翼機の静的安定性を計算します。
固定翼機を初期状態を中心に線形化します。
動的応答による静的安定性解析を検証します。
エレベーターからピッチへの伝達関数を分離し、エレベーターのフィードバック コントローラーを設計します。
固定翼航空機と状態の定義
この例では、Sky Hogg航空機用に作成された DATCOM ファイルを使用します。
まず、datcomimport を使用して DATCOM 出力ファイルをインポートします。
allData = datcomimport('astSkyHoggDatcom.out', false, 0);
skyHoggData = allData{1}
skyHoggData = struct with fields:
case: 'SKYHOGG BODY-WING-HORIZONTAL TAIL-VERTICAL TAIL CONFIG'
mach: [0.1000 0.2000 0.3000 0.3500]
alt: [1000 3000 5000 7000 9000 11000 13000 15000]
alpha: [-16 -12 -8 -4 -2 0 2 4 8 12]
nmach: 4
nalt: 8
nalpha: 10
rnnub: []
hypers: 0
loop: 2
sref: 225.8000
cbar: 5.7500
blref: 41.1500
dim: 'ft'
deriv: 'deg'
stmach: 0.6000
tsmach: 1.4000
save: 0
stype: []
trim: 0
damp: 1
build: 1
part: 0
highsym: 1
highasy: 0
highcon: 0
tjet: 0
hypeff: 0
lb: 0
pwr: 0
grnd: 0
wsspn: 18.7000
hsspn: 5.7000
ndelta: 5
delta: [-20 -10 0 10 20]
deltal: []
deltar: []
ngh: 0
grndht: []
config: [1×1 struct]
version: 1976
cd: [10×4×8 double]
cl: [10×4×8 double]
cm: [10×4×8 double]
cn: [10×4×8 double]
ca: [10×4×8 double]
xcp: [10×4×8 double]
cma: [10×4×8 double]
cyb: [10×4×8 double]
cnb: [10×4×8 double]
clb: [10×4×8 double]
cla: [10×4×8 double]
qqinf: [10×4×8 double]
eps: [10×4×8 double]
depsdalp: [10×4×8 double]
clq: [10×4×8 double]
cmq: [10×4×8 double]
clad: [10×4×8 double]
cmad: [10×4×8 double]
clp: [10×4×8 double]
cyp: [10×4×8 double]
cnp: [10×4×8 double]
cnr: [10×4×8 double]
clr: [10×4×8 double]
dcl_sym: [5×4×8 double]
dcm_sym: [5×4×8 double]
dclmax_sym: [5×4×8 double]
dcdmin_sym: [5×4×8 double]
clad_sym: [5×4×8 double]
cha_sym: [5×4×8 double]
chd_sym: [5×4×8 double]
dcdi_sym: [10×5×4×8 double]
次に、DATCOM ルックアップ テーブルを準備します。
DATCOM ルックアップ テーブルでは、列全体に対して 1 つの値のみがテーブルに入力されるため、値が欠落している可能性があります。
この欠落データは、ルックアップ テーブルでは値 99999 として表され、fillmissing の「前の」方法を使用して埋めることができます。
この例では、、、、 にデータが欠落しています。
skyHoggData.cyb = fillmissing(skyHoggData.cyb, "previous", "MissingLocations", skyHoggData.cyb == 99999); skyHoggData.cnb = fillmissing(skyHoggData.cnb, "previous", "MissingLocations", skyHoggData.cnb == 99999); skyHoggData.clq = fillmissing(skyHoggData.clq, "previous", "MissingLocations", skyHoggData.clq == 99999); skyHoggData.cmq = fillmissing(skyHoggData.cmq, "previous", "MissingLocations", skyHoggData.cmq == 99999);
欠落しているデータが埋められると、固定翼機を構築できます。
まず、希望する航空機名をつけた固定翼機を準備します。
オプションとして、空の固定翼オブジェクトを渡すことによって、DATCOM 構造体の「case」フィールドから航空機名を抽出できます。
skyHogg = Aero.FixedWing(); skyHogg.Properties.Name = "Sky_Hogg"; skyHogg.DegreesOfFreedom = "3DOF"; [skyHogg, cruiseState] = datcomToFixedWing(skyHogg, skyHoggData);
datcomToFixedWing は、datcom 構造体からのすべての互換性のあるデータを固定翼オブジェクトとその状態に変換します。ただし、返された状態は、航空機の望ましい初期条件を取得するためにまだ処理が必要です。
この例では、環境、質量、慣性、対気速度、圧力中心を調整する必要があります。
h = 2000;
cruiseState.AltitudeMSL = h;
cruiseState.Environment = aircraftEnvironment(skyHogg,"ISA",h);
cruiseState.U = 169.42;
cruiseState.Mass = 1299.214;
cruiseState.Inertia.Variables = [5787.969 0 117.64;0 6928.93 0;-117.64 0 11578.329];
cruiseState.CenterOfPressure = [0.183, 0, 0];
静的安定性の計算
静的安定性解析を実行すると、動的なシステム応答を計算せずにシステムの動的安定性を判断するのに役立ちます。
stability = staticStability(skyHogg, cruiseState)
stability=6×8 table
U V W Alpha Beta P Q R
________ _________ ________ ________ _________ _________ ________ _________
FX "Stable" "" "" "" "" "" "" ""
FY "" "Neutral" "" "" "" "" "" ""
FZ "" "" "Stable" "" "" "" "" ""
L "" "" "" "" "Neutral" "Neutral" "" ""
M "Stable" "" "" "Stable" "" "" "Stable" ""
N "" "" "" "" "Neutral" "" "" "Neutral"
力とモーメントが静的に安定しており、前進速度と垂直速度が変動し、迎角も変動する場合、システムの動的安定性は、前進速度と垂直速度が変動しているときに振動する定常状態に向かう傾向があります。
この動作を確認するには、Control System Toolbox ™ を使用します。
固定翼機の線形化
Control System Toolbox 内のツールを使用するには、航空機を状態を中心に線形化します。
これは、以前と同じ巡航状態で線形化メソッドを使用することによって行われます。
linSys = linearize(skyHogg, cruiseState)
linSys = A = XN XD U W Q Theta XN 0 0 1 0 0 -2.586e-07 XD 0 0 0 1 0 -2.957 U 0 1.319e-06 -0.001714 -0.000759 0 -0.5617 W 0 0 -0.002705 -0.3319 2.95 -4.903e-08 Q 0 0 0.03443 -1.19 -0.4252 8.882e-11 Theta 0 0 0 0 1 0 B = Delta XN 0 XD 0 U -0.0004314 W -0.02084 Q -2.239 Theta 0 C = XN XD U W Q Theta XN 1 0 0 0 0 0 XD 0 1 0 0 0 0 U 0 0 1 0 0 0 W 0 0 0 1 0 0 Q 0 0 0 0 1 0 Theta 0 0 0 0 0 1 D = Delta XN 0 XD 0 U 0 W 0 Q 0 Theta 0 Continuous-time state-space model. Model Properties
動的応答による静的安定性の検証
線形状態空間モデルを構築すると、システムの動的な動作をプロットできます。
システムの動的動作で静的安定性の結果を検証するには、状態空間モデルを初期条件に対してプロットします。
システムに摂動を誘発するために、エレベーターの信号に 1 秒間に 5 度のステップが追加されます。
x0 = getState(cruiseState, linSys.OutputName); t = linspace(0, 50, 500); u = zeros(size(t)); u(t > 1 & t < 2) = 5; lsim(linSys,u,t,x0)
静的安定性解析から予想されるように、昇降舵の小さな摂動に反応する際、対気速度とピッチレートは安定しています。
エレベーターピッチ応答の分離
静的安定性の検証に加えて、操舵面を意図した動的応答に分離すると、個々の面に固有のコントローラーを設計するのに役立ちます。
この場合、操舵面はエレベーターの 1 つだけです。
エレベーターは航空機のピッチ応答を制御します。ピッチ応答を表示するには、エレベーターの入力をピッチ角からエレベーターへの伝達関数に分離します。
linSysElevatorTF = tf(linSys(6,1))
linSysElevatorTF = From input "Delta" to output "Theta": -2.239 s^3 - 0.7221 s^2 - 0.001232 s - 8.935e-09 ------------------------------------------------------------------- s^5 + 0.7587 s^4 + 3.652 s^3 + 0.02567 s^2 + 0.008226 s + 5.711e-08 Continuous-time transfer function. Model Properties
step(linSysElevatorTF)
ステップ プロットからわかるように、エレベーターの入力に対するピッチ応答には、望ましくない振動特性と大きな定常エラーがあります。
エレベーターの入力に PID フィードバック コントローラーを追加することで、より望ましいピッチ応答を実現できます。
C = pidtune(linSysElevatorTF, "PID")
C = 1 Ki * --- s with Ki = -0.00153 Continuous-time I-only controller. Model Properties
elevatorFeedback = feedback(linSysElevatorTF * C, 1)
elevatorFeedback = From input to output "Theta": 0.003417 s^3 + 0.001102 s^2 + 1.881e-06 s + 1.364e-11 ----------------------------------------------------------------------------------- s^6 + 0.7587 s^5 + 3.652 s^4 + 0.02909 s^3 + 0.009328 s^2 + 1.938e-06 s + 1.364e-11 Continuous-time transfer function. Model Properties
step(elevatorFeedback)