この記事で学べること#

  • Dutch Roll Mode(横・方向振動モード)の基礎
  • Cnr(ヨー減衰係数)が減衰に与える影響
  • 2段階改善プロセス: Cnr調整→ラダー入力最適化
  • 横滑り角・ロール角の観測データから挙動を評価する方法
  • YAMLコンフィグレーションによるパラメータ設定

対象読者#

  • B-7「JSBSim空力微係数の基礎」を読んだ方
  • Dutch Roll Modeのシミュレーションを実装したい方
  • 空力微係数の実践的調整方法を学びたい中級者

本記事では、JSBSimでDutch Roll Modeを実装する際の空力微係数調整の実践例を解説します。初期設定の問題点を分析し、2段階の改善プロセスで教育的に適切な挙動を実現します。


Dutch Roll Modeとは?#

横・方向の振動モード#

Dutch Roll Mode(ダッチロールモード)は、横・方向の振動モードで、以下の3つの運動が連成します。

  • ヨー(ψ): 機首方位の左右振動
  • ロール(φ): バンク角の左右振動
  • 横滑り(β): 機体の横滑り角の振動

特性#

  • 周期: 5~8秒(小型機)
  • 減衰: 支配的パラメータはCnr(ヨー減衰係数)
  • 励起方法: ラダーダブレット入力(左→中立→右)

空力微係数Cnr(ヨー減衰)の役割#

Cnrの定義#

Cnr(Yaw Damping Derivative)は、ヨー角速度に対するヨーモーメントの変化率です。

Cn = ∂(Yaw Moment) / ∂r
  • r: ヨー角速度(rad/s)
  • Cnr < 0: ヨー角速度に対して減衰方向のモーメント

Dutch Roll減衰への影響#

Cnrは、Dutch Roll Mode減衰比(ζ)に直接影響します。

ζ_DR ≈ -(Yβ + u₀·Nr) / (2·ωn·u₀)
  • |Cnr|が大きい: 減衰が強い(振動が早く収束)
  • |Cnr|が小さい: 減衰が弱い(振動が持続)

一般的な値:

  • Cessna 172: Cnr ≈ -0.099 /rad(十分な減衰)
  • Swept-wing jets: Cnr ≈ -0.05 /rad(ヨーダンパー必要)

実装の2段階改善プロセス#

初期設定の問題点#

Aircraft: edu280_dutch_roll_demo(Cnr=-0.03) 初期高度: 100m ラダー入力: ±10°

観測結果(❌ 異常な挙動):

  • 横滑り角: ±16°(正常範囲±2-5°を大きく超過)
  • ロール角: -12° ~ 67°(過大)
  • 高度損失: 96.4m(100m → 3.6m)
  • 地面接触: 2回(t=20.7s, t=37.8s)
  • フル旋回運動(発散型運動に移行)

問題の原因:

  1. Cnr=-0.03が小さすぎる(減衰不足)
  2. ラダー入力±10°が大きすぎる
  3. 初期高度100mが不足

Stage 1: Cnr調整(-0.03 → -0.055)#

目的: ヨー減衰を増強し、振動を抑える

変更内容:

  • Cnr: -0.03 → -0.055
  • 初期高度: 100m → 150m
  • ラダー入力: ±10°(維持)

結果(⚠️ 部分的改善):

  • 横滑り角: ±8°(改善: ±16° → ±8°)
  • ロール角: 32° ~ 65°(依然として過大)
  • 最終高度: 14.0m(改善: 3.6m → 14.0m)
  • 地面接触: なし

評価:

  • ✅ Cnr改善で横滑り角が半減
  • ❌ ロール角は依然として過大
  • ✅ 初期高度引き上げで地面接触回避

Stage 2: ラダー入力最適化(±10° → ±5°)#

目的: 励起振幅を適切化し、観測可能な振動を実現

変更内容:

  • Cnr: -0.055(維持)
  • 初期高度: 150m(維持)
  • ラダー入力: ±10° → ±5°

