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 が推奨
実行の流れ#
- 初期条件設定: 速度15 m/s、高度30.5 m(100 ft)
- トリム探索開始: 複数の初期推測値(10%, 20%, 30%, 50%のスロットル)から探索
- 収束判定: wdot < 1.0 ft/s², qdot < 0.01 rad/s² で成功
- 安定性テスト: 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で実際に飛ばしてみましょう。
その他の関連記事:
- JSBSim XML出力の確認方法 - XMLファイルの検証
- よくあるエラーと解決方法 - トラブルシューティング(次回執筆予定)
参照資料#
本記事の執筆にあたり、以下の資料を参照しました:
オープンソースプロジェクト#
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 Reference Manual - Public Domain
- Chapter 8 “Trim”, p. 85-94 - トリムの理論
その他#
- 筆者の過去調査データ(jsbsim_investigation, private repository)
- トリム探索の実行例、収束しないケースの診断
© 2025 Yaaasoh. All Rights Reserved.
本記事の著作権はYaaasohに帰属します。引用部分については各引用元のライセンスが適用されます。