問題概要#

fdm.load_model('RC_UAV_200g') がFalseを返し、機体XMLが読み込まれない。XMLファイルは存在し、構文エラーもない。

原因#

JSBSimは独特のディレクトリ構造を要求します

set_aircraft_path('X') で指定したディレクトリ内に、load_model('Y') で指定した名前のサブディレクトリが必要であり、その中に Y.xml が存在する必要があります。

XMLファイルを直接 aircraft/ 直下に配置している場合は読み込まれません。

参考: JSBSim Reference Manual - File Structure(Public Domain)

解決方法#

正しいディレクトリ構造#

project/
  └─ aircraft/              ← set_aircraft_path('aircraft')
       └─ RC_UAV_200g/      ← load_model('RC_UAV_200g') で指定
            └─ RC_UAV_200g.xml

間違った例#

project/
  └─ aircraft/
       └─ RC_UAV_200g.xml  ← ❌ サブディレクトリに入れる必要がある

修正コマンド#

mkdir -p aircraft/RC_UAV_200g
mv RC_UAV_200g.xml aircraft/RC_UAV_200g/

参考: JSBSim公式ドキュメント - Directory Structure Requirements(Public Domain)

予防策#

機体XML生成スクリプトに、正しいディレクトリ構造を自動作成する機能を組み込みます:

import os

def save_aircraft_xml(model_name, xml_content):
    # 正しいディレクトリ構造を自動作成
    aircraft_dir = os.path.join('aircraft', model_name)
    os.makedirs(aircraft_dir, exist_ok=True)

    xml_path = os.path.join(aircraft_dir, f'{model_name}.xml')
    with open(xml_path, 'w') as f:
        f.write(xml_content)

出力パス指定時にディレクトリ名とXMLファイル名を同じにする命名規則を徹底します。

参照資料#

  • JSBSim Reference Manual(Public Domain): File Structure、Directory Requirements
  • JSBSim公式ドキュメント(Public Domain): ディレクトリ構造の要求仕様
  • JSBSim XML Generator(CC BY-NC-SA 4.0、自作プロジェクト): https://github.com/Yaaasoh/jsbsim-xml-generator
  • 筆者の過去調査データ(private repository): JSBSimディレクトリ構造の失敗事例

関連記事#


© 2025 Yaaasoh. All Rights Reserved.