본문으로 바로가기
동역학을 해석하는 대표적인 방법은 뉴턴역학을 이용한 방법과 라그랑지 방법이 있습니다. 이 두 방법모두 개념을 잘 정립한다음 수학과의 싸움을 벌려야합니다. 그렇게 만들어진 모델을 MATLAB 같은 툴을 이용해서 시뮬레이션을 하기 위해서는 또 수식을 해당 언어에 맞게 변환을 해 주어야합니다. 이런 과정들 중에 실수가 있을 수 있고, 그 실수는 간혹 발견하기 어려울때가 있습니다.

오늘 소개해드릴 MATLAB의 한 기능인 SimMechanics는 역학적 해석을 수행할때, 좀 더 직관적으로 접근할 수 있으며, 간단한 조작으로 애니메이션도 수행할 수 있습니다.


항상 그렇듯 간단한 예제를 통해 소개해보도록 하지요. 위의 그림과 같은 단순 진자를 대상으로 하겠습니다. Rigid Body 하나와 조인트하나면 되겠죠?


먼저 simulink 라이브러리를 열어서 Simscape 안에 SimMechanics를 찾습니다.


그리고 그 안에 Bodies에 있는 Body, Ground, Env라는 블럭과


Joints라는 폴더의 Revolute라는 블럭,


Sensors & Actuators에 있는 Joint Sensor라는 블럭을


가져다 놓습니다. 아... 시뮬링크 기본 폴더에서 Scope도 하나 가져다 놓죠. 걔네들을


위에 보이듯인 적절히 돌려서(Ctrl+R) 위 그림처럼 배치를 합니다. 이러면 애초 계획과 비슷해 보입니다. 먼저 고정점(ground)을 하나 두고, 조인드(revolute)로 강체(rigid body)를 연결하겠다는 뜻이죠. 먼저 디폴트로 설정해서 보면 좌표계가


-y방향이 중력방향으로 설정됩니다. 어느 절대좌표계가 있고, 진자가 고정될 고정점을 (3,4,5)에 위치시키도록 하겠습니다.

Ground를 더블클릭하고


위 두군데를 설정합니다. Show Machine Environment Port는 ENV 블럭과 연결을 위해 port를 빼두는 것입니다.


그리고, Revolute 블럭을 더블클릭해서


센서를 달기 위해 Number of sensors에 1로 설정하시고, 회전을 허가하는 것은 z축중심의 회전이라고 알려줍니다.


그러면 위 그림까지 변경되었을 거구요

이제 Body라는 블럭을 더블클릭해서


디폴트로 CG, CS1, CS2가 있는데, 이중 CS2를 선택해서 지웁니다.


그리고, 질량과 이너셔를 입력합니다. 이 부분은 강체의 모양과 길이에 따라 결정되는 것인데, 대부분의 계산과정은 동역학책 제일 뒤쪽에 표로 나와있습니다. 그리고, CG와 CS1의 기본 좌표를 입력합니다. CS1은 위에서 설정했던 Ground에 조인트로 연결되어야하니 당연히 3,4,5의 좌표를 가져야겠지요.


그러면, 위 그림처럼 CG와 CS1의 좌표가 설정되었습니다. 무게 중심이 CG입니다. 강체의 길이는 이상적인 경우라면 두배가 되겠지요.


그리고, 위에 보이듯이 선을 연결하고, Joint Sensor를 더블클릭합니다. 선을 연결하지 않으면 Joint Sensor에서 아무것도 변경할 수 없습니다.


보고싶은 항목을 선택해주면 됩니다.


그리고, 시뮬레이션을 해서 scope를 확인해보면 나타난 결과입니다. 아 그리고, 90도가 수직방향입니다. 여기까지만 해도 사실 대단한 겁니다. 복잡한 수식의 전개없이 시뮬레이션이 가능해지니까 말이죠.

이번에는 이상태에서 애니메이션을 한번 구경해야죠^^


Simulation 메뉴의 Configuration Parameters를 선택하고 나타난 창에


좌측 하단에 보면 SimMechanics를 선택하면


나타나는 위 항목 두개를 선택해줍니다. 그리고, 시뮬레이션을 다시 하면


