검색결과 리스트
글
강좌 순서
1. MATLAB 각
Window 사용법 [바로가기]
2. M-File을
사용한 기초연산법 및 데이터의 그래픽 출력 [바로가기]
3. 데이터의 3D
출력 [바로가기]
4. 조건문 및
반복문의 사용. 에러대비 [바로가기]
5.
Simulink의 기초 [바로가기]
6.
Simulink의 기초 2 [바로가기]
7. Function 문의 사용 [바로가기]
8. 동역학
시뮬레이션하기 [바로가기]
9. 애니메이션
구현하기 [바로가기]
10. 애니메이션을
이용한 동역학 시뮬레이션하기 [바로가기]
11. LQR
툴박스를 사용하여 제어기 구현하기 [바로가기]
12. GUI
시작하기 - Static, Edit Text 및 Push Button [바로가기]
13. GUI -
Slider 사용하기 [바로가기]
14. GUI -
List Box와 Pop-up Menu [바로가기]
15. GUI -
Check Box와 Radio Button [바로가기]
16. GUI -
종합 예제 [바로가기]
본 강좌에 사용되는 MATLAB은 버젼 7.9.0
(R2009b)을 대상으로 합니다.
위에서와 같이 구현합니다. 아.. 그리고 자료를 만들다가 알았는데 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의 방향이 반대로 잡혀있다는 것을 지금 알았네요..ㅜ.ㅜ
| 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++로 어떻게 구현하냐고 하시는데, 실제로 구현하는 것이 이 블럭입니다. 간단하죠...^^
| 카트의 위치를 변경해 보기 ! |
사실 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의 사용을 설명하는 연재이니 그러려니 생각해 주시기 바랍니다.
'The Robot > MATLAB' 카테고리의 다른 글
| [MATLAB 연재] 13. GUI - Slider 사용하기 (4) | 2010/04/21 |
|---|---|
| [MATLAB 연재] 12. GUI 시작하기 (64) | 2010/04/21 |
| MATLAB figure 창의 변화하는 그래프를 동영상(avi)으로 녹화/저장하기 (18) | 2010/04/08 |
| [MATLAB 연재] 11. LQR 툴박스를 사용하여 제어기 구현하기 (0) | 2010/04/07 |
| [MATLAB 연재] 10. 애니메이션을 이용한 동역학 시뮬레이션하기 (16) | 2010/04/07 |
| [MATLAB 연재] 9. 애니메이션 구현하기 (28) | 2010/04/07 |
| [MATLAB 연재] 8. 동역학 시뮬레이션 하기 (28) | 2010/04/07 |
| [MATLAB 연재] 7. Function 문의 사용 (22) | 2010/03/31 |
test.mdl
MATLAB 09. Animation을 이용한 시뮬레이션.pdf
