実際の竿燈FEMモデルではなく、「倒れやすい棒」を1自由度で表した骨格で制御器を差し替えながら同じplant_step()を使うと、制御方式の違いを比較できる。
ChatGPTに比較をイメージするアイキャッチ画像を作らせた。
まず、共通の簡易プラントでは、
| import math
def plant_step(theta, omega, u, dt, a=9.0, damping=0.3): dt = 0.01 for step in range(2000): |
LQR制御の制御入力は、
| # 例として K = [20.0, 6.4149] が求まっている場合 k_theta = 20.0 k_omega = 6.4149u = -(k_theta * theta + k_omega * omega) |
PID制御入力は、
| error = 0.0 – theta integral += error * dt derivative = (error – prev_error) / dt u = kp*error + ki*integral + kd*derivative prev_error = error |
Adaptive制御なら、固定の式を1行入れ替えるだけではなく、「観測 → 推定 → 制御器更新」という処理が追加されます。これがPID・固定LQRとの大きな違いです。
観測 → パラメータ推定 → 制御パラメータ更新 → u を計算 → 次の観測
となる。