JSBSim機体モデルを作ったあと、「どのくらい昇降舵を動かせば水平飛行できるか?」という疑問が湧きます。手動で調整すると何十回も試行錯誤が必要ですが、トリム探索機能を使えば、自動で最適な設定を見つけられます。

本記事では、JSBSim XML Generatorに含まれるトリム探索機能の使い方を解説します。

この記事で学べること#

  • トリムとは何か(簡潔に)
  • トリム探索機能の実行方法
  • 出力結果の見方
  • トリムが収束しないときの対処法

対象読者#

  • JSBSim XMLファイルを生成済みの方
  • 機体が安定飛行するか確認したい方
  • トリム値を知りたい方

トリムとは?#

トリムの定義#

トリムとは、機体が一定速度・高度で安定して飛行する状態のことです。具体的には、以下の2つの加速度がゼロになる状態を指します:

  • wdot = 0: 垂直方向の加速度ゼロ(高度が変わらない)
  • qdot = 0: ピッチ角の加速度ゼロ(機首の上下角度が変わらない)

このトリム状態を実現するには、**昇降舵(elevator)スロットル(throttle)**の最適な値を見つける必要があります。

なぜトリム探索が必要か#

手動で試すと、何十回も試行錯誤が必要です(「昇降舵を少し上げて…スロットルを少し下げて…」の繰り返し)。

一方、トリム探索ツールなら、数秒で最適値を自動発見できます。また、トリムが収束するかどうかで、機体の安定性を確認することもできます。


トリム探索機能の使い方#

