FlightGearで大空に飛び出そう

FlightGearはマルチプラットフォーム、GPLライセンスのフライトシミュレータだ。精巧でリアル、拡張性にも優れている。ソッピース・キャメル(第1次世界大戦で活躍した複葉戦闘機)からUFOに至る100種類以上の機体、離着陸可能な何千もの空港、世界中のほとんどすべての地域から、好きな条件を選んでフライトを楽しむことができる。開発が始まってから10年、このソフトは突如として注目を浴びることになった。それはなぜか。実は、最近ゴールデンタイムのテレビ番組に登場したからなのだが、ちょっと見ただけではわからなかったかもしれない。Fox TVの法律ドラマ『Justice』のあるエピソードで、自家用機で重大な墜落事故を起こしたパイロットの過失を証明するために使われたのだ。

FlightGearを始める前に

多くの人にとってFlightGearをインストールする最良の方法は、愛用するディストリビューションに含まれるバージョンを利用することだ。Ubuntu Edgyにはバージョン0.9.10-2が入っているので、今回の記事の執筆にはこれを使っている。tarballを取ってくるかCVSから最新版をチェックアウトしてきてスクラッチからビルドすることも可能だが、相当な手間がかかることを覚悟すべきだ。

FlightGearのインストールに取りかかる前に、システムが最低限のハードウェア要件を満たしていることを確認する。大事なのは、3Dアクセラレーションが必要なことだ。Linuxユーザの場合、3D機能が有効なNVIDIAカードが最適だろう。IRCチャンネルでは、ATIカードを搭載したLinuxでFlightGearを動かそうと試みた人々の悲惨な失敗談をいくつか耳にした。

インストールが終わると、マシンのどこかにFlightGearのルートディレクトリができている。Ubuntuの場合は/usr/share/games/FlightGearだが、ディストリビューションによって違うかもしれない。ジョイスティックやキーボードの割り当て変更、機種や風景の追加といった処理を行うには、このルートディレクトリの場所を知っておく必要がある。これ以降、”FlightGear”で始まるディレクトリが何度か出てくるが、使っているマシンのどのディレクトリにFlightGearがあるかの解明はみなさんにおまかせしたい。

FlightGearを楽しむのにパイロットとしての経験は必要ない。ただ、航空機の専門用語など基本事項を理解しておけば役に立つことは間違いない。最低でも、補助翼、昇降舵、方向舵、フラップ(下げ翼)、安定板のそれぞれの違いを知っておく必要はあるだろう。また、基本事項の習得に役立つフライトスクール用チュートリアルが含まれたこのPDFも熟読しておくとよいかもしれない。

The FlightGear.orgというWebサイトには、FAQマニュアル要点のまとめ、Wikiといったユーザによるその他ドキュメントへのリンクもある。

こうしたリソースに加え、FlightGearユーザのためにはメーリングリストや、リアルタイムで支援が受けられるirc.flightgear.orgの#flightgearチャンネルも用意されている。活動中のオープンソースプロジェクトではよくあることのようだが、公式ドキュメントの内容はソフトウェアの現行バージョンに追随できていないことがあるため、後に挙げた2つのほうが有益な情報源と言える。

ジョイスティックの設定

FlightGearはキーボードとマウスでも十分に操作できるが、ジョイスティックがベストだ。私の場合、FlightGearを使い出してまもなくSaitek Cyborg GraphiteのUSBジョイスティックを購入したが、決して損な買い物ではなかった。FlightGearでは、各種ベンダから出ている多数のジョイスティック向けに一般的な設定がFlightGear/Input/Joysticksというディレクトリに用意されている。手持ちのジョイスティック用の設定が予め用意されているかどうかは、そのベンダの製品ラインナップを見て一致するモデルが存在することを確かめればよい。

ブランドやモデルによっては、対応するジョイスティック用コントロールファイルがFlightGearに用意されているかもしれない。予め用意されている場合は、FlightGearのルートディレクトリにあるjoysticks.xmlファイルに手を加えて該当するコントロールファイルを参照するようにするだけで済む。joysticks.xmlファイルには、デフォルトで次のような行が含まれている。

<js n="0" include="Input/Joysticks/Local/joystick_0.xml"/>

ここに記されたパスを、次のように、手持ちのジョイスティックのベンダとモデルを示すものに変えるだけだ。

