Reference Tracking과 Optimal Control

실행 조건

MATLAB · Control System Toolbox

학습 목표

안정한 제어기에서도 목표값 오차가 남는 이유를 확인하고, 추종 성능과 제어입력 비용을 비교합니다.

목표값을 따라가도록 Reference 이득 정하기

시작 조건

A=[01−2−3]A=\left[\begin{array}{cc}0&1\\-2&-3\end{array}\right], B=[01]B=\left[\begin{array}{c}0\\1\end{array}\right], C=[10]C=\left[\begin{array}{cc}1&0\end{array}\right], K=[63]K=\left[\begin{array}{cc}6&3\end{array}\right], r=1r=1, x(0)=0입니다.

진행 방법

  1. N=1N=1, N=8N=8을 각각 넣어 같은 시간축에서 Unit Step을 계산하고 응답과 Steady State 출력값을 나란히 기록하세요.
  2. 0=(A−BK)xss+BNr0=(A-BK)x_{ss}+BNr에서 r=1r=1일 때 xssx_{ss}를 N의 식으로 구하세요. yss=Cxssy_{ss}=Cx_{ss}를 이용해 yss=1y_{ss}=1을 만족하는 N을 구하고 계산 과정을 남기세요.
  3. 직접 구한 N과 두 응답의 최종값을 대조해 Reference Gain이 바꾼 값을 설명하세요.

남길 결과

  • 두 Step 응답과 Steady State 값, N을 구한 식.
A=[0 1;-2 -3]; B=[0;1]; C=[1 0]; K=place(A,B,[-2 -4]);
N=-1/(C*((A-B*K)\B)); disp(K); disp(N); assert(abs(N-8)<1e-10);
t=linspace(0,5,1001)'; figure; hold on
for gain=[1 N]
y=lsim(ss(A-B*K,B*gain,C,0),ones(size(t)),t);
plot(t,y,'DisplayName',sprintf('N=%g',gain));
end
xlabel('Time [s]'); ylabel('Position'); legend; grid on
 

결과 기록·자가 점검

N
Steady State 값
Closed-loop Pole

확인할 점

  • 직접 계산한 Steady State 출력값이 각 시뮬레이션의 최종값과 일치하는가?
  • N을 바꾸어도 Closed-loop Pole은 같은가?

출력 오차와 입력 비용의 절충

시작 조건

Q=diag(q,1)Q=\mathrm{diag}(q,1), q∈{1,25}q\in\{1,25\}이며 R=[1]R=\left[\begin{array}{c}1\end{array}\right]입니다. x(0)=[10]x(0)=\left[\begin{array}{c}1\\0\end{array}\right], r=0r=0입니다.

진행 방법

  1. 각 Q의 CARE를 풀고 K=R−1B⊤PK=R^{-1}B^\top P를 계산하세요.
  2. 같은 시간축의 위치와 제어입력을 그리세요.
  3. 위치 오차 제곱의 적분과 입력 제곱의 적분을 별도로 비교하세요.

남길 결과

  • 위치·입력 그래프와 두 적분값의 비교표.
figure; hold on
for q=[1 25]
[Kq,P]=lqr(A,B,diag([q 1]),1);
x=initial(ss(A-B*Kq,zeros(2,1),eye(2),zeros(2,1)),[1;0],t); u=-x*Kq';
disp(q); disp(Kq); disp([trapz(t,x(:,1).^2) trapz(t,u.^2)]);
plot(t,x(:,1),'DisplayName',sprintf('q=%g',q));
end
xlabel('Time [s]'); ylabel('Position'); legend; grid on
% TODO: 제어입력 그래프와 Pole을 추가하세요.
 

결과 기록·자가 점검

q
K
위치 오차 적분
입력 비용

확인할 점

  • 두 Q가 모두 양의 정부호이고 R>0R>0인가?
  • A−BKA-BK의 모든 Pole 실수부가 음수인가?

모델 오차가 있을 때의 목표 추종

시작 조건

설계는 명목 B로 하고, 실제 입력 이득만 Bactual=gBB_{\mathrm{actual}}=gB, g∈{.8,1,1.2}g\in\{.8,1,1.2\}로 바꿉니다. K=[63]K=\left[\begin{array}{cc}6&3\end{array}\right], N=8N=8, r=1r=1입니다.

진행 방법

  1. 각 실제 모델의 Pole과 Step 최종값을 구하세요.
  2. 명목 모델에서 계산한 N이 모든 실제 모델에서도 목표값을 정확히 맞추는지 확인하세요.
  3. Reference 이득 조정과 오차 적분 Feedback의 역할을 구분하세요.

남길 결과

  • 세 응답 곡선과 최종값·오차 표.
K=[6 3]; figure; hold on
for g=[.8 1 1.2]
Ba=g*B; Acl=A-Ba*K; steady=-C*(Acl\(Ba*8));
y=lsim(ss(Acl,Ba*8,C,0),ones(size(t)),t); disp(g); disp(eig(Acl)); disp(steady);
plot(t,y,'DisplayName',sprintf('g=%g',g));
end
xlabel('Time [s]'); ylabel('Position'); legend; grid on
% TODO: 오차의 원인과 오차 적분 Feedback의 역할을 설명하세요.
 

결과 기록·자가 점검

입력 이득
Pole
최종값
추종 오차

확인할 점

  • Feedback 항과 Reference 항 모두 실제 B_actual에 곱해졌는가?
  • 최종값을 계산하기 전에 안정성을 확인했는가?

공식 예제·데이터