본문으로 바로가기


예전에 소개한 적이 있는 투로터입니다. 그때


시스템의 동역학 방정식의 결과가 위와 같았었습니다.


제어입력을 다시 치환하고, 시뮬레이션을 위해 몇몇 인자를 편하게 잡고 보면


위와 같은 형태가 됩니다. 원래 위 투로터시스템의 제어기로 궤환선형화기법을 소개한적이 있습니다. 근데 궤환선형화기법의 제어입력을 보면, 그 제어입력을 도출하기 위해 꽤 많은 요소들을 필요로합니다. 이번엔,

2009/07/07 - [쿼드콥터/Reference] - T-S Fuzzy Modeling
2009/07/20 - [공학기초/Robot] - T-S 퍼지 모델을 이용한 로터리 펜들럼 제어기 설계

에서 소개한 T-S 퍼지 모델을 이용한 제어기의 구성을 한 번 살펴보겠습니다.


일단 y쪽에 -1이라는 상수항이 있어서 얘를 좀 어떻게 하기 위해 위에서처럼 제어입력을 u1에서 u_tild로 변경하겠습니다.


그리고 다시 정리하면 위와 같습니다.


로터리를 이용한 T-S때도 이야기 했지만, T-S퍼지모델은 그 결과가 대부분 위와같은 형태가 됩니다.


이때 선형독립인 함수를 세개를 잡아야겠네요. 그럼 뭐 퍼지규칙은 8개가 되겠지요.


그 g1,g2,g3를 이용해서 상태행렬처럼 표현해본겁니다. 위와같이 표현하면 상수행렬 F를 잡는데 편리합니다.


동작구간을 설정하고


각 함수들의 최소. 최대값을 잡습니다.


각 h들입니다.


히죽... 멤버쉽함수가 만들어지는군요^^


위 식에다 살짝 넣어주면 A, B행렬들이 나타납니다.


각 F행렬들입니다



i번쨰 제어입력이 위와같다면


전체 제어입력은 위와 같을 겁니다. 이를 다시 원 방정식에 대입


하여 정리해볼 수 있습니다.



이때 시스템의 안정도를 높이기 위해 위와같이 출력제한을 겁니다.



위 부등식을 만족하는 양정의행렬 P를 찾아주면 됩니다.


라 하고


양변에 곱하면 위와 같은 선형행렬부득식(LMI)이 나타납니다.


그걸 MATLAB으로 풀어보면 위와같은 제어게인 8개를 얻을 수 있습니다.







음 위 결과를 보시면 대체로 궤환선형화 기법과 비슷한 결과가 나타남을 알 수 있습니다. 뭐. 일부 장점도 보이긴 합니다만, 그리 큰 장점이라고 보긴 어렵구요. 그러나 실제 구현에서는 상상해보면, 꽤 큰 장점이 뭐냐면, 제어입력을 결정할때, 궤환선형화기법처럼 상태나 제어입력자신의 미분치나 혹은 두번 미분, 심지어 3번미분치까지 사용할 필요가 없다는 것입니다. 이는 분명 큰 장점을 가지는 것이겠네요^^