<js n="0" include="Input/Joysticks/Saitek/Cyborg-Gold-3d-USB.xml"/>

手持ちのジョイスティック用の設定ファイルが見つからない、あるいはその設定内容が気に入らない場合は、FlightGearに用意されている2つのツールを使って独自の設定を構築できる。たとえば、コマンドラインでjs_demoと入力して実行すると、次のように表示される。

Joystick test program.
~~~~~~~~~~~~~~~~~~~~~~
Joystick 0: "Cyborg Graphite"
Joystick 1 not detected
Joystick 2 not detected
Joystick 3 not detected
Joystick 4 not detected
Joystick 5 not detected
Joystick 6 not detected
Joystick 7 not detected
+--------------------JS.0----------------------+
| Btns Ax:0 Ax:1 Ax:2 Ax:3 Ax:4                |
+----------------------------------------------+
| 0000 -0.0 -0.1 +0.0 +0.0 +0.0   .    .    .  |

5つの軸に対応する各カラムには、0~4までの数字が割り振られている。ジョイスティックのハンドルを左右に傾けると、Axis 0の下に表示されている値が変化するのがわかる。ハンドルを前後に動かすと、同じことがAxis 1で起こる。私のCyborgジョイスティックの場合は、土台部分にあるスロットルレバーがAxis 2として、ジョイスティックの最上部にあるキャップがAxis 4として機能する。これで、それぞれの操作がFlightGearからどのように見えるのかがわかったので、上記の設定ファイルで0~4までの部位の操作を自分の好きなように割り当てることができるわけだ。

では、ボタンはどのように識別されるのだろうか。ボタンをどれか押すとBtnsカラムに1、2、4、8のいずれかに相当する2進数が表示される。これら4つの2進数に0~3までの数字を順に割り振れば、押したボタンのFlightGearにおける番号がわかる。たとえば、トリガを握るとBtnsカラムの値が0001に変わるので、このトリガはボタン0にあたることがわかる。Btnsカラムの値が0010(10進数の2に相当)に変われば、そのボタンはFlightGearによってボタン1とみなされていることになる。

既存の設定を変えるだけなら、ここまでの情報で事足りるだろう。軸またはボタンの値を好きなように変えれば済むことだ。だが、ジョイスティック用の設定ファイルをスクラッチから作るなら、fgjsの実行も必要になる。

fgjsコマンドを実行すると、軸やボタンをおびただしい数の操作に割り当てるためのダイアログが表示される。それほどの操作を扱えるだけの軸やボタンはないはずなので、その多くは単純にスキップすることになる。スキップを行うには、軸に対する割り当てを求められているときにはボタンを押し、ボタンに対する割り当てを求められているときにはジョイスティックを動かせばよい。

先に進むと、割り当て内容の確認を求められる。それが済めば、jsX.xml(Xの部分にはジョイスティックの種類を示す文字列が入る)というファイルが作業ディレクトリに作られるので、このファイルの名前をjoystick.xmlにしてFlightGear/Input/Joysticks/Defaultディレクトリにコピーすれば、設定は完了だ。

ジョイスティックを利用する人のために、最後に1つ注意しておこう。離陸時または飛行中の左旋回時に機体が左にドリフトしても、ジョイスティックやその設定のせいにしてはいけない。これはこのシミュレータが徹底的にリアルさを追求していることによるもので、おそらくはみなさんが初飛行を行うことになるであろうデフォルトのセスナ172のようなプロペラ機ではより顕著に発生する現象なのだ。このドリフトについては、プロペラトルクの影響またはスリップストリームの影響という両方の説明を見かけたが、どちらが正しいのか私にはわからない。いずれにせよジョイスティックの影響でないことは確かだ。

ジョイスティックがなくても、FlightGearのルートディレクトリにあるkeyboard.xmlとmice.xmlに設定されているキーボードおよびマウスの割り当てを使って飛行することができる。必要に応じて、それらのファイルに手を加えるとよいだろう。

初めてのフライト

FlightGearには膨大な数のコマンドライン引数があるが、デフォルトの設定で始めるならターミナルでfgfsと入力するだけでよい。数秒後には、サンフランシスコ国際空港の28R滑走路上でエンジンを始動させたセスナ172に搭乗していることだろう。スロットルを開いて操縦桿を引くと、セスナは速度を上げながら滑走路上を進み、やがてちょうど図1のように宙に浮くはずだ。離陸に失敗しても落ち込んだりしないように。新米パイロットは大概そんなものだ。