위의 창이 뜨기는 하기는 하는데, 뭔가 이상할 겁니다. 그건, CG와 CS1을 점으로 표현하기 때문인데요. 위에 표시된 동그란 모양에 줄무늬가 있는 아이콘을 누르고, 그 위의 FIT아이콘을 눌러서 다시 시뮬레이션을 해보시면


위와 같이 진자로 나타납니다. y축이 위로 향하게 두셔야 흔들리는듯이 보입니다. 위에 표시된 아이콘을 누르면 전체 움직임을 관찰하기 쉽도록 화면을 정절히 잡아줍니다.


아마 대체로 너무빨리 시뮬레이션이 수행되어서 난감하실텐데요. 그럴때는 Simulation 메뉴의 Control Animation Speed를 눌러서


저부분의 수치를 크게 잡아주면 시뮬레이션 속도가 떨어집니다. 그리고, 카메라 모양의 아이콘을 누르시면, AVI로 녹화도 됩니다.



댓글을 달아 주세요

  1. BlogIcon 핑구야 날자 2010.05.26 12:48

    중2인 아들놈이 미분적분 공부해보겠다고 책을 사달라고 해서 사준었는데
    독학으로 한다니 놀랍기도 하고,...지켜봐야 겠어요.. 식사 맛있게 하세요

  2. BlogIcon 모피우스 2010.05.26 18:27

    어떤 의미인지 몰라도 관련 정공자분들에게는 좋은 정보가 될 것이라는 것은 틀림없겠죠...^^*

  3. BlogIcon 촌스런블로그 2010.05.31 23:02

    제게는 정말 유용한(?) 포스트였습니다@@

  4. 쿵쿵따 2012.03.08 10:45

    안녕하세요. 거의 매일 이 블로그를 방문하는 열혈 독자입니다 ㅎㅎ

    요즘 시뮬레이션을 Simulink와 SimMechanics로 해보려고 도전하고 있는 중입니다.

    궁금한 점이 있는데요... mass와 inertia를 입력할때, inertia값이 diagonal한 텀들로 되어있는데

    이게 무게중심점을 좌표축으로 설정해야 diagonal한 텀들이 나오는거잖아요..

    원래 Simmechanics에서 inertia값을 입력할때 무게중심점에 각 body의 좌표축이 설정되있다고 하고

    입력하는건가요??

    • BlogIcon PinkWink 2012.03.08 15:47 신고

      해당 유닛의 무게중심 기준으로 이너셔를 입력해두고
      회전 중심축을 변경하면 알아서 반영을 하더라구요.
      동역학책 부록쯤에 보면 다들 회전중심축 별로 이너셔를 계산하는 공식이 있으니까요^^

  5. 강윤식 2012.10.01 15:17

    저도 질문이 있는데요, 여기서 펜듈럼을 자유진자 비슷하게 운동하는 것으로 설계를 한 것이잖아요?? 그런데 제가 여기서 Env 를 없애고, 중력이 없는 시스템으로 설계한 다음 모터드리븐으로 진자를 설계 하고 싶은데 구글링해도 못찾겠더라구요.. 인풋을 모터각속도를 1rad/s 로 놓고 중력이 없는 상태(이건 그냥 회전축을 y 축으로 놓으면 될것 같긴 하네요) 에서 회전운동하는 링크를 만들어 보고 싶은데 블록에서 액츄에이터나 이런것들을 써서 해 보려고 해도 계속 에러만 나고... 어떻게 해야 하는지 모르겠네요 ㅠㅠ

    • BlogIcon PinkWink 2012.10.04 11:08 신고

      죄송합니다. 현재 저는 Sim관련 라이브러리를 더이상 학습하지를 않았답니다. 사실 말씀하신 정보만 가지고, 답변이 곤란한것도 있지만, 더 자세히 알려주셔도 제가 답변드릴 정도의 지식을 가지고 있지를 못한 것 같습니다.
      도움이 되지 못해 죄송합니다.

  6. 노보트 2013.11.23 16:39

    현재 기계과3학년에 재학중인 학생입니다. 다름이 아니라 simmechanics를 이용해서 다 자유도 로봇팔이나 델타로봇같은 병렬로봇을 시뮬레이션하려고하는데 심메카닉스에 대한 책이 찾아봐도 없네요ㅠㅜ 혹시 심메카에 대한 자세한 설명이 나와있는 책있으면 추천좀 해주시면 안될까요?ㅠㅠ