virt_flyのブログ -21ページ目

virt_flyのブログ

フライトシミュレーターソフトのFlightGearで仮想飛行を楽しむブログです。

↑近代化改修(?)したJu EF 128 customから発射されるロケット弾

レーダー以外はほぼ問題なく動く

 

内蔵Wi-Fiが逝かれたGtuneのノートパソコンのその後ですが、ネット環境も芳しくないために中継機を子機代わりに接続したものの微妙な通信状況です。

 

キーの接触不良があって随分使い勝手も悪くなっているのに使うのは、なにせ他のパソコンはパソコン教室のテキスト作成用のスクリーンショットを撮りたいのであまり日常使いはしたくないという都合があるから。また、ブログに使うためにスクリーンショットのサイズを抑えるのにちょうどよい(←サイズを抑えるくらいなら他のパソコンでも間に合うのですが)ということもあってです。

 

10年使い倒してきたこのパソコン並、否それよりまだ昔に自作したFlightGear用のAircraftであるJunkers Ju EF 128が今回の話題です。

 

↑ドイツ空軍の幻の無尾翼ジェット戦闘機Ju EF 128 翼下にルールシュタールX-4ミサイルを吊るしてみた

 

実際のJu EF 128は、先の大戦末期にドイツ空軍が行ったコンペのために開発された無尾翼のジェット戦闘機です。コンペの結果正式採用されたのはFock-Wulf Ta 183でしたが、Ju EF 128の生産開始も決定され、契約も締結されたものの、工場が連合軍に制圧されて完成をみることはありませんでした。


自作のJu EF 128ーロケット弾発射はOK

 

今回、自作のJu EF 128を久しぶりに飛ばしてみる気になったのは、FlightGearのバージョンアップによりかつてできていたのに今ではできないことが増えている現実に、Ju EF 128にも不具合が生じるようになっていないかを確かめてみたくなったからです。

 

もう一歩踏み込んで言えば、AIシナリオでAI機が飛ばせなくなった最近のFlightGearで、Bombable add-onが機能して空戦でAI機の撃墜を描けるのかが気になり、Bombable対応の機体にしてあるJu EF 128を使って試してみたいと思ったからです。

 

↑レーダーは、一見動いてそうですが、今では実際を反映しなくなってしまいました

 

結果は、自作のJu EF 128(及びJu EF 128 custom)は、今でも無事ロケット弾を発射することができました。ただし、Ju EF 128 customのレーダーは機能しなくなっていることを、以前確認していたにもかかわらず忘れていました。

 

他に不具合は、開発版のFlightGear2020.4.0では問題はありませんでしたが、安定版の2020.3.19では、Ju EF 128の車輪が黄色と黒のトラ縞になって見えることくらいです。

 

レーダーが使えないとなると、空中給油機を探して接近する自信がまったくもってありません。FlightGearのTanker Controls機能を試してみようと思っていたのですが…。

↑編隊を崩す僚機を再現するWingman Control

 

AI機を飛ばす手順

 

フライトシミュレーターソフトのFlightGearも変化してきており、新しく追加された機能を含めどのように変わったのか、知る必要があると書いた手前、手始めにWingman Controlsの使い方を調べてみることにしました。

 

編隊の僚機であるwingman機もAI機の一種。ことの関わりでいけば、AIシナリオを使ってAI機を実際にとばす手順についてふれておくべきでしょう。

 

この間、AI機は蛇足のつもりでここまでAI機用の3Dモデル設定xmlだ、AIシナリオだと言うことになるとは思わず、本来ふれるべきことにふれていませんでした。知っている方には今更ですが、よくご存知ない方には不親切極まりないことと反省しています。

 

↑AI機で空戦まがいーメッサーシュミットから逃れるYak-3ーこうした遊び方はどうしたら続けられる?

 

前提①ーAI機

 

AI機とは、基本は自分が操縦する飛行機(乗機)とは違って、プログラミングに基づきコンピューターのコントロールで離発着、飛行するFlightGearの世界の航空機です。

 

AI機には、専用の3Dモデル設定xmlファイルと多くの場合は専用の機体の3Dモデル(acファイル)が必要になります。

 

なぜなら、FlightGearで通常飛行を楽しんでいる機体のファイルをそのまま使っていたのでは、自分で操縦しないAI機のプロペラの様々な回転状態やジェット噴流の様子、あるいはランディングギアの状態の再現がうまくできないからです。

 

FlightGearでは、プログラム本体のAIフォルダー内のAircraftフォルダーにあらかじめ用意されたAI機も多数あります。ここになければ、AI機化したい当該機体の3Dモデル(acファイル)や3Dモデル設定xmlファイルから専用のac及び3Dモデル設定ファイルを作成することになります。ちなみに、当該機体のこの2つのファイルは、当該機体のModelsフォルダー内にあります。

 

