問題概要#

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()
...

参考: [@fg_wiki_main_2025]

予防策#

起動スクリプト(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を自動実行すると、さらに確実です。

参照資料#

本記事の執筆にあたり、以下の資料を参照しました [@fg_wiki_main_2025; @jsbsim_refman_2024; @xmlgen_github_main_2025]。筆者の過去調査データ(private repository: FlightGear起動順序ミス事例)も活用しています。

関連記事#


© 2025 Yaaasoh. All Rights Reserved.