結果(✅ 教育的に適切):

  • 横滑り角: ±4°(正常範囲±2-5°に収まる)
  • ロール角: 4.5° ~ 34.7°(大幅改善)
  • 最終高度: 114.4m(高度損失わずか35.6m)
  • 地面接触: なし
  • 減衰比: ζ ≈ 0.08-0.10(MIL-F-8785C Level 1 marginal or Level 2)

評価:

  • ✅ 横滑り角が正常範囲内
  • ✅ ロール角が大幅改善
  • ✅ 高度損失が小さい
  • ✅ 5-8サイクルの振動が観測可能

実装結果の比較#

定量的比較#

設定 Cnr 初期高度 ラダー 横滑り角範囲 ロール角範囲 最終高度 評価
Original -0.03 100m ±10° ±16° -12° ~ 67° 3.6m ❌ 異常
Stage 1 -0.055 150m ±10° ±8° 32° ~ 65° 14.0m ⚠️ 部分改善
Stage 2 -0.055 150m ±5° ±4° 5° ~ 35° 114.4m ✅ 適切

グラフでの比較#

横滑り角(β)の時系列変化:

Original (Cnr=-0.03, ±10°):
   |          ╱╲          ╱╲
β  |        ╱    ╲      ╱    ╲
±16°|      ╱      ╲    ╱      ╲
   |____╱________╲__╱________╲____
        0     10s   20s   30s   40s

Stage 2 (Cnr=-0.055, ±5°):
   |      ╱╲      ╱╲      ╱╲
β  |    ╱  ╲    ╱  ╲    ╱  ╲
±4° |  ╱    ╲  ╱    ╲  ╱    ╲
   |╱______╲╱______╲╱______╲
    0     10s   20s   30s   40s

→ 振幅が1/4に減少、周期は約6秒で安定

YAMLコンフィグレーション解説#

最終推奨設定(Stage 2)#

# dutch_roll_demo.yaml
aircraft:
  model: "edu280_dutch_roll_demo"  # Cnr=-0.055

initial_conditions:
  altitude_m: 150.0  # Stage 1で100m→150mに引き上げ
  velocity_mps: 12.0
  pitch_deg: 0.0
  roll_deg: 0.0
  yaw_deg: 0.0

control:
  throttle: 0.5  # 一定

  rudder_normalization_factor: 0.44  # rad (~25° max deflection)

  initialization_phase:
    description: "Trim to level flight"
    end_time_s: 5.0
    rudder_deg: 0.0

  excitation_phase:
    description: "Rudder doublet to excite Dutch roll"
    end_time_s: 9.5

    # Doublet timeline (3-step: left → neutral → right)
    left_rudder_start_s: 5.0
    left_rudder_end_s: 7.0
    left_rudder_deg: 5.0  # Stage 2で10.0→5.0に削減

    neutral_start_s: 7.0
    neutral_end_s: 7.5

    right_rudder_start_s: 7.5
    right_rudder_end_s: 9.5
    right_rudder_deg: -5.0  # Stage 2で-10.0→-5.0に削減

  observation_phase:
    description: "Hands-off Dutch roll oscillation"
    end_time_s: 40.0
    rudder_deg: 0.0  # ニュートラルに戻す

simulation:
  dt_s: 0.005  # 5ms(短周期振動のため高頻度サンプリング)
  duration_s: 40.0  # 5-8サイクル観測可能

重要なパラメータ#

1. Cnr(機体XMLで設定):

<!-- edu280_dutch_roll_demo.xml -->
<function name="aero/moment/Yaw_r">
  <product>
    <value>-0.055</value>  <!-- Cnr = -0.055 /rad (Stage 1で調整) -->
    <property>velocities/r-rad_sec</property>
    <property>aero/qbar-area</property>
    <property>metrics/bw-ft</property>
  </product>
</function>

2. ラダーダブレット励起パターン:

t=0-5s:   初期化(トリム)
t=5-7s:   左ラダー +5°
t=7-7.5s: ニュートラル 0°
t=7.5-9.5s: 右ラダー -5°
t=9.5-40s: 観測(ハンズオフ)

実装手順#