FG-1 thumbnail
図1:サンフランシスコ国際空港での離陸
FG-2 thumbnail
図2:キャンドルスティックパーク
FG-3 thumbnail
図3:ゴールデンゲートブリッジ
FG-4 thumbnail
図4:A-10 ウォートホッグ攻撃機
FG-5 thumbnail
図5:ジェット旅客機
FG-6 thumbnail
図6:パラグライダー

デフォルトではコックピット内部の様子が画面に表示されるが、このビューでは機体の周囲や眼下の様子があまりわからない。Vキーを押すことで、視点を真横、後ろ、真上などに移したその他のビューに切り換えられる。

デフォルトの飛行機および空港は、FlightGearのルートディレクトリにあるpreference.xmlファイルに設定されている。どちらも変更は簡単だ。私にとってはセスナ172Rが操縦しやすかったので、このファイルを編集してその中の1行、

<aircraft>c172p</aircraft>

を次のように変更している。

<aircraft>c172r</aircraft>

私と同じくセスナ172Rが操縦しやすいと思っても、このシミュレータに慣れてくればもっと多くの機種を試したくなるはずなので、搭乗する飛行機をpreference.xmlではなくコマンドラインで指定できたほうがよいだろう。たとえば、ガトリング砲(複数の銃身を持つ高速連射用の重火器)に興味があれば、fgfs --aircraft=A-10としてシミュレータを起動することで、セスナの代わりにA-10 ウォートホッグ攻撃機を飛ばすこともできる。

利用できる飛行機を確認するには、--show-aircraftオプションを指定してFlightGearを実行すればよい。そこに目当ての機種がない場合は、Webサイトで追加の機種を検索して自分のマシンにダウンロードすることができる。私はここから125機種入りのアーカイブを入手したが、もうなくなっているかもしれない。その場合でもここから一度に1機種ずつ選んで手に入れることは可能だ。

ダウンロードが済んだらFlightGear/Aircraftディレクトリに行き、sudo unzipを実行してダウンロードファイルを解凍する。Aircraftディレクトリの下に機種別のサブディレクトリができれば、それ以降はコマンドラインからその機種を指定できるようになる。ちなみに、FlightGearにはパラセーリング用パラシュートや気球、グライダーなども用意されている。

フライト場所の選択

FlightGearのWebサイトには、デスバレー、アイダホ、死海、グランドキャニオンといったサンフランシスコよりも魅力的なフライト場所がいくつか紹介されている。こうした場所を飛ぶには、2つのことを行う必要がある。希望する空港の指定と必要な風景のインストールだ。

FlightGearにデフォルトで含まれているのは、サンフランシスコ地域だけである。だが、DVDの購入またはインターネットからのダウンロードによって、経度、緯度とも10度刻みのチャンク単位で世界中の地域のデータを入手できる。欲しいチャンクを手に入れる一番簡単な方法は、地図からダウンロードできるページを使うことだ。ただし、各チャンクは100MB以上のサイズがあるので、DVDを購入するのも悪くはない。

FlightGearにチャンクを追加するには、FlightGear/Sceneryディレクトリに行き、tar xzf chunkfile.nameと入力する。ダウンロードしたチャンク内のデータはObjectsおよびTerrainの各サブディレクトリに置かれるが、この時点ではまだ圧縮された状態になっていても問題はない。そのままにしておけば、必要なときにFlightGearが解凍の処理をしてくれる。

風景データが準備できたら、あとは空港のICAO(International Civil Aviation Organization、国際民間航空機関)コードをコマンドラインで指定するだけだ。これは機体の指定方法によく似ていて、--airport=KTKIのように好きなICAOコードを入力すればよい。なかにはICAOコードが割り当てられていない飛行場もあるが、FlightGearではこうした飛行場のために3文字のFAA LID(連邦航空局による位置ID)を用いる。空港のICAOやFAA LIDがわからない場合は、次のようにして調べることができる。

FlightGear/Airportsディレクトリに行き、gunzip apt.dat.gzを実行し、展開されたapt.datファイルからgrepを使って目当ての空港を検索するのだ。たとえば、ハワイのオアフ島ノースシェア沿いを飛行したければ、次のようにしてディリングハム空港を探せばよい。

