EduController

🎛️ 03. 状態フィードバックと極配置(Pole Placement)

状態空間モデルを使うことで、システムの応答特性(安定性、速度、減衰など)を極の配置によって設計できます。本節では、状態フィードバック制御極配置法(pole placement)の理論と設計手法を学びます。


🎯 学習目標


📐 状態フィードバックとは?

制御入力を状態に基づいてフィードバックする構造:

\[u(t) = -K x(t) + r(t)\]

これにより、閉ループ系の極(固有値)を任意に配置することが可能になります。


✅ 閉ループ系の方程式

オリジナル系:

\[\dot{x} = A x + B u\]

制御入力 $u = -Kx + r$ を代入すると:

\[\dot{x} = (A - BK) x + Br\]

🧠 極配置の目的


✅ 極配置可能な条件


📘 設計例

2次系:

\[A = \begin{bmatrix} 0 & 1 \\\\ -2 & -3 \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\\\ 1 \end{bmatrix}\]

目標極(例): $s = -2$, $s = -5$


🧪 Pythonでの極配置(control.place()

import numpy as np
import control

A = np.array([[0, 1], [-2, -3]])
B = np.array([[0], [1]])

# 目標極
desired_poles = [-2, -5]

# フィードバックゲイン計算
K = control.place(A, B, desired_poles)
print("Gain K:", K)

# 閉ループ系の確認
A_cl = A - B @ K
print("Closed-loop eigenvalues:", np.linalg.eigvals(A_cl))

📈 ステップ応答で確認

C = np.array([[1, 0]])
D = np.array([[0]])
sys_cl = control.ss(A_cl, B, C, D)

import matplotlib.pyplot as plt
T, y = control.step_response(sys_cl)
plt.plot(T, y)
plt.title("Step Response of Closed-Loop System")
plt.grid(True)
plt.show()

💡 設計のヒント

•	極を左に配置しすぎると速くなるが、過大ゲインやノイズ感度上昇のリスク
•	PID設計と同様、速度・振動・安定性のトレードオフを意識
•	最小位相系・可制御性・モデル精度が重要

📚 参考資料

•	「現代制御理論入門」森北出版
•	Ogata, Modern Control Engineering
•	Python: control.place(), control.ss(), step_response()