ロボットアームのPID制御と非線形性
1関節で効くPIDが多関節アームで暴れる理由を原理から解明。重力補償と計算トルク法まで分かればチューニング地獄を抜け出せます。
- 1.多関節アームは各関節が独立ではなく、慣性・遠心力・コリオリ力・重力を通じて結合した非線形動力学に従うため、関節ごとの単純PIDは姿勢が変わるたびにゲインが合わなくなる。
- 2.重力補償(動力学モデルで重力トルクを事前に打ち消す)とフィードフォワードで、PIDが担う残差を小さくできる。さらに進めると動力学を丸ごと打ち消す計算トルク法(逆動力学制御)に至る。
- 3.計算トルク法はモデル依存で計算コストも高いため、精度要求・モデル既知度・演算資源に応じて単純PID/重力補償付きPID/計算トルク法を使い分けるのが実務の判断軸。
1関節で効くPIDが、なぜ多関節では効かないのか
単一の関節を位置決めするだけなら、PID制御は素直に機能します。偏差に比例・積分・微分で応答するだけの単純な仕組みが、なぜ多関節ロボットアームでは急に「効かなく」なるのでしょうか。答えは、多関節アームの運動方程式が関節ごとに独立していないという一点に尽きます。
各関節の角度を並べたベクトルを q(関節1、関節2…の角度をまとめたもの)とすると、多関節アームの動力学は次の形の連立微分方程式で表されます。
多関節ロボットアームの運動方程式(ラグランジュ形式):
M(q) q̈ + C(q, q̇) q̇ + G(q) = τ
M(q) : 慣性行列(姿勢 q に依存、非対角成分が関節間の慣性結合)
C(q,q̇): 遠心力・コリオリ力の行列(速度の2次項、姿勢と速度の両方に依存)
G(q) : 重力トルク(姿勢 q に依存、関節を静止させても消えない)
τ : 各関節モーターが発生させる駆動トルク(制御入力)
この式の M(q), C(q, q̇), G(q) がすべて姿勢 q(と速度 q̇)の関数である点が本質です。ある関節を動かすトルクは、他の関節の角度・角速度にも依存して変化します。単純なPIDは「関節1の偏差には関節1のトルクだけで応答する」という関節ごとに独立な線形系を暗黙に仮定しますが、実機はそうなっていません。
M(q) の非対角成分は、たとえば肘関節を加速すると肩関節にも反力トルクが生じることを表します(腕を伸ばすか畳むかで肩から見た「実効慣性」が変わるのも同じ理由)。C(q,q̇) の遠心力項は角速度の2乗に、コリオリ項は2つの関節の角速度の積に比例するため、速い動作ほど強く効きます。G(q) は関節を止めても消えない重力トルクで、腕を水平に伸ばすほど大きく、真上や真下に向けるとゼロに近づきます。3つとも姿勢 q によって値が変わるため、線形時不変(LTI)を前提にした古典PIDの設計原理そのものから外れます。
単純PIDが姿勢によって破綻する具体像
各関節に独立にPIDを組んだとします。すると次のような現象が起きます。
- 重力トルク
G(q)はP項が肩代わりする。P制御はKp * eがゼロでない外乱に釣り合うために定常偏差を残す性質があります(PID制御の原理 参照)。アームを水平に保持する姿勢では大きな重力トルクを常に打ち消す必要があり、その分の定常偏差がI項の介入まで残ります。 - 同じゲインが姿勢ごとに最適でなくなる。
M(q)は姿勢によって数倍変わり得るため、腕を畳んだ姿勢でちょうど良いゲインは、伸ばした姿勢では過大(振動・オーバーシュート)になったり過小(応答遅延)になったりします。1組のゲインで全姿勢をカバーしようとすると、どの姿勢でも「そこそこ」にしかなりません。 - 高速動作で関節間干渉が顕在化する。ピック&プレースのように速く動かすほど
C(q, q̇) q̇の遠心力・コリオリ項が効いてきます。ある関節の急な動きが他の関節に外乱として伝わり、その関節のPIDが遅れて反応する間に軌道誤差が蓄積します。
これらは「ゲインの調整が甘い」のではなく、制御対象のモデルそのものが線形PIDの前提から外れているために起きる原理的な限界です。
重力補償とフィードフォワード:PIDの負担を減らす
最初の対策は、動力学モデルの一部をフィードフォワードとして制御則にあらかじめ足し込み、フィードバック(PID)の仕事量を減らすことです。最も効果が大きいのが重力補償です。
重力補償付きPID:
τ = Kp*e + Ki*∫e dt + Kd*ė + Ĝ(q)
└────── フィードバック ──────┘ └ フィードフォワード ┘
Ĝ(q) : 動力学モデルから計算した重力トルクの推定値
e = q_目標 - q_現在
Ĝ(q) は現在の姿勢 q からモデル計算だけで求まり、フィードバックを待たずに重力を相殺します。理想的にモデルが正確なら Ĝ(q) = G(q) となり、PIDは重力という大きな既知の外乱を扱わずに済み、残りの誤差(モデル化しきれない摩擦やモデル誤差)だけに集中できます。結果として、P項に頼らず小さなゲインでも定常偏差が縮み、姿勢が変わってもP・I項の負担が安定します。
同様に、目標軌道の速度・加速度から慣性項・遠心力項もフィードフォワードで加えることができます。これが次の計算トルク法へのステップです。
遠心力・コリオリ項は速度の2乗や積に比例するため、ゆっくりした動作(ティーチングや精密位置決め)では無視できるほど小さくなります。一方、重力トルクは静止していても消えません。そのため低速・準静的な用途が主なロボットアーム(多くの産業用ピック&プレースや協働ロボット)では、慣性・遠心力項を省いて重力補償+PIDだけでも定常偏差と姿勢依存性の大部分が解消され、費用対効果が高い対策になります。
計算トルク法:動力学を丸ごと打ち消す
重力だけでなく M(q) と C(q, q̇) も含めて動力学全体を打ち消すのが計算トルク法(computed torque method、逆動力学制御とも呼ばれます)です。運動方程式の逆演算をリアルタイムで行い、目標の関節加速度が実現されるようにトルクを直接構成します。
計算トルク法:
τ = M̂(q) ( q̈_目標 + Kd*ė + Kp*e ) + Ĉ(q,q̇) q̇ + Ĝ(q)
M̂, Ĉ, Ĝ : 動力学モデルから計算した推定値
e = q_目標 - q, ė = q̇_目標 - q̇
モデルが正確(M̂=M, Ĉ=C, Ĝ=G)なら、この τ を実際の運動方程式に代入すると非線形項がすべて消去され、閉ループは次の単純な線形2次系に帰着します。
モデルが正確な場合の閉ループ誤差方程式:
ë + Kd*ė + Kp*e = 0
→ 非線形・結合項が消え、各関節が独立した
「バネ・ダンパ」的な線形誤差ダイナミクスになる
これは各関節が姿勢に依存しない一定のゲイン Kp, Kd で設計できることを意味します。つまり計算トルク法は、非線形で結合した実機の動力学を、制御則の中で動力学モデルを使って打ち消し、その上に姿勢によらず効く線形PD制御(積分項を持たないP・D構成が基本)を載せる、という二段構えの設計です。
| 方式 | モデルの利用 | 姿勢変化への頑健性 | 計算コスト | 向く場面 |
|---|---|---|---|---|
| 単純PID(関節独立) | 使わない | 低い(姿勢でゲイン最適点が変動) | 最小 | 低速・軽負荷・精度要求が緩い用途 |
| 重力補償付きPID | G(q)のみ推定 | 中(重力起因の偏差はほぼ解消) | 小 | 低〜中速の産業用アーム・協働ロボット |
| 計算トルク法(逆動力学制御) | M(q), C(q,q̇), G(q)全体 | 高(モデル精度に依存するが原理上は姿勢不変) | 大(毎制御周期で行列演算) | 高速・高精度軌道追従、外科手術支援ロボットなど |
モデル誤差とロバスト性:計算トルク法の弱点
計算トルク法の性能は、動力学モデル M̂, Ĉ, Ĝ の精度に直接依存します。実機では負荷(可変ペイロード)、関節の摩擦、アクチュエータの弾性、パラメータ同定誤差により M̂ ≠ M となるのが常態です。モデル誤差があると非線形項は完全には消去されず、残差が外乱として線形誤差方程式に加わります。
M̂ = M + ΔM のようにモデル誤差 ΔM があると、閉ループ誤差方程式は ë + Kd*ė + Kp*e = f(ΔM, ΔC, ΔG, q, q̇, q̈) の形になり、右辺の残留項が外乱として作用します。計算トルク法はこの残留外乱に対しては通常のPD以上の耐性を持たないため、負荷変動が大きい用途では適応制御(パラメータをオンラインで推定)やロバスト制御(スライディングモード制御など)と組み合わせるのが実務的です。計算トルク法は「非線形性を消す設計」であり「モデル誤差に強い設計」ではない、という区別が重要です。
さらに、計算トルク法は毎制御周期で M(q) と C(q, q̇) の評価(行列の構築)を必要とし、自由度が増えるほど計算量が急増します。高い制御周波数(数kHz)を要求するアームでは、この演算を制御周期内に収める実装上の制約が設計を左右します。
使い分けの判断軸
- 非線形の原因: 運動方程式
M(q)q̈ + C(q,q̇)q̇ + G(q) = τの3項がすべて姿勢・速度に依存し関節間で結合するため、関節ごとの独立線形PIDの前提が崩れる。 - 重力補償:
Ĝ(q)をフィードフォワードで加えるだけで、静止時・低速時の定常偏差と姿勢依存性の多くが解消する。費用対効果が高い第一の対策。 - 計算トルク法: モデル全体を使って非線形項を打ち消し、線形なPD誤差方程式
ë+Kd*ė+Kp*e=0に帰着させる。姿勢に依存しない一定ゲインで高速・高精度な追従が可能になる。 - 弱点: モデル誤差は打ち消されず残留外乱になる。計算コストも高い。負荷変動が大きい・モデルが不確かな系では適応制御やロバスト制御との併用を検討する。
- 選定基準: 低速・軽負荷・精度要求が緩ければ単純PIDや重力補償付きPIDで十分。高速・高精度・モデルが既知なら計算トルク法へ。
まとめ
多関節ロボットアームでPIDが単純に効かない根本原因は、運動方程式が M(q)q̈ + C(q,q̇)q̇ + G(q) = τ という姿勢・速度に依存し関節間で結合した非線形動力学だからです。この結合により、ある姿勢で調整したゲインは別の姿勢では最適でなくなり、重力トルクは定常偏差として残り、速い動作では遠心力・コリオリ項が関節間の外乱として顕在化します。対策は二段階に整理できます。まず重力補償・フィードフォワードで動力学の既知部分をあらかじめ打ち消し、PIDの負担を軽くすること。さらに踏み込むなら、計算トルク法で慣性・遠心力・重力の全項をモデルベースで打ち消し、姿勢によらず一定ゲインで効く線形誤差方程式に帰着させることです。ただし計算トルク法の性能はモデル精度に依存し、モデル誤差は残留外乱として残るため、負荷変動や未知パラメータが大きい実機では適応制御・ロバスト制御との併用が必要になります。単純PID・重力補償付きPID・計算トルク法のどれを選ぶかは、要求精度・動作速度・モデルの既知度・演算資源のトレードオフで決まります。
ロボティクス Article
ロボットアームのPID制御と非線形性を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ロボティクス
比較で見る軸
難易度: advanced / カテゴリ: ロボティクス / タグ数: 6
導入後に効く点
重力補償(動力学モデルで重力トルクを事前に打ち消す)とフィードフォワードで、PIDが担う残差を小さくできる。さらに進めると動力学を丸ごと打ち消す計算トルク法(逆動力学制御)に至る。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ロボティクス
- タグ数
- 6
判断チェックリスト
- 自社の用途が「ロボティクス / PID制御」に近いか確認する。
- 強みである「多関節アームは各関節が独立ではなく、慣性・遠心力・コリオリ力・重力を通じて結合した非線形動力学に従うため、関節ごとの単純PIDは姿勢が変わるたびにゲインが合わなくなる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。