MATLAB 은 일종의 소프트웨어 플랫폼이라고 볼 수가 있어서 매트랩 툴박스들은 MATLAB 위에서만 실행됩니다. 따라서 시뮬링크를 사용한다라고 해도 매트랩을 잘 다루어야 시뮬링크를 조금 더 효율적으로 사용할 수 있습니다.

요즘 저는 많은 차량용 로직들을 Simulink Stateflow 로 설계하고 Embedded Coder 를 사용하여 C 코드를 생성해서 개발 보드에 탑재하는 업무를 하고 있습니다. Simulink 를 사용하기 위해서는 샘플레이트를 비롯하여 다양한 configuration 을 하게 되고~ Embedded Coder 를 사용할 때 역시도 마찬가지로 설정 할 것들이 많이 있습니다.

이런 설정들은 그때그때 달라지기도 하지만 사용하는 MCU 가 동일하다면 그리 크게 달라지지는 않습니다. 따라서 한번만 설정하고 해당 설정을 저장해 놓고 사용하는 것이 효율적일 것입니다.

오늘은 MATLAB 스크립트를 사용하여 Simulink configuration 을 하는 방법을 소개하려 합니다. Simulink configuration은 Simulink 모델창에서 Simulation -> Model Configuration Parameters 를 선택하거나 Ctrl + E 를 누르면 실행 됩니다.

그 중에서 아래와 같이 All Parameters 탭에서 메뉴들을 검색 할 수 있는데~ 아래 그림과 같이 해당 메뉴에 대한 Command-Line Name 을 확인 할 수 있습니다. Simulink configuration 내용을 스크립트로 자동화 하고 싶은 경우에 Command-Line Name을 사용하면 됩니다.

Simulink 모델의 기본적인 설정값들은 아래 주소의 메뉴얼을 확인해 보시기 바랍니다.

https://kr.mathworks.com/help/simulink/slref/model-parameters.html

Embedded Coder 를 사용하여 코드 생성을 하기 위해서는 Simulink Solver 셋팅을 Fixed-step discrete (no continuous states) 로 설정하게 되는데~

해당 설정을 하기 위해서는 아래와 같이 명령어를 써주면 됩니다.

set_param(gcs, 'Solver', 'FixedStepDiscrete')

Code Generation 시 Embedded Coder 를 사용하기 위해서는 System target file 설정을 ert.tlc 로 하게 되는데~

이러한 과정을 MATLAB code 로 어떻게 설정하는지를 확인하기 위해서는 아래와 같이

“All Parameters” 에서 “target file” 등으로 검색을 해서 “Command-Line Name” 을 알아 낸 후에 설정해 주면 됩니다.

예로 든 Embedded Coder 를 사용하기 위한 설정은 아래와 같습니다.

set_param(gcs, 'SystemTargetFile', 'ert.tlc')

해당 MATLAB 명령어 설정을 해 본 후에 Simulink configuration 창을 확인 해보면 해당 설정들이 바뀐 것을 확인 할 수 있습니다.



요즘 자동차 분야에서 제어기를 설계할때 MATLAB 의 Simulink 제품을 많이들 사용합니다. 제어기 사양서는 state machine 으로 구성되기 때문에 주로 Stateflow 를 사용하여 설계되고 Embedded Coder 등을 사용하면 시뮬레이션 후에 코드 생성까지 되기 때문에 기존에 시뮬레이션 후 C 코드를 다시 작성하고 하는 번거로움을 줄일 수 있습니다.

저도 회사에서 과제를 하면서 MATLAB 으로 알고리즘 시뮬레이션을 하고 Embedded Coder 를 사용하여 C 코드를 생성해서 사용한 경험이 있고~ 나름 신뢰할만한 코드가 나와서 편리하다는 생각을 많이 합니다.

그래서 일단 오늘은 Simulink 를 시작하는 방법에 대해 소개하려 합니다.

1. Simulink 실행

