極配置法シミュレーター 戻る
制御工学

極配置法シミュレーター — 状態フィードバック設計

2次の単入力システム ẋ=Ax+Bu に対し、状態フィードバック u=-Kx のゲイン K を極配置法で設計するツールです。システム行列 A と希望する閉ループ極を変えると、必要なゲイン k1・k2、開ループ極、閉ループ応答がリアルタイムで分かり、系の応答を狙いどおりに合わせ込めます。

パラメータ設定
システム行列 A の各成分。A=[[a11,a12],[a21,a22]] が制御前の系の自由運動を決めます。入力ベクトルは B=[0,1] に固定。
a11(A の 1行1列)
a12(A の 1行2列)
a21(A の 2行1列)
a22(A の 2行2列)
希望する閉ループ極。負に大きいほど応答が速くなります。状態フィードバックでここに極を移します。
希望閉ループ極1 p1
希望閉ループ極2 p2
計算結果
フィードバックゲイン k1
フィードバックゲイン k2
開ループ極1 実部
開ループ極2 実部
閉ループ極(設計)
安定判定
s 平面 — 極の移動

複素 s 平面上で、開ループ極を × 印、希望する閉ループ極を ○ 印で表示します。緑に染めた左半平面が安定領域。矢印は状態フィードバックによる極の移動を表します。

ステップ応答比較 — 開ループ vs 閉ループ
フィードバックゲイン k1・k2
理論・主要公式

$$u=-Kx,\qquad \dot x=(A-BK)x$$

状態フィードバック u=-Kx を施すと、系のダイナミクスは A-BK で決まる閉ループ系になる。K=[k1,k2] が設計する2つのゲイン。

$$\det\bigl(sI-(A-BK)\bigr)=s^2-(p_1+p_2)s+p_1p_2$$

閉ループ系の特性多項式を、希望極 p1,p2 から作る多項式に一致させ、係数比較で K を逆算する。

$$k_2=a_{11}+a_{22}-(p_1+p_2),\quad k_1=\frac{p_1p_2-a_{11}a_{22}+a_{11}k_2+a_{12}a_{21}}{a_{12}}$$

B=[0,1] の単入力2次系での明示解。極配置が成り立つには、組 (A,B) が可制御であることが必要(a12≠0)。

極配置法とは

🙋
「極配置法」って制御の授業で出てきたんですけど、ざっくり言うとどういう設計手法なんですか?
🎓
ひとことで言うと「系の極を、設計者が好きな場所へ引っ越しさせる」手法だよ。系の応答の速さや揺れ方は、特性方程式の根=極の位置でほぼ決まる。だから「もっと速く・もっと減衰よく応答してほしい」という要求を、まず「極をこの位置に置きたい」という目標に翻訳する。そして、その極になるようにフィードバックゲイン K を逆算するんだ。このツールは、その K を 2 次系で計算して見せている。
🙋
極を引っ越しさせるって、具体的には何をいじるんですか?左に A のスライダーと希望極のスライダーがありますけど。
🎓
使うのは状態フィードバック u=-Kx だ。状態 x を測って、それに K を掛けた分を入力として戻す。すると系のダイナミクスは元の A から A-BK に変わる。つまり入力で系の「中身」を作り替えているわけだ。左で希望極 p1, p2 をデフォルトの -3, -4 にしておくと、A-BK の極がちょうど -3 と -4 になるように K=[10, 6.5] が計算される。結果カードの k1, k2 を見てごらん。
🙋
k1, k2 はどうやって決まるんですか?魔法みたいに値が出てきますけど。
🎓
魔法じゃなくて係数比較だよ。A-BK の特性多項式を計算すると s² −(a11+a22−k2)s +(…) という形になる。一方、希望極から作る多項式は s² −(p1+p2)s + p1p2。この2つを s の各次数の係数でイコールにすると、k2 と k1 が連立方程式として解ける。2次系だと手計算でも解けるくらい簡単で、k2=a11+a22−(p1+p2)、k1 は a12 で割る式になる。これがアッカーマンの公式の最小バージョンだと思っていい。
🙋
a12 で割るってことは、a12 がゼロだとマズいですよね?試しに a12 を 0 にすると「配置不可」って出ました。
🎓
そこが核心だ。a12=0 のとき、この系は不可制御になる。B=[0,1] の入力は状態 x2 だけを直接押すんだけど、a12=0 だと x2 の動きが x1 に伝わらない。つまり x1 のモードに入力がまったく届かない。そのモードの極は K をどう選んでも動かせないから、極配置は破綻する。だから極配置の前提として、まず系が可制御かを必ず確認するんだ。可制御なら、極は複素平面のどこにでも好きに置ける。
🙋
なるほど。じゃあ可制御なら、極をうんと左に置いて超高速にしちゃえば最強の制御系ですか?
🎓
気持ちは分かるけど、それは罠だよ。極を左に置くほど応答は速くなるけど、その分フィードバックゲイン K が大きくなる。K が大きいと制御入力 u がドカンと跳ね上がって、モーターやバルブが飽和したり、センサーのノイズを増幅して系がガタガタになったりする。実務では減衰比 0.7 くらいを目安に、整定時間や行き過ぎ量の仕様から「ちょうど良い速さ」を逆算する。下のステップ応答グラフで p1, p2 を動かすと、速くしすぎたときの暴れ方が見えるよ。極配置は「速ければ勝ち」ではなく「狙いどおりに置く」のが本質なんだ。

