問題概要#
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.pyFlightGear起動確認機能(ポート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起動順序ミス事例
関連記事#
- E-3: FlightGear UDP通信ポート不一致(接続失敗の別の原因)
- C-1-2: FlightGear起動・基本操作(FlightGear操作の基礎)
© 2025 Yaaasoh. All Rights Reserved.