Simulink 를 사용하기 위해서는 당연히 MATLAB 과 Simulink가 설치되어 있어야 겠고 MATLAB 명령창에서 simulink 라고 명령하면 Simulink Start Page 가 나오게 됩니다. MATLAB 은 대소문자를 구별하므로 소문자로 명령어를 입력하시기 바랍니다. 물론 요즘은 툴이 좋아져서 정정 제안도 해주기 때문에 실수를 해도 별 문제가 없습니다.

위 소개처럼 명령어를 사용하는 방법 말고도 UI 를 클릭해서 실행하는 방법이 있는데 아래 그림과 같이 Simulink 버튼을 클릭해 주면 마찮가지로 Simulink Start Page 가 나오게 됩니다.

2. 어떤 어플을 설계 하느냐에 따라 다양한 방식으로 새 프로젝트를 시작할 수 있는데 저는 그냥 예전 스타일로 보통 Blank Model 로 시작하는 편입니다.

이렇게 Blank Model 을 만들었으면 이제 Simulink Library Browser 를 열어서 각 구성 요소들을 가져다 사용하면 됩니다. Simulink Library Browser 를 열기 위해서는 아래 그림과 같이 View -> Library Browser 를 클릭하거나 Ctrl+Shift+L 단축키를 눌러주거나 또는 MATLAB 명령창에 slLibraryBrowser 라는 명령어를 타이핑 해도 됩니다.

3. Simulink Library Browser 에서 사용하고자 하는 Block 들을 찾아서 배치해야 되는데~ 목록을 하나 하나 클릭하면서 어떤 Block 이 있는지를 확인하고 배치 할 수도 있고 블록의 대략적인 이름을 아는 경우에는 아래와 같이 검색을 통해 블록을 선택할 수도 있습니다.

위와 같이 Simulink Library Browser 에서 검색을 통해 모델을 일일이 찾아서 Drag & Drop 해서 붙이는 경우 노력이 많이 들기 때문에 Simulink 모델링에 익숙하신 분들은~

아래와 같이 model 창에서 블록을 놓고 싶은 위치를 클릭한 후에 블록명을 타이핑 하면 해당 이름의 블록 목록이 나오고

클릭하면 바로 모델창에 해당 블록이 입력 됩니다.

지금까지 수동으로 Simulink 시작하는 방법에 대해 소개를 했는데 ~ MATLAB 제품들은 굉장히 많은 부분들을 자동화 할 수 있는 방법들을 제공해 줍니다. 아래 포스팅에서 소개한 바와 같이 MATLAB 코드를 사용하여 Simulink 모델링을 자동화 할 수 있습니다.

http://iamaman.tistory.com/1482

Simulink 를 조금더 편리하게 사용하기 위해서는 이러한 자동화 방법에 대해 공부를 해 보시는 것도 좋을 것 같네요.



많은 공학도 분들이 MATLAB 의 사용법에 대해서 공부하실 거라고 생각합니다. MATLAB 은 아시는 바와 같이 매우 비싼 툴이고 업데이트를 위한 라이센스 유지비용 역시도 1년에 20~30 % 정도를 내는 걸로 알고 있습니다. 저는 학교에서 MATLAB 수업 과목의 조교를 했었고~ 이런 경험을 바탕으로 MATLAB 사용 방법을 소개하기 위해서 본 블로그를 만들었습니다. 개인적으로도 회사에서 MATLAB 을 사용한 업무를 하지만, 일반적으로 학생들이 학교에서 배우는 MATLAB 을 사용한 알고리즘 개발까지는 사실 MATLAB을 사용할 필요가 없다고 생각합니다.

