問題概要#

FlightGearとJSBSimを同時起動したが、UDPデータが送受信されず、FlightGearに機体が表示されない。ポート番号は一致している。

原因#

JSBSimスクリプトをFlightGearより先に実行(または同時実行)したことが原因です。

JSBSimがUDPデータを送信した時点でFlightGearがまだリッスンポートを開いていません。JSBSimは接続失敗を検出せず、データを空に送信し続けます。UDPは接続確立を待たないため、送信側にエラーが表示されません。

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

解決方法#

正しい起動順序#

1. FlightGearを先に起動(Terminal 1)

fgfs --aircraft=c172p --native-fdm=socket,in,60,,5550,udp ...

2. 30秒待機(FlightGearの完全起動を待つ)

3. JSBSimスクリプトを実行(Terminal 2)

python run_simulation.py

スクリプト自動化#

import subprocess
import time

# FlightGear起動
subprocess.Popen(['fgfs', '--aircraft=c172p', ...])
time.sleep(30)  # 30秒待機

# JSBSim実行
fdm.run()
...

参考: FlightGear公式ドキュメント - Scripting and Automation(Public Domain)

予防策#

起動スクリプト(launch_simulation.bat/sh)に起動順序と待機時間を自動化します:

#!/bin/bash
# launch_simulation.sh

echo "FlightGear起動中..."
fgfs --aircraft=c172p --native-fdm=socket,in,60,,5550,udp &

echo "30秒待機中..."
sleep 30

echo "JSBSim実行..."
python run_simulation.py

FlightGear起動確認機能(ポート5550がListening状態かチェック)を実装し、準備完了後にJSBSimを自動実行すると、さらに確実です。

参照資料#

  • FlightGear公式ドキュメント(Public Domain): Network Communication、Scripting and Automation
  • JSBSim Reference Manual(Public Domain): External Communication
  • JSBSim XML Generator(CC BY-NC-SA 4.0、自作プロジェクト): https://github.com/Yaaasoh/jsbsim-xml-generator
  • 筆者の過去調査データ(private repository): FlightGear起動順序ミス事例

関連記事#


© 2025 Yaaasoh. All Rights Reserved.