よくある質問

極配置法は、状態フィードバック u=-Kx のゲイン K を選んで、閉ループ系 A-BK の極(固有値)を設計者が指定した希望の位置にぴったり移す手法です。極の位置が応答の速さ・減衰・安定性を決めるので、応答仕様を「極の場所」に翻訳して K を逆算する、という設計の流れになります。対象が可制御であれば、極は複素平面上のどこにでも自由に配置できます。
閉ループ行列 A-BK の特性多項式 det(sI-(A-BK)) と、希望極 p1,p2 から作る多項式 (s-p1)(s-p2)=s²-(p1+p2)s+p1p2 を、s の各次数の係数で一致させます。本ツールの2次系では、この係数マッチングから k2=a11+a22-(p1+p2)、k1=(p1p2-a11a22+a11k2+a12a21)/a12 が得られます。これがアッカーマンの公式や係数比較法と呼ばれる手順の最小例です。
極を任意に配置できる条件は、対象システムの組 (A,B) が可制御であることです。可制御でないモードがあると、そのモードの極は K でいくら頑張っても動かせません。本ツールの式では a12 がゼロに近いと k1 の計算で分母がゼロになり配置不可になります。これは入力 u が状態の一部にしか効かず、その方向のモードが不可制御になっているためです。
閉ループ極の実部が負であれば安定、負に大きいほど応答は速くなります。ただし極を左に置くほどフィードバックゲイン K が大きくなり、制御入力が増えてアクチュエータが飽和したり、測定ノイズを増幅したりします。実務では「必要十分な速さ」に留め、減衰比 0.7 前後、整定時間や行き過ぎ量の仕様から逆算して極を決めます。速ければ良いというものではありません。

実世界での応用

倒立振り子・台車系の安定化:制御工学の定番である倒立振り子は、放っておくと倒れる不安定な系です。状態は「台車位置・速度・振り子角度・角速度」で、開ループ極のひとつが右半平面(不安定)にあります。極配置法で全ての極を左半平面に移すよう K を設計すれば、台車を押す力だけで振り子を直立させられます。本ツールの2次系は、その「不安定極を安定領域へ引っ越しさせる」操作を最小構成で体験するものです。

サーボモーター・位置決め機構:工作機械や半導体製造装置のステージ位置決めでは、「指令にどれだけ速く・行き過ぎなく追従するか」が生産性を左右します。応答仕様(整定時間・オーバーシュート)を減衰比と固有角周波数に翻訳し、それを満たす閉ループ極を決めて K を求めます。極配置は、要求仕様を直接ゲインに落とし込める点で現場で扱いやすい手法です。