제 블로그에서 소개했었던 Python, Scilab, Octave 를 비롯해서 매틀랩을 대신하여 알고리즘을 개발해 볼 수 있는 오픈소스 또는 프리웨어 소프트웨어들은 정말 많이 있습니다. 그렇다면 매틀랩을 쓸 수 밖에 없는 경우는 무엇이냐라고 한다면 제가 경험한 바로는 C, RTL 등의 코드 생성 분야와 Simulink 나 Stateflow 를 사용한 MBD(Model Based Design) 분야라고 볼 수 있을 것 같습니다. 학교에서는 Python, Octave 를 비롯한 오픈소스 소프트웨어들을 주로 사용하다가 회사에 와서 MATLAB 을 사용해도 늦지 않다고 생각합니다. 또한 MATLAB 만 잘하는 것 보다는 Python 과 같은 언어를 먼저 잘하는게 범용성과 실용주의적인 관점에서 더 낫다고도 생각합니다.

저는 요즘 아래 주소의 인프런(inflearn) 이라는 사이트에서 딥러닝 관련된 강좌를 보고 있는데 최근에 들어가보니 MATLAB 강좌도 있더군요.

https://www.inflearn.com

‘MATLAB으로 시작하는 프로그래밍’ 이라는 강좌이고 MATLAB 을 처음 접하시는 분들에게 유용할 강좌인것 같습니다. 비용도 무료이므로 부담없이 수강하실 수 있을 것 같습니다.

https://www.inflearn.com/course/matlab-%EC%8B%9C%EC%9E%91-programming/

다음으로 아래 주소의 tutorialspoint 사이트에서도 MATLAB 관련 Tutorial 들이 있더군요.

https://www.tutorialspoint.com/matlab/index.htm

영어 자료이긴 하지만 예제들도 굉장히 잘 정리가 되어 있어서 MATLAB 공부하는데 굉장히 좋은 자료로 보입니다. 공부하시는데 참조하시기 바랍니다.



20대 후반에 ‘남성의 MATLAB LOG’ 블로그를 만들었습니까~ 벌써 제 블로그도 8년 이상이 되었습니다.  뭐 특별한 목적이 있었다기보다는 그 당시에 제가 매우 좋아했던 MATLAB 이라는 프로그램의 사용 방법에 대해서  기록하기 위한 용도로 만들었습니다. 그래서 그런지 저는 회사에서도 MATLAB 을 사용한 개발을 많이 해 왔던 것 같습니다.   가장 최근에 다녔던 회사는 자동차 부품 개발 관련 회사 였고 MBD(Model Based Design) 일을 했었습니다. Simulink Stateflow 제품을 많이 사용하였었고  타겟 보드에 올리기 위해서 Embedded Coder 를 사용하여 C 코드 생성을 했었습니다.


언제인지 잘은 모르겠지만 블로그를 운영하면서  수익을 낼 수 있다라는 것을 알게 되었습니다. 좋아하는 것도 기록하고  수익도 낼 수 있으면 좋으니까 저도 애드센스 광고를 달게 되었습니다.


수익을 목적으로 블로그를 운영하는 경우도 많이 있는 것 같은데~ 예전에 제 블로그에도 어떤 분이 블로그를 사겠다고  댓글을 달았던 적이 있습니다. 다른 사람들에게는 어떻게 보일지 모르겠지만 저에게는 무척이나 애착이 가는 블로그라서  당연히 팔지 않았습니다. 블로그가 수익과 연관이 되다 보니 블로그 분석하는 사이트들이 많이 생겨나고 있는 것 같습니다.


오늘 하고 싶은 얘기는 제가 뭐를 하는 사람이냐에 대한 얘기가 아니라 제가 들어가 봤던 블로그 관련사이트들에 대해서  소개하려합니다.


아래 사이트에서는 블로그 운영과 관련하여 많은 고수들의 이야기들을 볼 수가 있습니다. 운영 방법에 대해서 유료 강의도 하는 것 같더군요.

http://www.blogermoney.com/