Step 1: 機体XMLの作成#

edu280_baselineをコピーして、Cnrを調整します。

cd article-sources/educational-flight-modes/aircraft_models/aircraft
cp edu280_baseline.xml edu280_dutch_roll_demo.xml

Cnr修正 (line 535付近):

<!-- Original: -0.08 -->
<value>-0.08</value>

<!-- Modified: -0.055 (Stage 1) -->
<value>-0.055</value>

Step 2: YAMLコンフィグレーション作成#

cd article-sources/educational-flight-modes/phase3_unstable_modes/configs
# dutch_roll_demo.yamlを上記の設定で作成

Step 3: シミュレーション実行#

cd article-sources/educational-flight-modes/phase3_unstable_modes
python dutch_roll_mode.py \
  --config configs/dutch_roll_demo.yaml \
  --output output/dutch_roll_demo.csv

Step 4: 結果確認#

# CSVファイルの確認
head output/dutch_roll_demo.csv

期待されるCSV列:

time,phase,altitude_m,airspeed_m_s,beta_deg,phi_deg,psi_deg,p_deg_sec,r_deg_sec,rudder,throttle
0.000,initialization,150.000,12.000,0.0000,0.00,0.00,0.0000,0.0000,0.000000,0.5000
...

教育的意義#

B-7「空力微係数の基礎」との関連#

本記事は、B-7で学んだ理論を実践的に適用する事例です。

B-7で学んだこと:

  • Cnr(ヨー減衰係数)の定義
  • Dutch Roll減衰比への影響

D-10で実践すること:

  • Cnr値の具体的調整(-0.03 → -0.055)
  • 調整結果の定量的評価(横滑り角±16° → ±4°)
  • 励起入力の最適化(±10° → ±5°)

実装から学べること#

  1. 理論と実践のギャップ: 理論的に計算したCnr値でも、実際のシミュレーションで微調整が必要
  2. 多段階改善の重要性: 1回の調整では不十分、観測結果を見て段階的に改善
  3. 複数パラメータの相互作用: Cnr、ラダー入力、初期高度が相互に影響
  4. 教育的目的の設定: 「発散しない」だけでなく「観測可能な振動を実現」

よくある問題と対処法#

問題1: 横滑り角が大きすぎる(±10°超)#

原因:

  • Cnrが小さすぎる(減衰不足)
  • ラダー入力が大きすぎる

対策:

  1. Cnrを増やす(例: -0.03 → -0.05 ~ -0.06)
  2. ラダー入力を減らす(例: ±10° → ±5°)

問題2: 振動が見えない(1サイクルで収束)#

原因:

  • Cnrが大きすぎる(過減衰)

対策:

  • Cnrを減らす(例: -0.08 → -0.05)
  • ただし、MIL-F-8785C Level 2以上を維持(ζ ≥ 0.02)

問題3: 地面に接触する#

原因:

  • 初期高度が低すぎる
  • ロール角が大きく高度損失が大きい

対策:

  1. 初期高度を引き上げる(例: 100m → 150m)
  2. Cnr・ラダー入力を調整してロール角を抑える

まとめ#

本記事では、Dutch Roll Mode実装における空力微係数Cnrの実践的調整方法を解説しました。

重要なポイント:

  • Cnrは Dutch Roll 減衰を支配する最重要パラメータ
  • 2段階改善: Cnr調整(-0.03 → -0.055)+ ラダー入力最適化(±10° → ±5°)
  • 横滑り角±4°、ロール角5-35°で教育的に適切な挙動を実現
  • 初期高度150m、シミュレーション時間40sで5-8サイクル観測可能
  • 実装結果の定量的評価(横滑り角、ロール角、高度損失)が重要

次のステップとして、Spiral Mode実装(バンク角36°飽和現象)やヨーダンパー設計(V3)に挑戦してみましょう。


参照資料#

本記事の執筆にあたり、以下の資料を参照しました [@nelson_flight_stability_1998; @mil_f_8785c_1980; @dutch_roll_design_report_2025; @dutch_roll_test_report_2025]。