Model Uncertainty와 Robustness · 학습
이번에 배울 내용
한 모델에서 설계한 제어기를 여러 실제 모델과 지연 조건에 적용해 성능이 나빠지는 지점을 찾습니다.
명목 모델과 실제 모델
Plant는 이며, State Feedback Gain은 로 고정합니다. 질량 , 감쇠 , 강성 의 모든 조합을 사용하므로 검사할 모델은 개입니다.
안정성과 성능을 따로 보기
각 모델의 Pole로 안정성을 판단하고, Step Response에서 Steady State 오차와 Settling Time을 비교합니다. 27개 조합의 성능 표는 선택한 값들에서의 결과입니다.
입력 지연과 포화를 적용하기 전 선형 모델의 안정성은 Characteristic Polynomial 로 판단할 수 있습니다. 2차 다항식의 세 계수가 모두 양수이면 Pole의 실수부는 음수입니다. 주어진 구간에서는 세 계수가 모두 양수이므로 구간 전체에서 안정합니다.
응답 속도와 오차는 매개변수에 따라 달라집니다.
MATLAB으로 같은 설계 확인하기
설계한 Gain을 고정하고 Plant의 질량·감쇠·강성만 바꿉니다. 각 조합의 Pole은 안정성을, 응답 곡선은 Overshoot와 Settling Time의 변화를 보여줍니다.
질량이 달라진 실제 시스템
같은 제어기를 유지하고 질량만 바꾸어 Pole과 Time Response의 차이를 비교합니다.
import numpy as np
from scipy.signal import place_poles,StateSpace,lsim
import matplotlib.pyplot as plt
A0=np.array([[0.,1.],[-2.,-3.]])
B0=np.array([[0.],[1.]]);C=np.array([[1.,0.]])
K=place_poles(A0,B0,[-2.,-4.]).gain_matrix;N=8.
t=np.linspace(0,6,1201)
for m in [.7,1.,1.3]:
A=np.array([[0.,1.],[-2/m,-3/m]]);B=np.array([[0.],[1/m]])
poles=np.linalg.eigvals(A-B@K)
_,y,_=lsim(StateSpace(A-B@K,B*N,C,0),np.ones(len(t)),t)
print('mass',m,'poles',poles);plt.plot(t,y,label=f'm={m}')
plt.xlabel('Time [s]');plt.ylabel('Position');plt.legend();plt.grid()
mass 0.7 poles [-1.65155873 -6.91986984] mass 1.0 poles [-2. -4.] mass 1.3 poles [-2.30769231+0.91016612j -2.30769231-0.91016612j]