3Dモデル(acファイル)の修正は、主にプロペラやジェットガスの再現に使われる3Dオブジェクトを機体の3Dモデルに一体化させること、場合によっては簡略化のためにランディングギアを撤去してたり、武装や外部燃料タンクを装着してしまうことでしょうか。作業は、Blenderなどの3Dモデリングソフトを使いますが、今回の主題ではないので詳しいことは省きます。

 

3Dモデル設定xmlファイルの修正は、様々なプロペラの回転状態やジェット噴流の様子を乗機の影響を受けることなく再現できるように真対気速度で条件分岐し描き分けたり、ランディングギアを出しっぱなしまたはしまいっぱなしにするよう記述、後の多くは不要な記述の削除でしょう。一部の例はこの間紹介していますし、今回の主題から外れますので詳しいことは省略します。

 

なお、wingman機は編隊長機に追随するものですから、先の条件分岐に関しては速度でなくとも乗機のエンジンの回転数が使って構わないし、ランディングギアについては元のxmlの記述のままで乗機のギア操作に合わせて出し入れが可能なところが、通常のAI機とは違うところです。

 

作成したファイルは、いずれも元にしたファイル同様、当該機体のModelsフォルダーにおいておけばよいでしょう。

 

前提②ーAIシナリオ

 

さて、AI機を飛ばすにはもう一つAIシナリオが必要です。AIシナリオは整理される方向のようですが、wingman機や空母ではいまだバリバリの現役です。

 

wingman機のAIシナリオは、編隊の長機との位置関係や姿勢などを記すところが特徴です。詳細は省きますが、既存のAIシナリオはFlightGearプログラム本体のAIフォルダー内にあります。参考にすると良いでしょう。

 

作成したAIシナリオをAIフォルダー内に置いたら、FlightGearのランチャーを開き、目的の機体を指定してシミュレーションを開始します。

 

FlightGearの画面が表示されたら、上部のメニューから[AI]タブをクリックし、現れたドロップダウンメニュー中の[Trafic and Scenario Settings]を選択すると、「AI Trafic and Scenario Settings」というダイアログボックスが開きます。

 

 

AIシナリオの一覧から目的のAIシナリオにチェックをいれて[Close]を押すと、wingmanの場合だと乗機の周囲に僚機が表示され、編隊飛行を楽しむことができるようになります。

 

本題ーWingman Controlsの使い方

 

Wingman Controlsは、同じくFlightGear画面上部のメニューバーの[AI]タブから開いたドロップダウンメニューの中に出てきます。

 

[Wingman Controls]をクリックしたら表示されるのが、「AI Wingman Controls」というダイアログボックスです。どうやら、これで編隊飛行の操作が行えるようです。

 

 

FlightGearのwingman機能はよくできており、長機に追随する僚機の動きに多少のズレが設けられていて編隊飛行が結構リアルなのがグッジョブですが、編隊を離れる僚機の動きまでは実行してくれませんでした。

 

Wingman Controlsを使えば、右や左に僚機が離れていく様子が再現できます。ダイアログボックスの真ん中にある[Left/Right]のスライドバーを動かすことで、飛んでいく方向や角度が指定できます。

 

実行は、[Break Formation]にチェックを入れると直ちに開始されます。

 

[Formate]にチェックを入れると、再び編隊が組み直されます。

 

なお、ダイアログボックスの[OK]や[Apply]、[Reset]、[Cansel]の各ボタンは、[Cansel]を除き全く意味のないボタンです。実行されます。

 

残り一つの[Join]のラジオボタンの機能がよくわかりませんが、wingman機は旋回をしながら徐々に移動しているようです。乗機が停止していると、その周りを大きく旋回しているようです。

 

[Open/Close]のボタンもトグルのようですが今がOpenなのかCloseなのかさえよくわかりません。wingman機が複数の場合、全機が編隊を崩すか、一部のwingman機が編隊を崩すの違いがあるようにも見えます。いつもいつもと言えず確証もっては言えません。

 

↑遠方に飛んでいった僚機(右上)がある一方、長機の横に残る僚機も(AI Wingman Controlsの陰)

 

wingman controlsについいては、解説が見つからないので、上記のこと程度しか今のところわかりません。

 
どんな楽しみ方があるのかまだインスピレーションがわきません。とりあえずインスタント・リプレイで再現できるかを確かめて見ましたが、wingman機を見かけることはあっても、編隊からの離脱場面は再現されることはありませんでした。

↑かつてはフライトプランやAIシナリオを使ってこんな無茶苦茶なこともできたのに

 

以前できたことができない⁉ FlightGear

 

フライトシミュレーターであるFlightGearは、順調にバージョンアップをしているのかどうか、いまだにバージョンナンバーは2020.x.xとそろそろ4年前となる年の数字のままなのはさておき、一定の改善や新たな機能の追加がなされていることは確かです。

 