grep Dillingham apt.dat
1     74 1 0 PDLG Dillingham
1     14 0 0 PHDH Dillingham

PDLGはハワイではなくアラスカの飛行場なので、PHDHが正解だ。そこでfgfs --airport=PHDHと入力してFlightGearを実行すると、数分後にはハレイワからワイメア湾に向かう夢のような飛行が体験できる。

また、FlightGearには米国のみならず世界中の風景が用意されていることを忘れてはならない。次に私が選んだのはRPLB、フィリピンのスービックベイ国際空港だ。適切なチャンクのダウンロードとインストールを済ませた私は、オロンガポを飛び立って海岸沿いに北上し、サンバレス州サンミゲルを目指した。

その他の機能

ここまでに紹介した機能はごく一部に過ぎず、すべてを取り上げると本1冊分のページ数が必要になるほどの機能が、FlightGearには備わっている。たとえば、Linuxユーザならマルチプレイヤーフライトが可能なので、友人と一緒にフライトを楽しむこともできる。以下に示すのは、私がマルチプレイモードでA-10を飛ばすときに使っているコマンド行だ。

fgfs --multiplay=out,10,mpserver01.flightgear.org,5000 --multiplay=in,10,192.168.1.151,5000 --callsign=K1GPL --aircraft=A-10

ただし、こんな長ったらしいコマンドは一度入力するだけでうんざりなので、エイリアスを作って.bashrcファイルに保存しておいた。今ではfly-a10と入力するだけで済む。

--multiplay=inオプションのIPアドレスはLANにおけるデスクトップマシンのアドレスになっている。みなさんはこれを自分のIPアドレスに変えて ― ただし、ルータをかませている場合は内部IPアドレスを用いること ― コールサインを好きなものに変えるだけでよい。

現在マルチプレイモードに入っているすべての機体がわかるこのページで、自分の存在を確認することもできる。なお、マルチプレイモードの詳細については、こちらのHOWTOを参照してほしい。

FlightGearでは離陸する場所の現地時間が用いられる。またお好みに応じて、コマンド行に--enable-real-weather-fetchを追加することにより、実際の天候データを利用することも可能だ。

FlightGearのセッションを「記録(record)」したり「再生(playback)」したりするためのコマンドラインオプションも使える。フライトを記録するには--generic=file,out,20,flight.out,playback.xmlを、再生するには--generic=file,in,20,flight.out,playback.xml --fdm=externalを使えばよい。ただし、再生時のコマンドラインオプションには、記録時と同じ機種、時間、場所を指定する必要がある。

FlightGearのCVSには、安定版にはまだ存在しない多くの新機能がある。今後のリリースでは、必要な風景の取得や表示を「適宜」リアルタイムで実施する機能、機体になり代わるのではなくその中にいるかのようにプレイヤーに感じさせるコクピットのダイナミックビューなど、多くの新機能が搭載される予定だ。こうした新機能は、FlightGearのWebサイトにあるお知らせのセクションで確認できる。Olsen氏が語ってくれたように、現在進められているすべての活動の把握は難しいが、確かに楽しい作業だ。

まとめ

これまで長い間、FlightGearほどの感銘を与えてくれたオープンソースプロジェクトには出会ったことがなかった。私がFlightGearのプレイを始めるきっかけになったのは、ある地域のLUGメーリングリストで読んだ1件のコメントだった。それまでは、このソフトがUbuntu Dapperで使えることすら知らなかったのだ。

FlightGearのバージョン0.9.9を試しに動かしてから、すっかり気に入ってしまった。Ubuntu Edgyに入っているバージョン0.9.10-2は、さらに優れた新機能を数多く備えている。いま私はCVSに存在する新機能が待ち遠しくてしかたがない状態だ。これまでLinuxマシン用の優れたフライトシミュレータの登場を待ち続けてきたなら、もうこれ以上待つ必要はない。あなたの求めているものはここにあり、しかもその人気は上昇中だ。

FlightGearの歴史の簡単な紹介
Curtis Olsen氏はFlightGearの誕生について次のように語っていた。

