operator01.jpg


안녕하세요? 교주 LGS입니다.
이번 강좌에서는 System Identification과 비슷한 Simulink 상의 Parameter Estimation에 대해서 이야기하겠습니다. ^^
System Identification관련 강좌를 읽고 오시면 이번 강좌를 이해하시는데 많은 도움이 될 것입니다요~)

로봇을 만들기 위해서 초등학교 앞 문방구에서 1000원짜리 DC 모터를 하나 샀다고 해봅시다.
모터를 가지고 놀려고 봤더니 아놔!! 1000원짜리 모터라 Datasheet 이런거 없구요 -_-;; 모터와 관련된 각종 상수(Parameter)를 알 수가 없습니다.
(DC 모터에 관한 간단한 설명)
이런 난감한 상황을 탈출하는 방법은?? 넵~ ^^ System Identification Toolbox를 활용하면 되겠죠? o(^o^)o
그런데 잘 생각해보시면 우리는 이미 DC모터의 수학적 모델을 알고 있잖아요~ 
우리가 모르는 것은 DC모터의 각종 상수(모터를 표현하는 수학식의 계수 Parameter)만 모릅니다.
System Model(DC모터를 표현하는 수학식)의 구조를 알고 있다면 Parameter만 찾으면 되므로 
그냥 무작정 맨땅에 해딩하는 식으로 Identification 하는 것 보다 훨씬~ 더 정확하게 System을 Modeling 할 수 있을 겁니다.
위에서 말한 [식의 계수 Parameter를 찾는 것]을 Parameter Estimation이라 그러구요~
Simulink에서 이 Parameter Estimation을 바로~ 할 수가 있다 이말씀입습죠 헤헤

identification03.png   

다시 정리하자면~
System Identification과 Parameter Estimation의 결정적 차이를 한마디로 이야기하자면 Black Box와 Gray Box의 차이입니다.
System Identification의 경우 System이 도대체 어떻게 생겨먹었는지 아예 전혀~ 모르는 상태(Black Box)에서 시작하는 반면에 
Parameter Estimation은 System은 대충 어떻게 생겼는지 아는데 그 System의 계수(Parameter)만 모르는 상태(Gray Box)에서 
주어진 Input과 Output으로부터 Parameter를 찾아내는 거죠~

parameter01.png 

즉 Parameter Estimation은 System Identification의 하위 개념입니다.
아~ 물론 System Identification Toolbox로 바로 System Model을 찾을 수도 있구요
만약 System이 어떻게 생겨먹은 녀석인 대충 아시고 특히 Simulink 상에서 작업중이시라면~
Simulink의 Parameter Estimation 기능을 사용하시면 편하다 이거죠 ^^ 헤헤
바로 실습해보겠습니다.

우선 Parameter Estimation을 위한 Input data와 Output data가 필요합니다.
정지해있는 DC 모터에 1.5V짜리 건전지를 연결한 후 모터의 회전속도(각속도)을 측정하였습니다.
Vin은 Motor에 걸어주는 전압이고, agularVel은 모터의 각속도 입니다.
그래프를 그려 보니 아래처럼 되구요~

parameter03.png

Simulink에서 DC Motor 모델을 그려줍시다.
SimElectronics가 설치되어 있다면 Simulink Library Browser에서 DC Motor Block을 바로 가져다 쓰셔도 되구요
아니면 미분방정식을 통해 유도하신 DC Motor Model을 기본적인 Simulink Block으로 그려주셔도 되요

parameter04.png

(저는 SimElectronics에서 DC Motor Block을 바로 가져다 쓰겠습니다.)

parameter02.png

Simulink Model을 위와 같이 구성해주시구요~ (mdl 파일은 VIP 게시판에 올려 놓았습니다 ^^ LGS_dc_motor.mdl)
입력전압은 Inport(In1) 블럭으로 들어오구요 모터의 각속도는 Outport(Out1) 블럭으로 나갑니다.
Parameter Estimation은 Inport와 Outport를 기준으로 Parameter를 Estimation 하므로 
Simulink 모델에 Inport와 Outport가 반드시 있어야합니다.

자~ 가운데 있는 DC Motor Block을 더블 클릭하시면~

parameter05.png

수정할 수 있는 각종 Motor constant 항목이 뜹니다.
각 항목에 여러분에 찾고자하는 Parameter를 변수로 입력해주세요 
Parameter Estimation이라는 녀석은 실제 측정 데이터와 Simulink상에서 Simulation 해서 얻은 데이터 간의 오차를 최소로 줄여주는 
Parameter를 Optimization Toolbox를  이용해서 찾아주는 녀석이므로 각 Parameter에 대한 초기값이 필요합니다.
MATLAB Command window로 넘어와서 Workspace에 각 Parameter에 해당하는 변수를 생성해주시구요~

parameter06.png
(초기값은 그냥 대충 정했습니다. ^^)
자~ 다시 Simulink로 넘어갑시다요.

parameter07.png

Model Viewer의 메뉴에서 Tool -> Parameter Estimation을 클릭하시면...

parameter08.png

보시는 바와 같이 Control and Estimation Tools Manager 다알로그가 뜹니다.
Parameter Estimation은 좌측의 Tree 메뉴의 항목들을 위에서부터 차례대로 하나씩 설정하면서 진행됩니다.
첫번째로 좌측의 Tree 메뉴에서 Transient Data를 선택후 아래쪽의 New 버튼을 클릭해주세요~ ^^