ドローン・航空機の姿勢制御:マルチコプターの姿勢ダイナミクスは複数の状態を持ち、機体によっては開ループで振動的・不安定です。各軸について可制御性を確認したうえで極配置やLQRで状態フィードバックを設計し、ロール・ピッチ・ヨーの応答を素早く減衰よく整えます。風外乱への過敏さを避けるため、極を置きすぎないゲイン調整が重要になります。

現代制御の教育・設計フローの起点:極配置はLQRやオブザーバ設計の前段として、状態フィードバックの考え方を学ぶ標準的な題材です。MATLAB の place / acker、Python python-control の place など、現場のツールチェーンにも極配置関数が標準で備わっています。観測器(オブザーバ)の極設計も、同じ係数マッチングを双対系に適用したものです。

よくある誤解と注意点

まず多いのが、「極配置は可制御性と無関係に常にできる」と思い込むことです。極を任意の位置に配置できる保証があるのは、組 (A,B) が可制御なときに限ります。不可制御なモードが含まれていると、その極は K でまったく動かせません。たまたまそのモードが安定なら実害は小さい(可安定)ですが、不可制御かつ不安定なモードがあると、状態フィードバックではどうやっても安定化できません。本ツールで a12 を 0 にすると配置不可になるのは、まさにこの不可制御の状況を再現しています。極配置の前に、必ず可制御性を確認してください。

次に、「閉ループ極を左に置けば置くほど良い制御系になる」という誤解です。極を左へ動かすほど応答は速くなりますが、それに比例してフィードバックゲイン K が大きくなります。ゲインが大きいと、わずかな状態誤差に対して制御入力 u が過大になり、アクチュエータが飽和して設計どおりの線形挙動から外れます。さらにセンサーの測定ノイズが K 倍に増幅され、入力がガタガタに暴れます。「速さ」と「入力の大きさ・ノイズ感度」はトレードオフであり、極は仕様を満たす範囲で最も穏当な位置に置くのが鉄則です。

最後に、「極配置だけで制御系が完成する」と考えてしまう点。極配置は状態 x が全て測定できることを前提にしています。実際には全状態を直接測れないことが多く、その場合はオブザーバ(状態推定器)を併用します。また、極配置は応答の「形」は決められますが、定常偏差をゼロにする積分動作や、外乱・モデル誤差への頑健性は別途考える必要があります。極配置は強力な出発点ですが、実機ではオブザーバ・積分器・ロバスト性の検討と組み合わせて初めて使える制御系になります。

使い方ガイド

  1. システム行列 A の要素(a11, a12, a21, a22)をスライダーで設定します。例えば倒立振子の場合、a12=1(位置から速度への遷移)、a21=9.8(重力加速度)などです
  2. 希望する閉ループ極の実部と虚部を入力フィールドで指定します。例:-2±1.5j の場合、応答時間定数 1/2 秒で振動的に収束します
  3. シミュレーターが可制御性を確認してから、Ackermann の公式または Sylvester 方程式によりフィードバックゲイン k1・k2を自動計算し、ステップ応答と極配置図をリアルタイム表示します

具体的な計算例

ボール&ビーム系(m=0.1kg, L=0.5m)で A=[0, 1; 4.9, 0]、希望閉ループ極を-1±0.8j に設定する場合:特性方程式 s²+2s+1.64=0 から、状態フィードバック K=[0.84, 0.2] が求まります。このゲインを適用すると、0.5秒以内にビーム角度が0.1rad のステップ入力に収束し、オーバーシュート約15%で実現できます

実務での注意点

  1. 可制御性判定:ランク(controllability matrix)=2 であることを確認してください。行列 [B, AB] の行列式が0なら極配置は不可能です
  2. センサノイズと実装誤差を想定し、閉ループ極の実部を -3~-10 rad/s 範囲に設定するのが制御工学の実務標準です。-100 rad/s 以下は計算丸め誤差と高周波ノイズ増幅を招きます
  3. DC サーボモーターやロボット関節では、フィードバックゲイン k2 が速度ダンピング係数に対応します。k2<0.05 では不安定振動が生じやすいため、設計後に小信号実験で調整してください