問題概要#

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

参考: FlightGear公式ドキュメント - Command Line Options(Public Domain)

予防策#

機体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) をデフォルトで含めます。

参照資料#

  • FlightGear公式ドキュメント(Public Domain): Frame Rate Optimization、Command Line Options
  • 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更新レート設定事例

関連記事#


© 2025 Yaaasoh. All Rights Reserved.