FlightGearが初めて形になったのは1996年、実に10年前のことです。私たちは2Dのハードウェア(つまり、OpenGLには未対応)で動く独自の3Dグラフィックルーチンを書き始めていましたが、幸いにしてこの活動は収束しました。1997年、プロジェクトの正式なリーダー役を引き継いだ私は、私たちが現在目指している方向へと路線変更しました。マルチプラットフォーム、OpenGLベース、3Dアクセラレーションを用いたグラフィック、風景への実際の地表データの採用、柔軟なフライトモデルなどがその特徴です。

Olsen氏は「UNIXマシンの‘マルチタスク処理’を大学で初めて目にしたときからUNIX/Linux愛好家になった」とも語っている。

「私は当初から個人的にLinuxでFlightGearの開発を進めてきましたが、その途中、プロジェクトではWindows、Mac、SGI、Sunなどの移植版もずいぶん早くから用意していました」

現在、10数名以上の開発者がこのプロジェクトに携わっている。Olsen氏は「これまで、文字どおり何百という人々がコード、グラフィック、3Dモデル、ハードウェア、その他あらゆる面で貢献してくれました。以前は、私がこうした成果をひとつひとつ追跡して記録していたものですが、とても手に負えなくなったのであきらめました」と話している。

プロジェクトが大きくなっても、自分は今でもプロジェクトにコードを提供している、とOlsen氏は言う。

ええ、何があっても私はプロジェクトに参加し続けますよ。子供が2人いて、本業でもこれまで以上のことが求められるようになりましたが、それでもできるだけのことをしています。つまり、以前ほどはコーディングができなくなったわけですが、とにかく今のペースを維持するように努めています。最近、関与した仕事に、FlightGearを無人航空機(UAV)開発用の視覚化ツールとして利用するというものがありました。また、Fox TVの番組『Justice』に使われるFlightGearベースのシミュレータのスクリプト作成も手がけました。飛行機事故に関するエピソードに登場するものですが、たまたま放送が今夜なので、時間があればぜひご覧ください。

また、操縦技術の解析や最新式の高性能ジェット機で起こるパイロット誘起振動の問題の予測や発見のために開発された非常にすばらしいコードと、FlightGearをつなげる作業にも携わりました。とても興味深くて楽しめる、そしてためになる経験でした。元になったコードを開発した人物はエドワーズ郡出身のとても優秀なフライトテストエンジニアでしたが、残念なことに2年前に他界しました。このソフトウェアを復活させ、信じられないほど見事なコード上でビルドを行い、より現代風な外観を与えるという内容でした(ある部分では機能の追加さえ行いました)が、この作業への協力は大変やりがいがあって名誉なことでもありました。

しかし実際には、ここ1、2年間、FlightGearのコーディングの非常に重要な部分は、私以外の多くの人々によって行われています。仮に私が職場からの帰宅途中にバスに轢かれてもFlightGearは私抜きで成長と発展を続けていける、と胸を張って言えるのは実に喜ばしいことです。私たちのプロジェクトには本当に才能のある優秀な開発者がいるので、彼らが新しいコードをプロジェクトに提供してくれるたびに私は新しいことを学んでいます。このプロジェクトでは、航空機モデルの設計者の数とともにすばらしい飛行機やヘリコプターのモデル数も増えつつあります。こうした設計者たちは途方もない時間をかけて画素や頂点の調整を行い、実に見事な美しい航空機のモデルを作り上げ、なかには完全に機能する3次元のバーチャルコックピットを備えていたり、操作器類を動かすパイロットを再現しているものまであります。

最近、私たちはヘリコプターのフライトダイナミクス・モデリング手法の発展、マルチプレイヤーシステムや一部のグラフィック・レンダリング(従来のシーングラフ・ライブラリをOpenSceneGraphに移植したもの)の大いなる改善にすばらしい貢献をしました。私たちの環境には大幅に改良された米国軍用規格(MIL-STD)のヘッドアップディスプレイ(HUD)や、世界中のランドマークが多数追加された風景データベースが用意されているので、FlightGearの内部で開発者たちが取り組み、機能させている優れた点のすべてをつい見失なってしまいがちです。

また、FlightGearの研究プロジェクト、学究分野での利用、フライト訓練、産業向け用途については今さらここで申し上げる必要はないでしょう。たくさんのグループが製品の開発、研究の発展、フライトダイナミクスの解明のためのエンジニアリング・ツールとしてFlightGearを利用しています。

NewsForge.com 原文