前提条件#

  • JSBSim XML Generatorで機体XMLを生成済み
  • JSBSimとscipyがインストール済み(未インストールなら pip install jsbsim scipy

実行コマンド#

# 基本的な使い方
python tests/test_trim_manual.py MyAircraft 15

# パラメータ説明
# - MyAircraft: 機体名
# - 15: 目標速度(m/s)

パラメータ:

  • 機体名: aircraft/MyAircraft/MyAircraft.xml が存在すること
  • 目標速度: 機体が飛行する速度(m/s)。10-20 m/s が推奨

実行の流れ#

  1. 初期条件設定: 速度15 m/s、高度30.5 m(100 ft)
  2. トリム探索開始: 複数の初期推測値(10%, 20%, 30%, 50%のスロットル)から探索
  3. 収束判定: wdot < 1.0 ft/s², qdot < 0.01 rad/s² で成功
  4. 安定性テスト: 10秒間のシミュレーションで安定性を確認

実行例#

$ python tests/test_trim_manual.py ExampleAircraft_Excel 15

Manual Trim Search: ExampleAircraft_Excel
Target velocity: 15 m/s (49.21 ft/s)
Target altitude: 30.5 m (100.00 ft)

[OK] Aircraft loaded successfully

[INFO] Running manual trim search (scipy.optimize.fsolve)...
[INFO] Testing with reduced thrust initial guesses...

  Trying: Low thrust (20%)
    Initial: throttle=0.2, elevator=0.0
    Result: throttle=0.2134, elevator=-0.0521
    Quality: wdot=0.0234, qdot=0.000012, metric=0.0235
    [OK] CONVERGED!

[OK] Trim converged successfully!

[INFO] Trim Results:
   Elevator: -0.0521 norm (-1.04°)
   Throttle: 0.2134 norm (21.3%)
   Alpha: 0.0876 rad (5.02°)
   Pitch: 0.0876 rad (5.02°)
   Thrust: 0.234 lbs (1.041 N)

[INFO] Convergence Check:
   wdot: 0.0234 ft/s^2 (target: <1.0)
   qdot: 0.000012 rad/s^2 (target: <0.01)

[INFO] Running 10-second stability test...

[INFO] Stability Results (10 seconds):
   Initial pitch: 5.02°
   Final pitch: 5.03°
   Pitch change: 0.01°
   Altitude change: 0.12 m
[PASS] Aircraft is stable!

数秒で最適なトリム値が見つかり、10秒間の安定性テストも自動で実行されます。


出力結果の見方#

トリム値#

項目意味
Elevator昇降舵の位置(-1.0〜1.0)-0.0521 norm (-1.04°)
Throttleスロットル開度(0.0〜1.0)0.2134 norm (21.3%)
Alpha迎角(機体の傾き)0.0876 rad (5.02°)
Pitchピッチ角(機首の上下角度)0.0876 rad (5.02°)
Thrust推力(lbs または N)0.234 lbs (1.041 N)

収束判定#

  • wdot: 垂直加速度(目標: < 1.0 ft/s²)
  • qdot: ピッチ角加速度(目標: < 0.01 rad/s²)

両方が目標値以下なら収束成功です。上記の例では、wdot=0.0234、qdot=0.000012 なので、十分に収束しています。

結果の活用#

  • Elevator値: XMLの初期設定に反映(例: -0.0521 norm)
  • Throttle値: 飛行試験の参考値(例: 21.3%)
  • Alpha値: 機体の飛行姿勢を確認(例: 5.02° の迎角)

これらの値を使って、FlightGearでの飛行テストや実機の調整ができます。


トリムが収束しないときの対処法#

よくある原因と解決策#

原因1: 空力係数が妥当でない#

症状: wdot や qdot が大きい値のまま収束しない

原因: CL0, Cmalpha, Cm_de 等が極端な値になっている

解決策:

# トリム診断ツールで空力係数をチェック
python tests/test_trim_diagnostic.py MyAircraft

診断ツールが、問題のある空力係数を指摘してくれます。詳細は よくあるエラーと解決方法(次回執筆予定)を参照してください。


原因2: 目標速度が不適切#

症状: すべての初期推測値でトリムが見つからない

原因: 失速速度以下、または最大速度以上の値を指定

解決策: 目標速度を10-20 m/sに変更してテスト

# 速度を15 m/s → 12 m/s に変更
python tests/test_trim_manual.py MyAircraft 12

原因3: 重心位置が不適切#

症状: Elevator値が極端(-1.0 や 1.0 に張り付く)

原因: 重心が後ろすぎる(不安定)、または前すぎる(昇降舵が効かない)

解決策: Excelテンプレートで重心位置を翼弦長の25-30%に修正

典型的な小型固定翼機では、重心は翼弦長の25-30%(前縁から25-30%の位置)が推奨されます。


まとめ#

トリム探索機能を使えば、機体が安定飛行するための昇降舵・スロットル設定を自動で見つけられます。

使い方:

python tests/test_trim_manual.py MyAircraft 15

出力結果:

  • Elevator(昇降舵)のトリム値
  • Throttle(スロットル)のトリム値
  • Alpha(迎角)、Pitch(ピッチ角)
  • 収束判定(wdot, qdot)

これらの値を活用して、FlightGearでの飛行試験や実機の調整に進みましょう。


次のステップ#

トリム値が見つかったら、次はFlightGearで実際に飛ばしてみましょう。

FlightGearでJSBSim機体を飛ばす方法

その他の関連記事:


参照資料#

本記事の執筆にあたり、以下の資料を参照しました:

オープンソースプロジェクト#

  • JSBSim XML Generator - CC BY-NC-SA 4.0

    • tests/test_trim_manual.py - トリム探索スクリプト実装
    • README.md - トラブルシューティング、トリム探索の背景
  • JSBSim GitHub - LGPL 2.1+

    • JSBSim built-in trim の制約事項

公式ドキュメント#

その他#

  • 筆者の過去調査データ(jsbsim_investigation, private repository)
    • トリム探索の実行例、収束しないケースの診断

© 2025 Yaaasoh. All Rights Reserved.

本記事の著作権はYaaasohに帰属します。引用部分については各引用元のライセンスが適用されます。