問題概要#

FlightGearで機体の動きがスムーズでなく、カクカクする。フレームレートが低い。機体XMLやPythonスクリプトの構文エラーはない。

原因#

JSBSim XMLの出力設定でFlightGearへの更新レート(rate属性)が低く設定されている(例: 10Hz)、またはPythonスクリプトでtime.sleep(dt) が欠落しているため、JSBSimが高速実行されてFlightGearが追いつかないことが原因です。

デフォルト値が低い場合があります。

参考: FlightGear公式ドキュメント - Frame Rate Optimization(Public Domain)

解決方法#

解決策1: 更新レートを60Hzに設定#

JSBSim XML:

<output name="flightgear" type="FLIGHTGEAR" port="5550" protocol="udp" rate="60"/>
                                                                            ↑↑

解決策2: Pythonスクリプトにリアルタイム実行制御を追加#

import time

dt = 1.0 / 60.0  # 60Hz
for i in range(steps):
    fdm.run()
    time.sleep(dt)  # ← リアルタイム実行に必要

解決策3: FlightGear視覚効果を軽減(CPU/GPU負荷が高い場合)#

fgfs --aircraft=c172p \
     --disable-random-objects \
     --disable-ai-traffic \
     --disable-sound \
     --timeofday=noon

参考: [@fg_wiki_main_2025]

予防策#

機体XMLテンプレートのFlightGear出力設定にrate="60"をデフォルト値として含めます:

# XML生成スクリプト例
FLIGHTGEAR_UPDATE_RATE = 60

xml_output = f'''
<output name="flightgear" type="FLIGHTGEAR"
        port="5550" protocol="udp" rate="{FLIGHTGEAR_UPDATE_RATE}"/>
'''

Pythonシミュレーションスクリプトのテンプレートにtime.sleep(dt) をデフォルトで含めます。

参照資料#

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

関連記事#


© 2025 Yaaasoh. All Rights Reserved.