parameter09.png

그러면 좌측 메뉴에  New Data라는 녀석이 새로 생기구요, 새로 생긴 New Data를 선택하시면...
실제로 측정한 Data들을 지정할 수 있는 창이 뜹니다.

parameter10.png

실제로 측정한 Input Data를 설정해주기위해서 우측의 Input Data 탭에서 Data 칸을 선택하신후 아래쪽의 Import 버튼을 클릭해 주세요.

parameter11.png

MATLAB Workspace에 있는 변수들의 목록이 쭉 뜨구요 
(Import form 항목을 눌러보시면 Workspace에 있는 변수뿐만 아니라 Ecxel 파일, Text 파일도 바로 불러울 수가 있습니다. ^^)
Data Import 다이알로그에서 Vin을 선택후 Import 버튼을 누르면 왼쪽의 메인 다이알로그의 Data 항목이 Vin으로 바뀝니다.
같은 방법으로 Time / Ts 항목도 tout변수를 Import 해주시구요~

parameter12.png

역시 똑같은 방법으로 Output Data Tab의 항목들을 체워줍시다~ o(^o^)o

parameter13.png

자~ 다음으로 왼쪽의 Tree 메뉴에서 Parameter 변수를 지정하는 Variables로 넘어갑니다. 
Variables를 선택하신 후...

parameter14.png

아래쪽 Add 버튼을 폭풍 클릭!!

parameter15.png

Estimation 하고자 하시는 Parameter 5개 C,J,L,R,emf를 모두 선택(C를 선택후 Shift 키를 누른 상태에서 emf를 선택하시면 됩니다.)후
OK 버튼을 눌러줍니다.

parameter16.png

그려면 Variables에 유추하고하는 Parameter들이 다 등록이 되었구요
오른쪽의 Default setting에서 Parameter의 최대/최소 범위도 지정할 수 있고 초기추측값(Initial guess)도 지정할 수 있습니다.
저는 모두 기본값으로 두고 다음으로 넘어 가겠습니다.

다시 오른쪽의 Tree 메뉴에서 Variables 밑에 있는 Estimation을 클릭합니다. (거의 다왔어요 ^^;;)

parameter17.png

그리고 다이얼로그 하단에 있는 New 버튼을 눌러 New Estimation 생성하시구요
왼쪽 Tree 메뉴에서 새로 생긴 New Estimation을 선택하시면

parameter18.png

어떤 측정 Data set을 가지고 Estimation을 할 것이냐? 
어떤 Parameter를 Estimation 할 것인가를 정할 수 있습니다.
Data set 탭에서 New Data 항목을 체크해주시구요~ Parameter 탭으로 넘어가서

parameter19.png

Estimation 하고자 하시는 Parameter를 모두 체크해주세요~ 
아~ 그리고 각 Parameter의 범위를 [0 ~ 무한대]로 설정하였습니다. (Minimum 값을 -Inf(마이너스 무한대)에서 0으로 바꾸어주세요)
생각해보세요 저항값이 마이너스라니!! 이상하잖아요 ^^;; 마이너스 질량? 없죠~ ㅋㅋ

오른쪽 Tree 메뉴에서 New Estimation 바로 밑에 있는 Views를 클릭!! New 버튼을 클릭!! 다시 New Plot을 선택!! 하시면

parameter20.png

여러분이 보고 싶은 여러가지 데이터를 그래프로 손쉽게 보실 수 있습니다. ^^
다시 New Estimation으로 돌아가서 Estimation Tab으로 갑니다.

parameter21.png

드디어 드디어 드디어!! Start 버튼이 나타났습니다 o(^o^)o 저 Start 버튼을 누르시면 Estimation이 시작됩니다.
(Estimation의 진행 상황을 그래프로 보시고 싶으시면 Start 버튼 밑에 있는 Show progress views를 체크하시면 됩니다.)
떨리는 마음으로 Start 버튼을 살포시 눌러봅시다요~ ^^

parameter22.png

처음에는 실제 측정한 Data(회색선)와 Simulink에서 Parameter를 가지고 Simulation한 Data(파란선)가 차이를 많이 보이다가...

parameter23.png

Parameter의 Estimation이 끝난 후에는 (29번 만에 Estimation이 끝났네요)

parameter24.png

(오른쪽의 그래프에서) Simulation 결과와 실제 측정한 data가 거의 차이가 나질 않는 군요 ^^
그래프가 하나로 보이는 것은 너무 Estimation을 잘해서 겹쳐보여서 그렇습니다. ㅋ 그만큼 정확하게 Parameter들을 찾아냈다는 말이되겠습니다.
왼쪽 그래프는 각 Parameter가 계산과정에서 어떻게 변화되었는지를 보여주는 그래프입니다.

MATLAB Workspace를 확인해보시면
parameter25.png

Estimation된 Parameter 값들을 확인할 수 있습니다.
말로 길게 써서 그렇지 직접 해보시면 어려움 없이 Parameter Estimation을 진행할 수 있을거예요 ^^

이상 Parameter Estimation 강좌 끝~ 
다음 시간에 뵈요~ =(=^ㅅ^=)=

profile