しかし、他方では以前できていたことがだんだんとできなくなっているのはどうしたものでしょう。

 

AI機のプロペラの回転の再現ができても意味がない

 

↑長機以外の3つのwingman機は、異なる3つの分岐条件でそれぞれ回転を再現しています

 

前回のブログで、AI機のプロペラの回転の再現について書きました。編隊飛行するwingman機の場合は、プロペラの低速、高速時の回転を再現するのに、エンジンの回転数、指示対気速度、真対気速度の3つがいずれも条件分岐に使え、それぞれに低速、高速の回転を再現することができました。ここでは、編隊の長機、すなわち自分の乗機のエンジンの回転数、速度をwingman機(僚機)と同じとみなして流用しています。ちなみに、プロペラの回転の条件分岐は3Ðモデル設定xmlファイル(当該AircraftのMdoelsフォルダー内にある)に記述します(参考参照)

 

ならば、次は乗機とは別個に飛行、離着陸するAI機のプロペラの回転の再現はどうか? それには、乗機のエンジン、速度の影響を受けることがあってはなりませんから、AI機の飛行用に書かれたFlightPlanやAIシナリオに記された速度を利用していると考えます。

 

ということで、確認してみることにしたのですが…。ここから大変な思いをすることになりました。

 

AI機のプロペラ問題に限ってい言えば、結論は条件分岐には真対気速度を使えばよいことに間違いないことがわかりました。ただし、ショックなことにそれになんの意味もないことも判明しました。

 

フライトプランを使うAIシナリオの場合

 

FlightPlanは、通過する地点とその時の高度、速度が記されており、AIシナリオがこれを読みだしてAI機を飛ばせるもの。FlightPlanに記されたktasの値にもとづいて飛ぶAI機の3Ðモデル設定xmlファイルでは、プロペラの低速・高速時の回転の再現の条件分枝には真対気速度が使われています。

 

FlightPlanはどうも使えないのではと以前から書いてきましたが、aircraft_demoのような離陸だけの単純なFlightPlanを使うAIシナリオでもやはり機能せず、機体が現れないのですから実際のプロペラの回転状況は確認のしようがありません。

 

もしかして、グライダーをけん引するCubのプログラムならばと試してみたら、Ubuntu用開発版2020.4.0では、Cubは現れるものの間もなく地下に潜ってしまいけん引ワイヤーにエラーが発生。Windows用の安定版2020.3.19ならどうかと思ったら、ダウンロードとインストールの仕方がよくわからず慌てさせられはしましたが、Cubの色に一部変なところがあるものの機体は表示され、けん引は成功。

 

開発版はWindows用も同様にエラーを起こしますが、開発版だからかもと言えそうですが、安定版の2020.3.19で、FlightPlanに機能するものとしないものがあるのもよくわかりません。

 

フライトプランなしのAIシナリオの場合

 

↑AIシナリオで飛んでいた給油機 今では機体が青と黄色の飛行機様のダミーに化ける

 

回転の再現の様子をもう少しはっきりと確認したいと考え、次にFlightPlanを使わないAIシナリオだけのケースも調べることにしました。旋回飛行くらいはこれまで通りできるものと信じていたのに、旋回はするものの機体が表示されず、青と黄色の飛行機様のダミーが見えるのみ。

 

驚くべきことに、<type>の記述をaircraftからshipに替えると、旋回はしないものの機体は普通に表示され、プロペラの回転の様子も確認ができます。機体が表示されなかったのはパス指定が不適切であったからではないばかりか、明らかにAircraftは絶対に表示させないという意思を感じます。

 

AIのNasalスクリプト化は既定方針⁉

 

思えば、かつてAIシナリオには、bigstorm_demoやthermal_demoいくつものrefueling_demoなどのシナリオがありましたが、今では多くがcarrier(空母)とwingmanのシナリオになってしまいました。

 

確かに、みすぼらしい(失礼)嵐のAIシナリオのかわりに、メニューのWeatherから様々なリアルな気象現象が選べるようになりましたし、thermal_demoを使って不自然な上昇気流をつくららなくても、現実世界の気象条件を反映したFlightGearの架空世界の中で上昇気流を見つければソアリングができるとか見かけたことがあります。空中給油も、メニューのAIにあるTanker Controlを使えばAIシナリオは要りません。

 

整理されていってるように思ったら、次のようなThorstenの言葉を見つけました。

「AI システムでできることはかなり限られているため、AI はより汎用性の高いNasalソリューションに置き換えられます」(「FlightGearにおけるAIのステータス」より)

 

てんで具体的なことは理解できませんが、以前からAIのNasalスクリプト化がすすめられてきたことはわかります。wingmanだって、使い方を知りませんがメニューのAIにWingman Controlができていますものね。空母がなければAIシナリオはとうになくなっていたのでしょう。

 

