Reference Tracking과 Optimal Control · 학습
이번에 배울 내용
안정한 제어기에서도 목표값 오차가 남는 이유를 확인하고, 추종 성능과 제어입력 비용을 비교합니다.
안정성과 목표 추종은 다른 조건
u=−Kx는 원점으로 상태를 보내는 Regulator입니다. 목표값 r을 넣을 때 로 두고 명목 모델의 Steady State 식에서 N을 계산합니다.
안정성은 로 판단하고, 추종값은 Reference 경로까지 포함해 계산합니다.
LQR의 비용을 읽는 방법
상태 편차와 입력 사용량의 비용을 로 둡니다. Q를 키우면 그 상태 편차를 더 비싸게 평가합니다.
이것이 모든 지표를 동시에 개선한다는 뜻은 아닙니다. 서로 단위가 다른 상태는 기준 크기로 정규화하거나 가중치의 단위를 해석해야 합니다.
이번 모델은 상태와 입력을 정규화한 2차 시스템입니다. 과 적절한 가제어성 조건 아래 CARE를 풀어 를 구합니다. 입력이 포화되면 이 선형·무제약 설계의 최적성을 그대로 적용할 수 없습니다.
MATLAB으로 같은 설계 확인하기
Reference Gain은 원하는 Steady State 출력에 맞춰 입력의 크기를 조정합니다. LQR의 상태 Feedback Gain은 상태 오차와 제어 입력에 부여한 비용으로 정해집니다.
같은 Pole, 다른 목표 추종
제어 Pole을 고정하고 Reference 이득만 바꾸어 Steady State 값의 차이를 확인합니다.
import numpy as np
from scipy.signal import place_poles,StateSpace,lsim
from scipy.linalg import solve_continuous_are
import matplotlib.pyplot as plt
A=np.array([[0.,1.],[-2.,-3.]])
B=np.array([[0.],[1.]]);C=np.array([[1.,0.]])
K=place_poles(A,B,[-2.,-4.]).gain_matrix
N=float((-1/(C@np.linalg.solve(A-B@K,B))).item())
print('K:',K,'N:',N);assert np.isclose(N,8)
t=np.linspace(0,5,1001)
for gain in [1.,N]:
_,y,_=lsim(StateSpace(A-B@K,B*gain,C,0),np.ones(len(t)),t)
plt.plot(t,y,label=f'N={gain:g}')
plt.xlabel('Time [s]');plt.ylabel('Position');plt.legend();plt.grid()
P=solve_continuous_are(A,B,np.diag([4.,1.]),np.array([[1.]]))
klqr=B.T@P
print('LQR gain:',klqr,'closed-loop poles:',np.linalg.eigvals(A-B@klqr))
K: [[6. 3.]] N: 7.999999999999995 LQR gain: [[0.82842712 0.41421356]] closed-loop poles: [-1.41421356 -2. ]