Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

lqg

선형-2차-가우스(LQG) 설계

구문

reg = lqg(sys,QXU,QWV)
reg = lqg(sys,QXU,QWV,QI)
reg = lqg(sys,QXU,QWV,QI,'1dof')
reg = lqg(sys,QXU,QWV,QI,'2dof')
reg = lqg(___,'current')
[reg,info] = lqg(___)

설명

reg = lqg(sys,QXU,QWV)는 플랜트의 상태공간 모델 sys와 가중 행렬 QXUQWV가 주어진 경우, 최적의 선형-2차-가우스(LQG) 조절기 reg를 계산합니다. 동적 조절기 reg는 측정값 y를 사용하여 0 값 부근에서 y를 조절하는 제어 신호 u를 생성합니다. 양의 피드백을 사용하여 이 조절기를 플랜트 출력 y에 연결합니다.

LQG 조절기는 다음 비용 함수를 최소화합니다.

J=E{limτ1τ0τ[xT,uT]Qxu[xu]dt}

여기에는 다음 플랜트 방정식이 적용됩니다.

dx/dt=Ax+Bu+wy=Cx+Du+v

여기서 공정 잡음 w와 측정 잡음 v는 다음과 같은 공분산을 갖는 가우스 백색 잡음입니다.

E([wv][w'v'])=QWV

reg = lqg(sys,QXU,QWV,QI)는 설정점 명령 r과 측정값 y를 사용하여 제어 신호 u를 생성합니다. reg는 y가 명령 r을 추종하도록 하는 적분 동작을 갖습니다.

LQG 서보 제어기는 다음 비용 함수를 최소화합니다.

J=E{limτ1τ0τ([xT,uT]Qxu[xu]+xiTQixi)dt}

여기서 xi는 추종 오차 r - y의 적분입니다. MIMO 시스템의 경우 r, y, xi는 길이가 같아야 합니다.

reg = lqg(sys,QXU,QWV,QI,'1dof')는 입력으로 [r ; y]가 아니라 e = r - y를 받는 1자유도 서보 제어기를 계산합니다.

reg = lqg(sys,QXU,QWV,QI,'2dof')LQG(sys,QXU,QWV,QI)와 동일하며, 위에서 표시된 2자유도 서보 제어기를 생성합니다.

reg = lqg(___,'current')는 이산시간 시스템에 대해 LQG 조절기를 계산할 때 x[n|n]을 상태 추정값으로 사용하는 "현재" 칼만 추정기를 사용합니다.

[reg,info] = lqg(___)는 위에 열거된 모든 구문에서 제어기 이득 행렬과 추정기 이득 행렬을 구조체 info로 반환합니다. 예를 들어, 제어기 이득과 추정기 이득을 사용하여 제어기를 관측기 형식으로 구현할 수 있습니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

예제

선형-2차-가우스(LQG) 조절기와 서보 제어기 설계

이 예제에서는 다음의 시스템에 대해 선형-2차-가우스(LQG) 조절기, 1자유도 LQG 서보 제어기, 2자유도 LQG 서보 제어기를 설계하는 방법을 보여줍니다.

플랜트에는 3개의 상태(x), 2개의 제어 입력(u), 3개의 임의의 입력(w), 1개의 출력(y), 출력에 대한 측정 잡음(v), 그리고 다음과 같은 상태 및 측정 방정식이 있습니다.

dxdt=Ax+Bu+wy=Cx+Du+v

여기서는 다음이 성립됩니다.

A=[010001100]B=[0.31010.30.9]C=[1.91.31]D=[0.530.61]

시스템에는 다음과 같은 잡음 공분산 데이터가 있습니다.

Qn=E(wwT)=[420210001]Rn=E(vvT)=0.7

조절기의 경우, 다음 비용 함수를 사용하여 조절 성능과 제어 노력 사이의 상호 절충을 정의합니다.

J(u)=0(0.1xTx+uT[1002]u)dt

서보 제어기의 경우, 다음 비용 함수를 사용하여 추종기 성능과 제어 노력 사이의 상호 절충을 정의합니다.

J(u)=0(0.1xTx+xi2+uT[1002]u)dt