댓글을 달아 주세요

  1. 아규아규 2016.02.11 21:05 신고

    안녕하세요. 하나씩 따라서 공부하고있는 학생입니다. A,B행렬 구하는 부분에서 궁금한게 있습니다. g_10*F_1 , g_20*F_2 에서 g_10 , g_20은 어디서 등장했는지 알 수 있을까요?

    • BlogIcon PinkWink 2016.02.12 09:34 신고

      어디서 등장한 것이 아니라 그렇게 만들어야겠다고 생각했다는 것이 더 정확한 표현입니다. min/max로 이진수 처럼 함수를 확장해가는 것이기 때문에 g1, g2, g3등이 잡히고 그의 min값이 g10, g20, g30이고, max가 g11, g21, g31입니다. 이 값들을 모두 대입해 보시면 원 동역학이 그대로 나오는 것을 확인하실 수 있습니다.

  2. 아규아규 2016.02.18 11:25 신고

    "T-S 퍼지 모델을 기반으로 한Two-Rotor 시스템의 안정화 제어기 설계" 논문도 참고하면서 같은 결과가 나오는지 매트랩을 돌려보고 있습니다. 궁금한점이 2가지가 있는데요,
    출력값을 제한하는 [1 x(0)' ; x(0) X] 부분에서, 초기값 x(0)에 대한 부분을 그냥 zeros(1X6) 행렬로, 1은 eye(1)행렬로 놓고 LMI를 풀면 결과가 PinkWink님이 올려주신 결과랑 다르기도 하고 제가봐도 이상한(-.-) 결과가 나옵니다ㅠㅠ 이 부분을 해결하는데 조언을 얻을 수 있을까요?

    • BlogIcon PinkWink 2016.02.19 10:06 신고

      아이쿠 저런.. 너무 오래되어서 기억이 잘 나지 않네요ㅠㅠ.
      다시 떠올릴려면 시간이 좀 필요한데.. 그러지 못할 듯 합니다.ㅠㅠ. 도움이 못 되엇네요ㅠㅠ

  3. 아규아규 2016.02.18 20:00 신고

    아 그리고 한가지 더 궁금한점이 있는데, PinkWink님이 작성하신 다른 글에 댓글들을 보다가 LMI 푸는법에 관련된 걸 봤습니다. 직접 LMI Editor를 이용해서 하나하나 작업하신다고 하셨는데.. [X*A1'+A1*X+N1'*B1'+B1*N1] < 0
    [X*A2'+A2*X+N2'*B2'+B2*B2] < 0 ......
    이런식으로 하나하나 다 풀어서 하신건지.. 궁금합니다.
    LMI 규칙이 너무 많이나와서ㅠㅠ

    • BlogIcon PinkWink 2016.02.19 10:09 신고

      네.. 저는 MATLAB의 Symbolic 연산을 사용해서 LMI 규칙을 생성하도록 만든 다음.. 그걸 LMI Editor에 붙여 넣었죠..^^ 일의 양으로 보면 가장 간단하고 짧습니다.^^. 단 지나가는 LMI 고수들이 보면 약간 허접해 보인다는 단점이 있을 수 있습니다.^^

  4. 아규아규 2016.02.19 10:14 신고

    아 그렇군요. 초기값 부분은 여러가지 시도를 해보면서 해결해 봐야겠습니다.
    저는 그냥 변수에 A(:,a) 이런식으로 for문을 돌리는데 lmiinfo 상에서 확인해보니 변수개수는 늘어나질 않아서 좋은방법이 없을까 했는데, symbolic 연산이 있다는걸 생각도 못하고 있었네요. 친절한 답변 감사합니다^^

    • BlogIcon PinkWink 2016.02.19 12:47 신고

      symbolic과 eval을 적절히 사용해서 화면에 규칙이 프린트되도록해서 그걸 긁어다가 에디터에 붙여넣는 원시적 방법입니다.ㅠㅠ
      아무튼 좋은 성과 있으시길 바랍니다.^^

  5. 아규아규 2016.02.22 14:56 신고

    매번 질문해서 죄송합니다 ㅠㅠ조언해주신 덕분에 code도 나름 확장성있게 작성되고 시뮬레이션 결과도 나오긴 하는데, 이리저리 변수를 바꾸면서 해결해 보려고 노력해도 답이 잘 보이지 않는 궁금한점 두가지 때문에 다시 댓글을 남기게 됐네요.
    첫번째로, 출력제한 부분에서, Ci = [0 0 1 0 0 0;0 0 0 0 0 1] 인 Ci 행렬변수가 어떤 의미인지 궁금합니다. 제가 이해하기로는 x,y,theta 등 각 변수에 어떤부분을 제어 할 것인가로 생각하고 있는데, 이렇게 보는게 맞는건지 궁금합니다. Ci*X 에서 X는 6X6 사각행렬로 LMI를 풀어야만 했는데..이렇게 풀면서 보니 Ci행렬 의미가 잘 와닿지가 않더라구요..
    또 한가지는 같은 부분인데, 출력제한 부분에서 [X XCi' ; CiX I] 에서 I 앞에 사실 ramda^2 가 붙어있는걸로 봤는데, ramda의 역할이 어떤건지 궁금합니다.
    PinkWink님 글과 여러 논문이랑 책들을 참고하면서 fuzzy 모델링과 제어기 관련 공부하고 있는데 쉽지가 않네요..* 질문 내용 조금 수정했습니다.

    • BlogIcon PinkWink 2016.02.22 14:52 신고

      C 행렬이 n*2인 이유는 제어입력 행렬이 2*1의 크기라서 그렇습니다.^^. 그걸 역산해보시면 행렬의 곱이 성립해야하니까요^^
      그리고 람다의 경우는 음이 되면 안되고 그 부분(흠.. 이제는 명칭도 기억이 가물하네요ㅠㅠ)이 일종의 two-norm이라서 제곱으로 맞춘겁니다. 일단... 제곱으로 하면 됩니다.^^

  6. 아규아규 2016.05.18 18:24 신고

    매번 답글덕분에 많이 배우고 있습니다. Two-rotor 모델을 이용해서 다른방식을 적용해서 LMI를 푸는중인데, 한가지 궁금한점이 생겨서 질문드립니다. 상태공간식으로 A,B 를 표현하셨는데, 그렇다면 이때 출력행렬 C는 어떤형태를 가지는게 좋을까요? 위치제어와 자세제어가 혼합되어 있으니 시작점을 찾기가 어렵네요...
    위에 포스팅하신 글중에 Ci 행렬을 일반적인 출력행렬로 봐도 무방한지 확신이 안서서 여러가지 고민을 하고있습니다.
    단순히 제어입력이 2개니 출력변수 역시 2개를 가질거라고 막연히 생각하고 이리저리 접근해보는 중입니다만.. x는 theta에 의해서 간접적으로 제어가 되니 출력변수를 y, theta로 잡고 해봐도 애매하고.... 출력행렬을 정할때 출력변수를 어떤 것으로..혹은 출력행렬을 어떤식으로 잡는게 좋을까요?

    • BlogIcon PinkWink 2016.05.19 09:55 신고

      네.. 일단 controbility가 성립하도록 선정되어야하며...
      보고싶은 출력이 담겨야겠죠...
      그래서 저는 본문의 글처럼 잡았는데요.