State Feedback과 Observer

실행 조건

MATLAB · Control System Toolbox

학습 목표

위치만 측정하는 시스템에서 속도를 추정해 제어하고, 추정 속도와 잡음 민감도를 함께 비교합니다.

측정값으로 상태를 구분할 수 있는가

시작 조건

위치[m]·속도[m/s]를 상태로 하는 ẋ=Ax+Bu\dot x=Ax+Bu, y=Cxy=Cx입니다. 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]을 사용합니다.

진행 방법

  1. 가제어 행렬 [B,AB]와 가관측 행렬 [C;CA]를 만들고 rank를 구하세요.
  2. B를 영벡터로 바꾼 경우와 C=[00]C=\left[\begin{array}{cc}0&0\end{array}\right]인 경우를 각각 비교하세요.
  3. 입력이 작용하지 않는 경우와 측정이 없는 경우를 구분해 설명하세요.

남길 결과

  • 세 조건의 두 rank와 가능한 설계의 비교표.
A=[0 1;-2 -3]; B=[0;1]; C=[1 0];
cases={{B,C},{zeros(size(B)),C},{B,zeros(size(C))}}; names={'base','no input','no sensor'};
for i=1:numel(cases)
inputs=cases{i}; b=inputs{1}; c=inputs{2};
fprintf('%s: Controllability rank %d, Observability rank %d\n',names{i},rank(ctrb(A,b)),rank(obsv(A,c)));
end
% TODO: 각 조건에서 가능한 제어·추정 설계를 적으세요.
 

결과 기록·자가 점검

조건
Controllability rank
Observability rank
설계 가능 여부

확인할 점

  • 기준 모델의 두 rank가 모두 2인가?
  • rank가 부족한 모델에 Pole placement를 그대로 적용하지 않았는가?

State Feedback과 Observer를 연결하기

시작 조건

u=−Kx̂+8ru=-K\hat x+8r, r=1r=1입니다. 제어 Pole은 −2,−4, Observer Pole은 −8,−10입니다. x(0)=[10]x(0)=\left[\begin{array}{c}1\\0\end{array}\right], x̂(0)=[00]\hat x(0)=\left[\begin{array}{c}0\\0\end{array}\right]입니다.

진행 방법

  1. K와 L을 계산하고 A−BKA-BK, A−LCA-LC의 고유값을 대조하세요.
  2. 실제 상태와 추정 상태를 동시에 적분해 0–4 s의 위치·속도와 추정 오차를 그리세요.
  3. 추정 오차가 줄어드는 과정과 출력이 목표값으로 가는 과정을 구분하세요.

남길 결과

  • 위치·추정 위치, 속도·추정 속도의 두 그래프와 최종 추정 오차.
K=place(A,B,[-2 -4]); L=place(A',C',[-8 -10])';
a_aug=[A -B*K;L*C A-B*K-L*C]; b_aug=[8*B;8*B]; t=linspace(0,4,801)';
z=lsim(ss(a_aug,b_aug,eye(4),zeros(4,1)),ones(size(t)),t,[1;0;0;0]);
figure; tiledlayout(2,1);
nexttile; plot(t,z(:,1),t,z(:,3),'--'); ylabel('Position [m]'); legend('state','estimate'); grid on
nexttile; plot(t,z(:,2),t,z(:,4),'--'); ylabel('Linear Velocity [m/s]'); xlabel('Time [s]'); legend('state','estimate'); grid on
disp(norm(z(end,1:2)-z(end,3:4)));
% TODO: Controller·Observer의 Pole을 각각 출력해 대조하세요.
 

결과 기록·자가 점검

K
L
제어 Pole
Observer Pole
최종 오차

확인할 점

  • 계산한 K, L을 대입한 A−BKA-BK, A−LCA-LC의 Eigenvalue가 각각 지정한 제어 Pole과 Observer Pole에 일치하는가?
  • t=4t=4 s에서 위치·속도의 추정 오차가 각각 1e-6 m, 1e-6 m/s보다 작은가?

Observer를 빠르게 하면 항상 좋은가

시작 조건

측정에 n(t)=0.02*sin(40*t)를 더합니다. Observer Pole (−8,−10), (−20,−25)를 비교하고 제어기 K는 고정합니다.

진행 방법

  1. 실습용 노트북의 함수에 두 Observer 설정을 넣고 같은 시간축에서 제어입력 u를 비교하세요.
  2. 1 s 이후의 위치 오차 RMS, 속도 오차 RMS, 제어입력 RMS를 각각 구하세요.
  3. 초기 추정 오차의 수렴과 측정 잡음에 대한 반응을 별개로 해석하세요.

남길 결과

  • 제어입력 곡선과 세 RMS의 비교표, 선택할 설정의 근거.
figure; hold on
for poles={[-8 -10],[-20 -25]}
[u,err,rms_u]=noisyObserver(poles{1},A,B,C,K,t);
plot(t,u,'DisplayName',mat2str(poles{1})); disp(poles{1}); disp(err); disp(rms_u);
end
xlabel('Time [s]'); ylabel('u [N]'); legend; grid on
% TODO: 지표를 근거로 Observer 설정을 선택하고 이유를 적으세요.
function [u,err,rms_u]=noisyObserver(poles,A,B,C,K,t)
L=place(A',C',poles)'; aa=[A -B*K;L*C A-B*K-L*C];
bb=[8*B zeros(2,1);8*B L]; inputs=[ones(size(t)) .02*sin(40*t)];
z=lsim(ss(aa,bb,eye(4),zeros(4,2)),inputs,t,[1;0;0;0]);
u=8-z(:,3:4)*K'; keep=t>=1;
err=sqrt(mean((z(keep,1:2)-z(keep,3:4)).^2,1)); rms_u=sqrt(mean(u(keep).^2));
end
 

결과 기록·자가 점검

Observer Pole
위치 오차 RMS [m]
속도 오차 RMS [m/s]
입력 RMS [N]
선택 근거

확인할 점

  • 두 설정의 잡음·Initial Condition·시간 간격이 같은가?
  • 오차와 입력을 한 지표로 혼동하지 않았는가?

공식 예제·데이터