이 시스템에 대한 LQG 제어기를 설계하려면 다음을 수행하십시오.

  1. MATLAB 명령 창에 다음을 입력하여 상태공간 시스템을 만듭니다.

    A = [0 1 0;0 0 1;1 0 0];    
    B = [0.3 1;0 1;-0.3 0.9];
    C = [1.9 1.3 1];  
    D = [0.53 -0.61];
    sys = ss(A,B,C,D);

  2. 다음 명령을 입력하여 잡음 공분산 데이터 및 가중 행렬을 정의합니다.

    nx = 3;    %Number of states
    ny = 1;    %Number of outputs
    Qn = [4 2 0; 2 1 0; 0 0 1];
    Rn = 0.7;
    R = [1 0;0 2]
    QXU = blkdiag(0.1*eye(nx),R);
    QWV = blkdiag(Qn,Rn);
    QI = eye(ny);

  3. 다음 명령을 입력하여 LQG 조절기를 형성합니다.

    KLQG = lqg(sys,QXU,QWV)
    이 명령은 다음 LQG 조절기를 반환합니다.
    A = 
               x1_e    x2_e    x3_e
       x1_e  -6.212  -3.814  -4.136
       x2_e  -4.038  -3.196  -1.791
       x3_e  -1.418  -1.973  -1.766
     
    B = 
                 y1
       x1_e   2.365
       x2_e   1.432
       x3_e  0.7684
     
    C = 
                x1_e       x2_e       x3_e
       u1   -0.02904  0.0008272     0.0303
       u2    -0.7147    -0.7115    -0.7132
     
    D = 
           y1
       u1   0
       u2   0
     
    Input groups:              
           Name        Channels
        Measurement       1    
                               
    Output groups:             
          Name      Channels   
        Controls      1,2      
                               
    Continuous-time model.

  4. 다음 명령을 입력하여 1자유도 LQG 서보 제어기를 생성합니다.

    KLQG1 = lqg(sys,QXU,QWV,QI,'1dof')
    이 명령은 다음 LQG 서보 제어기를 반환합니다.
    A = 
               x1_e    x2_e    x3_e     xi1
       x1_e  -7.626  -5.068  -4.891  0.9018
       x2_e  -5.108  -4.146  -2.362  0.6762
       x3_e  -2.121  -2.604  -2.141  0.4088
       xi1        0       0       0       0
     
    B = 
                  e1
       x1_e   -2.365
       x2_e   -1.432
       x3_e  -0.7684
       xi1         1
     
    C = 
              x1_e     x2_e     x3_e      xi1
       u1  -0.5388  -0.4173  -0.2481   0.5578
       u2   -1.492   -1.388   -1.131   0.5869
     
    D = 
           e1
       u1   0
       u2   0
     
    Input groups:           
        Name     Channels   
        Error       1       
                            
    Output groups:          
          Name      Channels
        Controls      1,2   
                            
    Continuous-time model.

  5. 다음 명령을 입력하여 2자유도 LQG 서보 제어기를 생성합니다.

    KLQG2 = lqg(sys,QXU,QWV,QI,'2dof')
    이 명령은 다음 LQG 서보 제어기를 반환합니다.
    A = 
               x1_e    x2_e    x3_e     xi1
       x1_e  -7.626  -5.068  -4.891  0.9018
       x2_e  -5.108  -4.146  -2.362  0.6762
       x3_e  -2.121  -2.604  -2.141  0.4088
       xi1        0       0       0       0
     
    B = 
                 r1      y1
       x1_e       0   2.365
       x2_e       0   1.432
       x3_e       0  0.7684
       xi1        1      -1
     
    C = 
              x1_e     x2_e     x3_e      xi1
       u1  -0.5388  -0.4173  -0.2481   0.5578
       u2   -1.492   -1.388   -1.131   0.5869
     
    D = 
           r1  y1
       u1   0   0
       u2   0   0
     
    Input groups:              
           Name        Channels
         Setpoint         1    
        Measurement       2    
                               
    Output groups:             
          Name      Channels   
        Controls      1,2      
                               
    Continuous-time model.

  • lqg는 연속시간 플랜트와 이산시간 플랜트 모두에 사용할 수 있습니다. 이산시간의 경우, lqg는 기본적으로 x[n|n-1]을 상태 추정값으로 사용합니다. x[n|n]을 상태 추정값으로 사용하고 최적의 LQG 제어기를 계산하려면 'current' 입력 인수를 사용하십시오. 상태 추정기에 대한 자세한 내용은 kalman을 참조하십시오.

  • LQG 조절기를 계산하기 위해 lqglqrkalman 명령을 사용합니다. 서보 제어기를 계산하기 위해 lqglqikalman 명령을 사용합니다.

  • 조절기를 더 유연하게 설계하려는 경우 lqr, kalmanlqgreg 명령을 사용할 수 있습니다. 서보 제어기를 더 유연하게 설계하려는 경우에는 lqi, kalmanlqgtrack 명령을 사용할 수 있습니다. 이러한 명령을 사용하는 방법과 언제 사용하는지에 대한 자세한 내용은 조절을 위한 선형-2차-가우스(LQG) 설계 항목과 적분 동작을 갖는 서보 제어기의 선형-2차-가우스(LQG) 설계 항목을 참조하십시오.

알고리즘

제어기 방정식은 다음과 같습니다.

  • 연속시간의 경우:

    dxe=Axe+Bu+L(yCxeDu)u=KxxeKixi

  • 이산시간의 경우:

    x[n+1|n]=Ax[n|n1]+Bu[n]+L(y[n]Cx[n|n1]Du[n])

    • 지연 추정기:

      u[n]=Kxx[n|n1]Kixi[n]

    • 현재 추정기:

      u[n]=Kxx[n|n]Kixi[n]Kww[n|n]=Kxx[n|n1]Kixi[n](KxMx+KwMw)yinn[n]

      yinn[n]=y[n]Cx[n|n1]Du[n]

여기서 각각은 다음을 나타냅니다.

  • A, B, C, D는 LQG 조절기 reg의 상태공간 행렬입니다.

  • xi는 추종 오차 r - y의 적분입니다.

  • Kx, Kw, Ki, L, Mx, Mwinfo로 반환되는 제어기 이득 행렬과 추정기 이득 행렬입니다.

참고 항목

| | | | | |

R2006a 이전에 개발됨