今更気づいたって遅すぎます。いったいAI機を飛ばすにはどうすればよいのでしょう? ai_plane.nasの進捗状況は? AI機の飛ばし方がわからないと、AI機のプロペラの回転のさせ方がどういう場面でどのようにプログラミングすればよいか迷うことのないように整理できたところで、なんの役にも立たたないではありませんか。

 

FlightGearについてこれまでに知りえたことは周辺部分のほんの一部にすぎないというのに、それとて古臭いものとなっていて、wingman controlやAIトラフィックなどあらためて一から学びなおす必要を痛感しました。

 

 

参考)プロペラの回転の条件分岐を記した3Ðモデル設定xmlファイル

 

説明の理解のために、具体的なプログラムを示さないのは不親切かと思い、実際上には今すぐ役立ちそうにありませんが、AI機の3Dモデル設定xmlの当該プロペラの回転を再現する条件分岐部分の記述例を掲載します。

 

【AI機用の3Dモデル設定xmlファイルの例】

 

この例では単純化のために再現するのは低速と高速の場合の2つとします。都合で、wingman機と他のAI機(AIシナリオなどで動かす)を1つにまとめて記述しています。わかりやすいように、条件分岐にエンジンの回転数を使用するwingman機は青色、真対気速度を使用するAI機は緑色で記述しています。実際に使用する場合は、目的に合わせてどちらかを残し不要な方は削除するかコメントアウトします。なお、プロペラの回転の再現には不要と思われる指示対気速度(<property>/instrumentation/airspeed-indicator/indicated-speed-kt</property>)については例示しません。

 

   ・
   ・
   ・
 <animation>
  <type>select</type> ←次のオブジェクトを以下の条件以下の場合に表示
  <object-name>prop</object-name> ←低速時のプロペラの3Dオブジェクト
  <condition>
   <less-than>
    <property>/engines/engine[0]/rpm</property> 
←エンジンの回転数
    <value>1000</value>
   </less-than>

   <less-than>
    <property>velocities/true-airspeed-kt</property> 
←真対気速度
    <value>10</value>  ←数値はいい加減
   </less-than>
  </condition>
 </animation>

 <animation>
  <type>spin</type> ←次のオブジェクトを以下の場合で回転
  <object-name>prop</object-name> ←低速時のプロペラの3Dオブジェクト
    <property>/engines/engine[0]/rpm</property> ←エンジンの回転数
    <factor>-0.479</factor>
    <property>velocities/true-airspeed-kt</property> ←真対気速度
    <factor>-0.479</factor>  ←数値はいい加減
    <center>
    <x-m>3.40</x-m>
    <y-m>0.0</y-m>
    <z-m>0.0</z-m>
  </center>
  <axis>
    <x>1.0</x>
    <y>0.0</y>
    <z>0.0</z>
  </axis>
 </animation>
     
 <animation>
  <type>select</type> ←次のオブジェクトを以下の条件以上の場合に表示
  <object-name>propdisk</object-name> ←高速時のプロペラの3Dオブジェクト
  <condition>
   <greater-than>
     <property>/engines/engine[0]/rpm</property> 
←エンジンの回転数
     <value>1000</value>
   </greater-than>
   <greater-than>

     <property>velocities/true-airspeed-kt</property> ←真対気速度
     <value>1</value>  ←数値はいい加減
   </greater-than>
  </condition>
 </animation>

 <animation>
  <type>spin</type> ←次のオブジェクトを以下の場合で回転
  <object-name>propdisk</object-name> ←高速時のプロペラの3Dオブジェクト
    <property>/engines/engine[0]/rpm</property> ←エンジンの回転数
    <factor>-0.479</factor>
    <property>velocities/true-airspeed-kt</property> --> ←真対気速度
    <factor>-0.479</factor>  ←数値はいい加減
  <center>
    <x-m>3.40</x-m>
    <y-m>0.0</y-m>
    <z-m>0.0</z-m>
  </center>
  <axis>
    <x>1.0</x>
    <y>0.0</y>
    <z>0.0</z>
  </axis>
 </animation>
   ・
   ・
   ・

 

FlightGearの通常の機体の3Dモデル設定xmlは、当該AircraftのModelsフォルダーにあります。大概はAircraftの名前を冠し、○○○○.xmlとなっています。例外はいくらでもあります。

 

AI機用の3Dモデル設定xmlは、通常の機体の3Dモデル設定xmlを元に作成したわけですから、そのまま同じフォルダーにおいておくのが無難です。AI機用の名称は通常と区別するため○○○○-ai.xmlなどとしておきます。

 

機体によっては、AIフォルダーを新たに中に設けているケースもあります。また、FlightGearではデフォルトですでにAI機ばかり集めたフォルダーが存在します。これらの場合は、当然パス指定に注意が必要です。