notes
Control

システム同定 (System Identification)

実験データから対象システムの数学モデル (パラメータ or 構造) を推定する。制御設計の前段

要点: 実験データから対象の数学モデルを推定する分野。制御 (PID/FF) を設計する前段として使う。モータ校正 (friction 係数、慣性、重力モデル) はすべて system ID の一種 (gray box)。

3 段階#

  1. 入力信号設計 — 何を印加して応答を見るか (ステップ / 掃引 / PRBS)
  2. データ収集 — 入出力を bag する
  3. パラメータ fit — LS / 極配置 / MLE 等で係数決定

分類軸#

情報の使い方 (何を仮定しているか)#

Type説明例
Black box構造知らない、データだけで fitARX, ARMAX, N4SID
White box全物理式既知、パラメータも設計値有限要素モデル
Gray box構造既知 + 係数未知モータ校正 (duty = c·sign(v) + b·v + g)

現実の実装ではほぼ gray box。物理的な構造 (慣性・摩擦・重力) は既知だが係数を測って埋める。

入力信号#

Signal用途何が分かる
Step単純、加速度で J 同定立ち上がり時定数、オーバーシュート
Impulse短時間ピーク応答インパルス応答 h(t)
Sine sweep周波数ごとに正弦波印加周波数応答 G(jω) = ゲイン + 位相 → ボード線図
Chirp掃引を連続化 (t で ω が変わる)短時間で広帯域を励起
PRBS (Pseudo-Random Binary)±duty を疑似ランダム切替全周波数を並列に励起、LS で fit
Multi-sine複数周波数の合成帯域制限しつつ広帯域

信号設計のトレードオフ:

  • 帯域広い → 全モードが観測可能だが high freq でモータ発熱
  • 振幅大 → SNR 良いが機構破損リスク
  • 時間短い → transient 支配、定常が見えない

領域#

  • 時間領域: ステップ / ランプ / PRBS + LS fit
  • 周波数領域: 掃引 → FFT → G(jω) → 極配置

代表アルゴリズム#

Method特徴
LS (最小二乗)線形 + 静的関係 (motor friction fit がこれ)
RLS (再帰 LS)オンライン更新、適応制御
ARX y[k] = a·y[k-1] + b·u[k-1]動的 SISO 線形モデル
ARMAXARX + moving average of noise
OE (Output Error)ノイズを output 側にのみ仮定
N4SID (subspace)MIMO 対応、状態空間モデル
Kalman filter状態 + パラメータ同時同定
Levenberg-Marquardt非線形 LS (物理式 fit)

制御設計との関係#

同定 → モデル → 極配置 or 周波数応答整形 → gain 決定 → 実装

モデルなしで PID チューニング:

  • 試行錯誤、Ziegler-Nichols 等の rules of thumb
  • 極めて時間がかかる、機構破損リスク

モデルありで gain 計算:

  • 1 回で gain が出る: kp_v = J·ω_v/Kt, kp_p = ω_v/5
  • 帯域 ω_v の 1 つのノブで cascade PID が決まる
  • FF もモデルから直接: duty_ff = J·a/Kt + g(θ) + c·sign(v) + b·v

落とし穴 (実測すると必ずぶつかる)#

  1. 入力信号の帯域不足: 全モードが励起されず、一部のパラメータが observability 低い
    • 例: 常に低速だけだと viscous slope が見えない
    • 対策: 対称速度セット [-2, -1, -0.5, 0.5, 1, 2] で fit
  2. 測定ノイズ: LS の分散悪化
    • 対策: サンプル数増、window LPF、baseline 減算
  3. モデル構造の誤り: データが良くても fit が悪い (R² 低)
    • 例: 対称モデル c·sign(v) + b·v を非対称機構に fit すると R² が上がらない
    • 対策: 構造を先に検証 (残差プロット、方向別 fit)
  4. 可観測性 (identifiability): 同時に測ろうとして片方が固定に見える
    • 例: friction stage の中で重力バイアスと constant duty が縮退
    • 対策: 実験の切り分け (重力 stage を先に、独立に測る)
  5. 入力側の飽和: 線形域外で fit が壊れる
    • 例: PID output=1.0 (100%) に貼り付いてる時は本当の応答ではない
    • 対策: サチュ観測時はその点を除外 or 速度域を下げる
  6. 温度ドリフト: 電気特性 (kt, R) が変わる
    • 対策: 校正直前に暖機、または温度補正モデル

実運用の切り分け (Gray box の作り方)#

分離できる物理は分離:

  • 摩擦 = 速度依存 → 定速で測る
  • 慣性 = 加速度依存 → ステップ応答の加速中を切り出す
  • 重力 = 位置依存 → 静止保持で測る (速度・加速度=0)
  • backlash = 位置差分 → forward/backward で位置差を測る

分離できないもの (混同する):

  • 摩擦 (viscous) と EMF 補償: どちらも v 比例。折り込んで 1 係数で扱う
  • 摩擦 (coulomb) と gravity_bias: 定数っぽく見えるが、gravity は姿勢依存
  • inertia J と gearbox 摩擦: 加速中に混じる

分離できないものは順序で管理:

  • 一方を先に測って減算 → もう一方を測る
  • 例: gravity stage を先 → friction stage で減算 (RC27 mech_ff_tuner)

応用例 (身近なところ)#

対象使う入力信号出力
モータ (J/Kt)ステップinertia, torque const
ダンパ (減衰係数)インパルス減衰時定数
RC 回路 (RC 時定数)ステップτ = RC
建物構造 (固有振動)起振機掃引モード解析
反応炉 (伝達関数)温度ステッププロセス gain と遅れ

参考#

  • Ljung "System Identification: Theory for the User" — 定番教科書
  • MATLAB System Identification Toolbox
  • Python: sysidentpy, sippy, control package
  • ROS 2 では ros2 bag + pandas + scipy で LS fit を書くのが多い

関連#

最終更新:

On this page