정말  고수이신분들은 수익 공개도 하시는데 정말 후덜덜한 수익을 내는 분들이  많이 계시더군요. 아래 주소에서 수익공개 하시는 분들을 보면 50대 이상의 어르신분들도 계신 것 같더군요. 블로그 운영 열심히 해봐야 되겠다는 자극이 되는 것 같습니다.


http://www.blogermoney.com/community/community_list.asp?code=BD10

어쨌든 블로거머니에서는 블로그와 관련된 질문도  할 수 있고 자신의 블로그를 소개 할 수도 있고  수익 인증도 할 수 있습니다.


다음으로  아래의 블로그차트라는 홈페이지에서는  블로그 지수를 확인할 수가 있습니다. 어떤 기준으로 블로그 지수가 매겨지는지는 모르겠지만 방문자가 많은 블로거들은 어떻게 생겼는지 확인을 해 볼 수가 있습니다.  고수의 블로그들을 들어가면서 해당 블로그를 벤치마킹 해 보는 것도 블로그 운영하는데 도움이 될 거라고 생각됩니다.


http://www.blogchart.co.kr

블로그차트 홈페이지에 가입을 하고 블로그 인증을 한 후에, ‘내블로그 분석’  탭에 들어가 보면 자신의 블로그 순위를 확인할 수 있습니다. 제 블로그는 97548 위 네요. ㅋㅋㅋㅋㅋ 그냥 까마득하네요.


역시나 개발 관련된 글들을 주로 쓰다 보니 유효키워드가 거의 없네요. 유효 키워드가 뭔지는 정확하게 모르겠지만 그냥 돈이 되는 키워드가 아닐까요?


아무튼 블로그를 운영하면서  위와 같은 사이트에서 다른 사람들은 어떻게 블로그 운영을 하는지 구경하는 것도 재미있는 거 같습니다.



요즘은 굉장히 다양한 오픈소스 프로그램들이 있습니다. 


수치 분석에 주로 MATLAB 을 사용하곤 했지만 요즘은 MATLAB 을 꼭 써야 하는 것들이 아니라면 Python 을 주로 사용하고 있습니다.


회사에서는 차량용 MBD(Model Based Development) 개발을 위해 Simulink 환경에서 Stateflow 툴박스를 주로 활용하는데


모델링의 일부는 Stateflow API 를 사용하여 MATLAB 스크립트를 통해 자동으로 모델을 구성하는 작업을 하곤 합니다.


모델링 구성후에는 당연히 simulation 을 수행하고 simulation 을 마치면 Embedded Coder 를 사용하여 MATLAB 알고리즘/Simulink 모델에 대해 C 코드 생성후 타겟 보드에서 테스트를 진행 합니다.


위와 같은 작업들은 MATLAB/simulink 를 꼭 써야 하는 작업이므로 사용을 하지만, 제어기 로직 설계 하는 것 이외의 다른 분야들에서는 주로 Python 을 사용하고 있습니다.


Python과 같은 프로그램들은 오픈소스 프로그램이라 누구나 사용할 수 있으니 협업시에도 편한것 같네요.


Python 에서도 MATLAB 과 같이 예쁜 그래프들을 표현 할 수 있는데 matplotlib 모듈을 사용하시면 됩니다.


matplotlib 모듈의 홈페이지는 아래와 같습니다. 


https://matplotlib.org/gallery/index.html


위 주소에 들어가 보시면 다양한 그래프 예제들이 있습니다.


하니씩 실행해 보시는것도 재미 있을 겁니다. MATLAB 에 익숙하신 분들은 코드를 이해하는것도 조금더 편할 것 같네요.


matplotlib 는 Anaconda 를 설치하면 기본적으로 설치가 됩니다. 예전에 아래 포스팅에서는 각 모듈들을 하나하나 찾아가며 설치 했었는데


http://iamaman.tistory.com/377


그냥 간편하게 Anaconda 를 설치해서 사용하시는게 정신건강에 이롭더군요.


