- MATLAB
- 1. MATLAB 각 Window 사용법
- MATLAB
- 3. 데이터의 3D 출력
- MATLAB
- 4. 조건문 및 반복문의 사용. 에러대비
- MATLAB
- 5. Simulink의 기초
- MATLAB
- 6. Simulink의 기초 2
- MATLAB
- 7. Function 문의 사용
- MATLAB
- 8. 동역학 시뮬레이션하기
- MATLAB
- 9. 애니메이션 구현하기
- MATLAB
- 13. GUI - Slider 사용하기
- MATLAB
- 16. GUI - 종합 예제
LQR !
LQR(Linear Quadratic Regulation)은 선형 제어 기법 중 하나입니다. 대부분의 자동제어책에 그 내용이 설명되어 있습니다만, 우리는 MATLAB 연재를 진행하는 중이므로, 그냥 MATLAB에서 LQR을 어떻게 구현할 것인지를 이야기하겠습니다. 너무 쉽거든요^^. 왜냐면 MATLAB은 LQR 툴박스를 제공하기 때문이지요...^^ 일단, LQR을 사용하기 전에 우리가 요즘 다루고 있는 카트형 진자 시스템의 동역학(참조)에서
상태행렬로 표현을 해야합니다.
이렇게 말이죠. 행렬의 곱셈을 수행해보시면 아래 위 두 식이 같다는 것을 알 수 있습니다. 이제, 시스템의 상태행렬 A, B를 알게 되었네요.
그리고, 흔히 LQR에서 이야기하는 가중치 행렬을 설정합니다. 애초 상태행렬을 만들때 상태의 순서를 x, dot_x, theta, dot_theta로 잡았으니, 위 Q행렬 대로라면, theta의 가중치를 x보다 5배로 설정해두고 있습니다. R은 제어입력의 크기에 관여합니다. Q, R을 적절히 바꾸면, 제어성능을 어느정도 원하는 대로 이끌어 볼 수 있습니다. 더 알고싶다구요??? 현재 연재내용에서 벗어난다니까요...ㅎㅎ^^
LQR명령은 바로 위와 같이 주면 됩니다. 그러면 제어이득 K가 바로 나옵니다^^
이렇게 해주면 되죠.^^
시뮬링크에 제어기 적용하기 !
방금 구한 제어이득 K를 이제 시뮬레이션에 적용해봐야지요.
위에서와 같이 구현합니다. 아.. 그리고 자료를 만들다가 알았는데 theta의 방향이 음... 반대로 설정되었더군요... 죄송하니다^^ 일단 MATLAB을 연습하는 연재입장에서는 관계없는 내용이지만, 일단 Scope1앞에 Gain에 원래 180/pi가 들어가 있는데 여길 -180/pi로 변경해 주시구요. 에니메이션을 그리던 MATLAB Fcn문 안에 test1(u(1), u(2),u(3), u(4))라고 되어있는 부분을 test1(u(1), -u(2),u(3), u(4))로 변경해주시면 됩니다. 동역학 유도 단계에서 theta의 방향이 반대로 잡혀있다는 것을 지금 알았네요..ㅜ.ㅜ
실제 제어기가 구현되는 것은 위의 부분입니다. 상태(x, dot_x, theta, dot_theta)를 받아와서 제어게인 K와 곱해주면 되지요.
그런데 부궤환이라 -K로 입력하시고, Matrix(K*u)로 설정하시면 됩니다. 많은 분들이 이 제어기를 C나 C++로 어떻게 구현하냐고 하시는데, 실제로 구현하는 것이 이 블럭입니다. 간단하죠...^^
위가 그 결과입니다. 아까도 말씀드렸지만, theta가 ... 반대라는....ㅜ.ㅜ
카트의 위치를 변경해 보기 !
사실 LQR은 상태를 '0'으로 보내는 것이기 때문에 tracking 문제는 아닙니다만, 일단 간단하게 나마 error를 가지고 구현할 수는 있습니다.^^
이렇게 말이지요. 카트의 위치를 error로 바꾸는 것입니다. error = x - x_r 인 거죠. 여기서 x_r이 원하는 카트의 위치, 위에서는 2입니다. 그런데, 연결선을 잘 정리해야겠네요. 공간배치를 고민하지 않았더니.. 선연결이 엉망이네요..ㅜ.ㅜ
일단 sum을 나온 선, 즉 error는 제어게인쪽으로 들어가면 됩니다. 그러니까, error를 '0'으로 하겠다는 거죠. 그리고
sum을 통과하기 전 실제 카트의 위치는 원래 연결되던대로 해 주시면 됩니다.
그리고, 시뮬레이션을 한 번 해보세요^^
Signal Builder를 이용하여 카트의 위치 조절 하기 !
그냥 2로 가라.. 이러면 좀 심심하죠... 이번엔 signal builder를 한번 사용해 보겠습니다.
이렇게 연결해주고, 그리고 더블클릭으로 들어가서
위에서 처럼 만들어 주면 됩니다. 만드는 방법은 정말 편합니다. 마우스로 살짝살짝 움직여 보세요. 아 shift - click 하면, 절점이 만들어 집니다.
시뮬레이션 결과입니다. 왼쪽 그림을 보시면 카트가 +2에서 잠시 있다가 -2로 갔다가 0으로 오는 것을 보실 수 있습니다. 제어기를 좀 더 잘 꾸미시면, 더 좋은 성능을 찾을 수 있으실 겁니다. 위 구동 결과는
입니다. 마지막으로, 요 몇몇 연재는 하나의 주제로 이어져 있었는데요. MATLAB의 사용자체에 초점이 있어서 실제 시뮬레이션을 많이 하는 경우와는 좀 다른 경우도 있고, 효율성이 떨어지는 경우도 있습니다. 그저 MATLAB의 사용을 설명하는 연재이니 그러려니 생각해 주시기 바랍니다.
'Software > MATLAB' 카테고리의 다른 글
[MATLAB 연재] 13. GUI - Slider 사용하기 (8) | 2010.04.21 |
---|---|
[MATLAB 연재] 12. GUI 시작하기 (82) | 2010.04.21 |
MATLAB figure 창의 변화하는 그래프를 동영상(avi)으로 녹화/저장하기 (36) | 2010.04.08 |
[MATLAB 연재] 10. 애니메이션을 이용한 동역학 시뮬레이션하기 (26) | 2010.04.07 |
[MATLAB 연재] 9. 애니메이션 구현하기 (42) | 2010.04.07 |
[MATLAB 연재] 8. 동역학 시뮬레이션 하기 (36) | 2010.04.07 |
[MATLAB 연재] 7. Function 문의 사용 (34) | 2010.03.31 |