問題概要#

FlightGearウィンドウは開くが、機体が静止したまま動かない。JSBSim側では正常にシミュレーションが進行しているが、FlightGearに反映されない。

原因#

JSBSim XMLの出力設定とFlightGear起動オプションで指定したUDPポート番号が一致していないことが原因です。

JSBSimはデータを送信しているが、FlightGearは別のポートでリッスンしているため、データが届きません。デフォルト値の5550番を使用しているつもりが、一方が5501番等になっている場合が多いです。

参考: FlightGear公式ドキュメント - Network Protocol(Public Domain)

解決方法#

1. FlightGear起動オプション確認#

--native-fdm=socket,in,60,,5550,udp
                          ↑↑↑↑ ポート番号

2. JSBSim XML確認#

<output name="flightgear" type="FLIGHTGEAR" port="5550" .../>
                                                   ↑↑↑↑ ポート番号

3. 両方を5550番に統一#

または任意の番号で一致させます。

4. 再起動順序#

  1. FlightGearを先に起動(30秒待機)
  2. JSBSimスクリプトを実行

参考: JSBSim Reference Manual - Output Configuration(Public Domain)

予防策#

起動スクリプト(.batまたは.sh)にポート番号を変数として定義し、FlightGear起動コマンドとJSBSim XML生成コードの両方で同じ変数を参照します:

# Python例
PORT = 5550

# FlightGear起動
subprocess.run(['fgfs', f'--native-fdm=socket,in,60,,{PORT},udp', ...])

# JSBSim XML生成
xml_output = f'<output name="flightgear" type="FLIGHTGEAR" port="{PORT}" .../>'

ポート番号を一箇所で管理することで不一致を防止します。

参照資料#

  • FlightGear公式ドキュメント(Public Domain): Network Protocol、native-fdmプロトコル仕様
  • JSBSim Reference Manual(Public Domain): Output Configuration
  • JSBSim XML Generator(CC BY-NC-SA 4.0、自作プロジェクト): https://github.com/Yaaasoh/jsbsim-xml-generator
  • 筆者の過去調査データ(private repository): FlightGear UDP通信ポート不一致事例

関連記事#


© 2025 Yaaasoh. All Rights Reserved.