저도 그래프 하나 그려 봤는데~~ 다음과 같이 코딩을 하면 그래프를 쉽게 그릴수 있습니다.


MATLAB 에서 그래프 그리는것과 유사하죠~ savefig() 함수를 사용하면 아래와 같이 그림으로 저장도 할 수 있습니다. 

matplotlib 의 메뉴얼은 아래 주소에서 확인 할 수 있습니다. 


https://matplotlib.org/tutorials/index.html


아래 포스팅에서도 소개한적이 있지만 요즘 Simulink 에서는 MDL 확장자 대신에 SLX 를 주로 사용합니다. 


MDL 파일의 경우 에디터에서 열어서 확인 해 볼 수가 있었는데 SLX 파일의 경우 에디터에서 열어 볼 수가 없더군요. 

그래서 오늘은 SLX 파일을 텍스트 에디터에서 확인 하는 방법에 대해 소개해 보려 합니다.

SLX 파일은 JAR 와 같이 아카이브 파일 형태라고 합니다.

test.slx 파일이 잇다면 파일의 확장자를 test.zip 으로 변경합니다.

다음과 같은 메시지가 나오는데 예를 클릭합니다.


test.zip 파일을 압축 프로그램을 사용하여 압축 해제 합니다. 저는 반디집을 사용했습니다.

압축을 해제 하고 폴더에 들어가 보면 아래 그림과 같이 xml 파일이 나타납니다.


Simulink 폴더에 들어가면 아래 그림과 같은 파일들이 나타나고


blockdiagram.xml 파일에는 Simulink블록도 정보가 나타나고

stateflow.xml 에는 stateflow 의 정보가 포함되어 있습니다.

에디터에서 Simulink정보를 수정한 경우에는 폴더를 압축한후 파일명을 slx 로 만들어 준 후에 Simulink에서 열면 될 것입니다.

막상 파일을 텍스트 에디터에서 열었더니 XML 의 각 태그의 의미가 어떻게 되는건지 정확히 모르겠네요.

텍스트 에디터를 통해 SLX 파일을 수정 할 때는 XML 파일의 구조를 완벽히 파악 한 후에 작업해야 할 것으로 생각되네요.



오늘은 파이썬을 활용하여 각도를 clock 값으로 변환하는 예제에 대해 알아보려 합니다.

 

MATLAB Stateflow 에서 junction 을 연결 할 때 junction 의 연결 지점을 clock 값으로 설정 합니다.

 

이러한 경우 각도에 대한 clock 값을 알 필요가 있습니다.

 

아래는 각도를 clock 값으로 변환해 주는 코드입니다.

 

Anaconda 를 설치해서 사용 중이라 numpy 나 matplotlib 은 설치가 되어 있는 상태입니다.

 

import matplotlib.pyplot as plt

import numpy as np

 

def degreeToClock(degV):

    return str((-(degV / 360.0 * 12.0) + 3) % 12)

 

 

if __name__ == '__main__':

    x = np.linspace(-180, 180, 360)

    y = map(degreeToClock, x)

    line, = plt.plot(x, y, '--', linewidth=2)

      

    plt.grid(True)

    plt.xlabel('Degree')

    plt.ylabel('Clock')

    plt.title('Degree to Clock')

      

    plt.savefig('C:\Degree_to_Clock.png')

    plt.show()

 

다운로드 링크 : Gist


 

위 코드를 실행해 보면 -180~ 180 도 에 대해 아래 그래프와 같이 변환 됩니다.

 


MATLAB 의 Stateflow 는 Stateflow API 를 활용하여 m 파일 명령어로 구성 및 조정이 가능 합니다. 

 

때에 따라서는 일일이 사람이 Stateflow 를 그리는것 보다는 Stateflow API 를 활용하는것이 효율 적인 경우가 많이 있습니다.

 

Stateflow API 를 활용하면 Python 과 같은 스크립트 언어등을 활용하여 Stateflow 를 그리는 Code generation 등도 가능 합니다.

 

