本ドキュメントではJSBSim 用フライトモデルの XML ファイルについて、Aeromatic で自動生成してから、 とりあえず飛行可能な状態にするまでに必要な情報をT-4を例にして記述します。
JSBSim のフライトモデルは XML のツリー構造により表現されています。以下にツリー構造を示します。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="http://jsbsim.sourceforge.net/JSBSim.xsl"?> <fdm_config> <fileheader> <metrics> <mass_balance> <ground_reactions> <propulsion> <flight_control> <aerodynamics>
JSBSim フライトモデルのトップタグです。このタグ内にすべてのフライトモデル情報が記述されます。
フライトモデルに関する情報を記述します。内包するタグには以下のものがあります。
翼の寸法や面積、空力中心や視点を設定するタグの集合です。metrics タグに内包されるタグにはそれぞれ 単位が指定されています。例えば
<chord unit="FT"> 7.87 </chord>
は平均翼弦長を フィート単位で指定することとなります。フィート以外には "IN" (インチ), "M" (メートル) が 使えます。T-4 の例は FT や IN を使いましたが、後で調整する時に単位変換をするのが面倒でした。 新しく機体を作成する場合は、ac3d などの3Dモデル策説ツールと親和性の高い "M" を使うことをお勧めします。 面積も FT2 ではなくM2 の方が判りやすいでしょう。
では内包するタグを順に説明して行きます。寸法や面積は資料から参照しますが、無ければ ac3d を用いて 測ります。以下に T-4 における metrics タグの例を示します。
<metrics> <wingarea unit="FT2"> 226.05 </wingarea> <wingspan unit="FT"> 32.61 </wingspan> <wing_incidence> 2.00 </wing_incidence> <chord unit="FT"> 7.87 </chord> <htailarea unit="FT2"> 61.40 </htailarea> <htailarm unit="FT"> 15.84 </htailarm> <vtailarea unit="FT2"> 52.50 </vtailarea> <vtailarm unit="FT"> 12.04 </vtailarm> <!-- x:tail=positive; y:right=positive; z:up=positive --> <location name="AERORP" unit="IN"> <!-- 25% MAC @ 中心線より2.1m 外側--> <x> 23.62 </x> <y> 0.00 </y> <z> 12.60 </z> </location> <location name="EYEPOINT" unit="IN"> <!-- パイロットの視点 --> <x> -120.47 </x> <y> 0 </y> <z> 30.70 </z> </location> <location name="VRP" unit="IN"> <!-- Visual Reference Point (注: ここではノーズ先端ですが、これを (0, 0, 0) にすると 3Dモデルの座標と一致するので、ギアや重心位置を 記述するのに便利です ) --> <x> -230.70 </x> <y> 0 </y> <z> -6.3 </z> </location> </metrics>
主翼の面積を指定します。T-4 の場合 226.05平方フィート(21平方メートル)です。翼面積の資料が無い場合は ASC で求めるか、ac3d から [Surface Area] -> [Calculate Surface Area] で翼の表面積を求め、それを 半分にした値を平方フィーとで記述します。(ac3d で求めたのは表面積ですので、翼面積のおよそ倍となります)。 水平尾翼、垂直尾翼の面積も同様です。なお、ASC を利用する場合、Desired Static Margin はとりあえず 10 にしておきます。
主翼の幅(左右の翼端間の距離)を指定します。T-4 の場合は 32.61フィート(9.9メートル)です。
主翼の取り付け角度を指定します。T-4 の場合は 2°です。
水平尾翼、垂直尾翼の翼面積をそれぞれ平方フィートで指定します。水平尾翼は ac3d で Root Chord(翼根弦長) と Tip Chord(翼端弦長)を計測しCGC ツールにより計算した所 61.40 となりました。垂直尾翼面積は ASC では計算できないので、ac3d で求めた表面積の半分の値 52.50 に変更しました。
主翼の空力中心から水平尾翼の空力中心までの距離です。水平尾翼は ASC で簡単に求められます。垂直尾翼の場合、上下対象ではないので中心線がありません。そこで胴体の中心を通る線を中心線と見立てて、ac3d で計測し、ASC の水平尾翼の欄に値を書き込んで求めます。
機体の基準点となる座標を3Dモデルの中心からのオフセットとしてインチで記述します。JSBSim の場合は相対的な位置関係が判ればいいので、ac3d で計測した座標を用います。(注: VRP タグで (x,y,z)=(0,0,0) と指定した場合は、ac3d 上の座標の値をそのまま利用できます。但し、ac3d の (x, y, z) が JSBSIm では (x, z, y) に写像されます。) metrics タグ内では以下の3つ座標を指定します。
その名の通り重量バランスを記述するタグの集合です。以下にT-4 の例をしめし、内包するタグについて説明します。
<mass_balance> <!-- by aeromatic; should be calculated properly --> <ixx unit="SLUG*FT2"> 5888 </ixx> <iyy unit="SLUG*FT2"> 13801 </iyy> <izz unit="SLUG*FT2"> 16770 </izz> <ixy unit="SLUG*FT2"> 0 </ixy> <ixz unit="SLUG*FT2"> -800 </ixz> <iyz unit="SLUG*FT2"> 0 </iyz> <emptywt unit="LBS" > 8356 </emptywt> <location name="CG" unit="IN"> <x> 26.37 </x> <y> 0.00 </y> <z> 12.60 </z> </location> <pointmass name="Pilot"> <weight unit="LBS"> 180 </weight> <location name="POINTMASS" unit="IN"> <x> -108.6 </x> <y> 0 </y> <z> 12 </z> </location> </pointmass> </mass_balance>
機体の慣性モーメントです。重量分布が判らないと正確には計算できないので、とりあえずそのままにしておいて構いません。元々の emtpy-weight が実際の値よりも大きい場合は各値を少し小さめに設定しておくと良いでしょう。:-p
Aeromatic は 最大離陸重量から乾燥重量を推測しますので修正が必要です。集めた仕様に書かれた乾燥重量をポンドで記述します。T-4の場合 8,536 ポンドになります。
機体の基準点をインチで記述します。mass_balance タグ内では重心位置のみを指定します。
パイロットやバラストウェイト、装備などの重量を指定します。T-4 のパイロット重量は以下のように指定しました。
<pointmass name="Pilot"> <weight unit="LBS"> 180 </weight> <location name="POINTMASS" unit="IN"> <x> -108.6 </x> <y> 0 </y> <z> 12 </z> </location> </pointmass>
ランディングギアについて記述するタグの集合です。沢山のタグを含んでいますが、今回変更すべき箇所は <contact type="BOGEY"> タグ内のギアの位置情報のみです。"NOSE," "LEFT_MAIN," "RIGHT_MAIN" にそれぞれのタイヤの接地座標を記述します。
<contact type="STRUCTURE"> の項目はコメントアウトしておいて問題ありません。
エンジンに関する記述を行います。T-4 ではエンジンが2基あるので、このタグ内で2つの engine タグを記述します。
file 属性 に Aeromatic で作成したエンジン名(JSBSim はこれに .xml を付けてエンジンファイルにアクセスします。)を指定します。T-4 の場合は F3-IHI-30.xml ですので F3-IHI-30 を指定します。内包するタグは location, orient, thruster, feed です。T-4 の例を以下に示します。
<engine file="F3-IHI-30"> <location unit="IN"> <x> 98.42 </x> <y> -27.16 </y> <z> -9.05 </z> </location> <orient unit="DEG"> <pitch> 0.00 </pitch> <roll> 0.00 </roll> <yaw> 0.00 </yaw> </orient> <feed>0</feed> <thruster file="direct"> <location unit="IN"> <x> 153.15 </x> <y> -18.11 </y> <z> -9.84 </z> </location> <orient unit="DEG"> <pitch> 0.00 </pitch> <roll> 0.00 </roll> <yaw> 0.00 </yaw> </orient> </thruster> </engine>
エンジンの重心位置を記述します。レシプロエンジンの場合はプロペラから少し後方になります。ジェットエンジンの場合はノズルの位置とエンジンの大きさとから推定することとなります。推定が難しい場合は吸気口とノズルの中心から1-2m 前方を指定しましょう。
推力線の傾きをpitch, roll, yaw の角度でそれぞれ指定します。ジェットエンジンの場合、X軸の後方が推力線の向きになりますから、そこからの角度となります。仕様がなければ 全て 0.00 で構いません。
推力発生装置(プロペラやジェットエンジンのノズル)に関する設定を行います。 ジェットエンジンの場合は file 属性に "direct" と書き、Engines フォルダに direct.xml というファイルを作成します。
<?xml version="1.0"?> <!-- Thrust is computed directly by the engine --> <direct name="Direct"> </direct>
エンジンに燃料を送り込む燃料タンクの番号を指定します。<feed>0</feed>とすれば tank 0 から燃料が注入されることになります。このタグを複数記述する事も可能です。
燃料タンクの3Dモデル上の座標とタンク番号、容量を指定します。T-4の場合、以下のようになります。
<tank type="FUEL" number="0"> <location unit="IN"> <x> -27.55 </x> <y> 10.00 </y> <z> -11.81 </z> </location> <capacity unit="LBS"> 2000.00 </capacity> <contents unit="LBS"> 1820.00 </contents> </tank>
capacity や contents は最大容量を示しています。FlightGear 起動時の搭載燃料容量は T-4-set.xml で指定します。
揚力、抗力などの空力データの集合です。ここを記述するには Xfoil や Digital Datcom+ などの解析ツールが必須です。また翼断面の形状や表面の粗さ等、多くの技術情報が必要となります。とりあえずはそのままにしておき、情報が集まり次第更新していくと良いでしょう。