오늘은 Stateflow 에서 사용중인 Data 를 다 찾는 방법에 대해 알아보려 합니다. 

 

Stateflow 에서 Data 를 다루기 위해서는 Stateflow.Data Object 를 다 찾으면 됩니다. 

 

Stateflow 에서 data 를 다 찾는 스크립트는 다음과 같습니다.

 

 

위 코드에서 sfroot 는 stateflow 의 root 즉, 최상위 stateflow 를 의미 합니다.

 

다음으로 아래 코드 부분이 Stateflow.Data 를 다 찾는 코드 입니다.

 

datav = m.find('-isa','Stateflow.Data');

 

그 이하 부분은 찾아진 데이터의 Name 필드를 vall 이라는 Cell 객체에 넣고~ vall(:) 명령을 통해 Command 창에 data 들을 나열 합니다.

 


아래 포스팅에서 MATLAB Game Stellaria 에 대해 소개해 드린 적이 있는데요~

  

2014/01/12 - [programming language/MATLAB] - MATLAB Game Stellaria


오늘은 MATLAB Tetris 에 대해 소개해 드리려 합니다.

 

먼저 아래 주소의 포스팅을 보니 MATLAB 자체적으로도 Tetris 가 있더군요.

 

http://lstudio.egloos.com/viewer/2262652

 

위 포스팅의 설명대로 sim('sf_tetris2') 라는 명령을 Command Window 에 치면 아래 그림과 같이 Tetris가 실행 됩니다.

 

sim 명령을 사용하는 것을 보면 아시겠지만, MATLAB Tetris는 시뮬링크로 구성되어 있으며, 아래 명령을 통해 모델을 열어 보니 몇몇 상수값들과 Uniform Random Number 블록,  Stateflow 블록으로 구성되어 있는 듯 하더군요.

 

open('sf_tetris2')

 

즉 위에서 설명한 Tetris 는 Simulink가 없는 분들은 즐길 수가 없다는거죠~ 물론 MATLAB 으로 테트리스를 하고자 하는 사람들은 그리 많지 않겠지만….

 

암튼 그래서 MATLAB에서 돌아가는 Tetris를 찾아보니 역시나 있더군요.

 

http://www.mathworks.com/matlabcentral/fileexchange/34513-matlabtetris

 

아래 그림과 같이 Download Submission 버튼을 클릭해서 다운로드 받을 수 있습니다. Matt Fig 라는 분이 작성했더군요. 

 

matlabtetris.zip 파일을 다운로드 받아서 압축해제 한 후에 matlabtetris.m 파일을 실행 시키면 됩니다.

 

아래 그림과 같이 실행이 되고~ Start 버튼을 누르면 게임이 시작합니다. 일반적으로 테트리스 게임하듯이 화살표 버튼을 이용해서 블록들을 조작 할 수 있습니다.

 

위에서 설명한 Tetris 이외에도~ 두 개의 Tetris 가 더 있었습니다. 아래 소개하는 두 개 모두 위에서 설명한 matlabtetris 에 영향을 받았다 하는군요.

 

첫 번째로 tetris-for-dummies 입니다. 아래 주소에서 다운로드 하시면 되구~ 압축해제후에 play2.m 파일을 실행하시면 됩니다.

 

http://www.mathworks.com/matlabcentral/fileexchange/21246-tetris-for-dummies

 

 

조작 방법은 화살표가 아니라 아래 그림과 같더군요. QESW 키를 사용하여 조작 가능합니다.

 

두 번째로~ tetris-vs-ai 인데요. 아래 주소에서 다운로드 할 수 있습니다.

 

http://www.mathworks.com/matlabcentral/fileexchange/33701-tetris-vs-ai

 

압축 해제후에 tetris.m 파일을 실행하면 되고 화살표와 스페이스 바로 조작이 가능하더군요.

 

요렇게 생겼습니다.



+ Recent posts