본문으로 바로가기

밸런싱 로봇 (Balancing Robot) 만들기 연재
1. 동역학 구축 (1) [바로가기]
2. 동역학 구축 (2) [바로가기]
3. 동역학 구축 (3) [바로가기]
4. 기구부 구성 및 모터 파라미터 측정 [바로가기]
5. 제어기 설계 및 MATLAB을 이용한 시뮬레이션 [바로가기]
6. 밸런싱 로봇 만들기 [바로가기]


   동역학 모델은 왜 만드는가?
  (수학은 왜 공부하는가???) 
 
 

지난번에 밸런싱로봇의 기구부를 구성했었는데요. 이번에는 밸런싱로봇의 수학적 동역학 모델을 구성할려고 합니다. 그전에 이렇게 복잡한 수식으로 표현된 동역학 모델이 필요한가? 하는 질문을 가질 수 있는데요. 꼭 답을 드린다면, 뭐 꼭 필요하지는 않다라고 할 수 밖에 없겠네요.

만약, 밸런싱로봇을 하드웨어적으로 구성을 완료하고 안정화하도록 프로그램을 작성한다고 하면, 꽤 오래 걸리게 됩니다. 로봇이 +방향으로 기운다면 모터를 +방향으로 돌게해서 로봇을 +방향으로 전진시켜야겠구나라고 누구나 생각할 수는 있습니다.

그러나, 만약 로봇의 현재 각도가 +에 있다고 하더라도, 0으로 접근해 오는 중간의 +인지, 혹은 0에서 멀어지는(즉, 더 넘어질려고하는) 중간의 +인지, 혹은, 현재 각도가 +이긴한데 평형상태에 있어서 우연히도 당분간 계속 그 상태로 있을 건지(고등학교 수학에서는 이것을 극점이라고 합니다.) 를 또 판단해야합니다. 그 때 그 때 마다 로봇을 얼마의 속도(혹은 힘)로 움직일 것인지를 또 판단해야하죠. 

이런 판단을 프로그램코드(다수의 조건문으로..)로만 작성하는 것은 정말 힘듭니다. 물론 이런 노력이 불가능하다는 것은 절대 아닙니다. 분명 좋은 성과를 내는 경우를 또한 많이 봤습니다. 또, 동역학 모델을 구성했다고 하더라도 정확하게 유도하지 못했거나 파라미터들을 또 정확하게 유도하지 못했다면, 역시 좋은 제어기가 설계되기 어렵습니다.

동역학 모델을 구성하는 이유는 시스템을 좀 더 잘 이해하고, 좀 더 좋은 제어기를 설계하기 위해서 입니다. 이번 연재에서 설계될 제어기는 C/C++로 생각하면, 딱 한줄이면됩니다.(물론 상태를 측정하고, 모터에 전압을 인가하고 등등을 빼고, 제어기만 이야기한 것입니다.) 

문득, 생각나서 연재와는 큰 관계는 없지만, 동역학 모델에 대한 이야기를 주절주절 거려봤습니다.

   라그랑지 방법을 이용해서 동역학 모델을 구축하기 전에 준비단계 !  
 

이번의 동역학 모델은 라그랑지 방법으로 구축할 생각입니다. 라그랑지 방법을 사용하기 위해서는 준비단계가 필요합니다. 먼저 Free Body Diagram이라고 부르는 시스템의 개념도가 필요한데요. 


위 그림입니다. 음.. 예전에 사용한걸 가져와서 ㅠㅠ k 벡터가 아니라 j 벡터입니다. 그리고, 각도는 반시계방향을 +로 보고 있습니다. 위 그림은 밸런싱로봇을 간단히 표현한 것인데요. 바퀴의 질량을 M, 로봇의 질량을 m, 바퀴의 반지름을 R로 두었습니다. 그림에 표시된 l은 길이의 중심이 아니라 로봇의 무게중심까지의 거리입니다. 기판과 모터 등등이 달리기 때문에 무게중심까지의 길이는 측정이 필요합니다. 그건 다음 글에서 다루도록 하겠습니다.

움직임을 가지는 것은 바퀴와 몸체인데요. 위치벡터를

 
선언합니다. 바퀴 중심의 위치는 반지름(R)만큼 j 벡터 방향으로 올라간 상태에서 x라는 변위를 가질 것이고, 로봇의 무게 중심은 간단한 삼각함수를 이용해서 위치벡터를 잡아 줄 수 있습니다. 그리고 위치벡터를 미분해서 속도벡터


를 구합니다. 이 때, theta도 시간에 대한 함수이기 때문에 sin(theta)나 cos(theta)를 미분할 때, dot_theta가 꼭 한번 더 곱해져야한다는 것을 기억해야합니다. 

그러면, 운동에너지를 구해야하는데요.

 
바퀴나 로봇의 몸체나 운동에너지는 직선운동성분과 회전운동성분을 가지게 됩니다. 위에서 바퀴의 운동에너지를 이야기할때, dot_x^2이 있는 항이 보이실텐데요. 원래는 1/2*J_M*dot_alpha^2입니다만(alpha는 바퀴의 회전각도), 여기서는 상태를 x, theta만 생각할 거라서, x = R*theta (theta : radian)라는 중학교때 배우는 원둘레를 구하는 공식을 이용해서 표현했기때문에 나타난 것입니다. 위 운동에너지의 합(T)과 위치에너지의 합(V)은


입니다. 위치에너지는 위치벡터의 벡터 j 성분의 크기입니다. 그러면 라그랑지안(Lagrangian) L을 구할 수 있습니다. 라그랑지안 L은 운동에너지 - 위치에너지입니다.

   라그랑지 방법을 이용한 밸런싱로봇의 동역학 모델 구축 !  
 

위에서 구했던 전체 운동에너지(T)와 전체 위치에너지(V)의 차이를 라그랑지안 L이라고 하는데요. 대입해서 정리하면


입니다. 이제 유명한 라그랑지 방정식에 대입하면 되는데요. 라그랑지 방정식은


입니다. 상태는 로봇이 움직이는 거리 x와 로봇의 기울어지는 각도 theta라서, 위 방정식에 x, theta를 대입해서 라그랑지 방정식을 찾을 수 있습니다.


위는 x를 대입해서 얻은 것입니다. 그리고, theta를 대입하면


입니다. 중간에 보이는 1/R*J_m*ddot_x는 본래 나타나는 항이 아니고, 외력으로 우변에 넣어둔것을 전개를 위해서 좌변으로 이항한 것입니다. 저 힘은 모터가 바퀴를 회전시키는 힘이 로봇몸체에 영향을 주기 때문에 나타난 항입니다. 

일반적인 동역학 모델을 구축할려면 위 두 라그랑지 방정식을 다시 정래해야하는데요. 그게 좀 복잡해서 행렬로 표현해서 역행렬을 이용할 겁니다.


위의 표현을 가지도록 했을때


각 행렬들입니다. 그럼 M의 역행렬을 이용해서


이렇게 마지막 결론식을 얻을 수 있는데요. 정리하면


입니다.

   결론 및 이 후 필요한 과정 !  
 

이번에 구한 동역학 방정식이 맞다라고 검증하기엔 좀 부족합니다. 게다가 관성모멘트를 의미하는 J_M, J_m과 무게중심까지의 길이 l, 마찰계수 f_x, f_theta등등을 아직 모릅니다. 일단, 다음 연재는 이 파라미터를 알아내는 과정을 소개할 생각입니다. 그리고, 동역학 모델이 정확한지 확인할 방법이 마땅히 떠오르지 않으므로, 연재 중간중간에 상황에 맞는지 부분 검증을 수행하게 될 겁니다. 이번에는 복잡한 수식을 다루었네요. 



댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 다질문 2010.08.25 12:56

    M이 의미하는 것이 바퀴2개와 모터2개를 포함한 하단쪽 프레임 질량을 의미하는 것이고 m이 M을 제외한 나머지 상단 질량을 의미하는 것이예요??

    • BlogIcon PinkWink 2010.08.25 13:32 신고

      비록 같은 연재로 묶여있긴하지만, 이 글에서의 모델과 또 다른 모델이 있습니다. 하여간 이 글에서는 M이 바퀴의 무게입니다.

  3. saddo37 2010.10.13 20:31

    PinkWink님 질문이요!~~^^;
    아.. 저는 팬듈럼을 만들고자 하는 학생입니다.
    실제로 하드웨어는 다 만들었는데.. PID제어를 하여 예전에 만들었는데.
    불안정했었고, 이번에 하드웨어는 동일하고, 프로세서만 다르게 해서
    2년만에 새로 하려고 합니다.^^;; 그런데 그때 동역학 그런 수식도 없이
    만들었기에 님의 포스팅된 글을 보고 따라가고 있습니다. 죄송하지만 앞으로 많이 물어보겠습니다.^^;;

    라그랑지 방정식의 정의가 적힌 수식 다음의 x를 넣은 수식에서 직접해본결과
    저와 다른 것 같아 질문을 드리고, F-dotxfx가 먼지, 그다음 수식에서 -dot theta * f theta가 머엇인지 감이 안옵니다. ㅜㅜ..

    • BlogIcon PinkWink 2010.10.18 14:09 신고

      운동하는 힘을 방해하는 마찰력입니다. 통상 마찰력은 속도의 반대방향으로 비례한다고 생각합니다. (운동할때 말입니다.. 정지상태에서 출발하는것말구요)

  4. saddo37 2010.10.13 20:34

    라그랑지 L을 최종적으로 구한 것에 보면 벡터Vm^2을 벡터 Vm의 수식을 넣어 전개를 하셨는데, Vm을 제곱하면 (a * b)^2을 전개한것으로 보면 2ab의 항이 업어졌는데 원래 그런가요?

  5. saddo37 2010.10.13 20:40

    x를 L에 넣은 수식중에 dotdot theta*l*m*cos theta까지는 알겠는데,
    그다음항을 빼주었는데 그것이 이해가 가질 않습니다.
    x에 대한 L을 편미분을 해주면 x를 포함하는 항이 없기에 그항이 없는 것이 아닌가요??

    일단 그렇다하고 넘어가고 있습니다^^;; 염치불구하고 알려주시면 감사하겠습
    니다.ㅜㅜ

  6. mijong 2011.02.15 13:29

    그런데요 꼭 라그랑지안 으로 위의 역학관계를 풀어야하나요???

  7. mijong 2011.02.15 13:29

    다른방법도잇겟져?

    • BlogIcon PinkWink 2011.02.15 14:07 신고

      다른방법도 물론 있습니다. 아니 많습니다만...
      대표적으로 많이 사용하는것은 뉴턴역학을 이용한 방법과 라그랑지를 이용한 방법입니다.

  8. mijong 2011.02.21 01:11

    뉴턴의 역학을 사용한다면 어떤것들을 공부해야 될까요??

    제가 라그랑지를 따로 독학 해볼려햇는데 넘 이해가 안가서 ..

  9. mijong 2011.02.21 01:13

    그리고 자이로 와 가속도 센서의 장점만을쓴다는 칼만 필터?? 를 쓰신거 같은데

    이거에대한 포스팅도 있나요 ??

  10. 돼지돌이 2011.03.22 18:30

    안녕하세요 ^^ 역시 pinkwink님의 내공은 대단한것 같습니다.
    아직, 개념이 많이 부족한 학생 입장에서... 여쭤 보겠습니다.
    라그랑지에 x를 대입해서 나온 항목에서, (dot)theta^2lmsin(theta)이 항은 어떻게 나왔는지와,(dot)xfx는 왜 나왔는지... theta를 대입했을때, 1/RJm(2dot)x는 어디서 나왔는지...우변의 F는 이때 왜 없는 건지.... ㅠ.ㅠ 죄송합니다. 설명좀 부탁드릴게요 ㅠ.ㅠ

    • BlogIcon PinkWink 2011.03.22 19:19 신고

      1/2 m ((dot_x + dot_theta l cos (theta) )^2 을 dot_x에 대해 편미분하면
      m(dot_x + theta l cos (theta) ) 가 되며, 라그랑지 공식에 의해 다시 시간에 대한 미분을 하면
      m( ddot_x + ddot_theta l cos (theta) - dot_theta l sin (theta) dot_theta ) 가 되면서

      dot_theta^2 l m sin(theta) 항이 나타납니다. 이와같이 잘 계산하면 나머지항도 나타납니다.

      그리고 F는 중간쯤에 M, C, G, F 행렬에 보다시피, 일반적인 힘으로 바뀌었습니다.

      마지막으로, 이 글 말고 http://pinkwink.kr/326 글 부터 밸런싱로봇을 시작하시길 바랍니다.

  11. mijong 2011.03.24 19:34

    와 진짜 쩌내요 진짜 이블로그온지 3달 넘어가는거 같은데
    동역학 이제 이해가 되가네요 ㅠㅠ

    윙크님은 천재이신가요 ㅠㅠ
    그나저나 이걸 이제 어떻게 파라미터구하고 할지 까마득하네요 ㅠㅠ
    5월달까지 끝내야하는데 ㅠㅠ ㅋ

    • BlogIcon PinkWink 2011.03.25 07:56 신고

      네... 그러다 보면.. 꽤 많은 것을 이룩한 자시을 보고 깜짝 놀라게 되실겁니다. 제 블로그 곳곳에 각 파라미터를 측정하는 방법을 이야기 하고 있습니다.

  12. onelux 2011.07.20 17:15

    와 대단하시군요;; 정말 세상에는 똑똑한 사람들이 많은 것 같습니다 ㅋ
    제가 예전에 제어 관련 프로젝트할 때 몇몇 상수들 많아서 정말 힘들었던 기억이납니다 ㅋㅋ 그때 핑크윙크님의 블로그를 봤었다면 좋았을 것을 ㅋㅋ 시뮬링크에 블록 다이어그램 그린걸 칩에 로드하는 것도 해보셨나요? 해보고 싶은데 잘 모르겠어요 ㅋ

    • BlogIcon PinkWink 2011.07.20 20:00 신고

      사실 똑똑이라는 글자와는 거리가 있는데, 하여간 감사합니다.^^
      시뮬링크를 칩에 로딩한다는 것은 두 종류쯤 있을텐데요...
      하나는 DSP등을 연결해서 MCU에 업로드 되는 거고
      하나는 FPGA를 사용하는 것일겁니다.
      물론 MATLAB에서 모두 지원하겠지요..
      그리고 더 물론.. 저는 해보지 않았답니다.^^

  13. 왕초보 2011.07.29 17:15

    안녕하세요. 펜듈럼을 만드려고 하는 학생인데 인터넷 검색하다가 좋은 글이 많아서 들리게 됬네요.
    글을 쭉 읽으면서 전개를 따라가는 중인데 중간중간 막히는 부분이 많네요ㅜㅜ
    제 힘으로 이해가 안되는 부분 몇개가 있어 질문 드립니다.
    라그랑지안 L을 라그랑즈 방정식에 넣어 x와 theta에 대한 식을 만들어 내는 부분에서 막히네요.

    먼저 동역학에 대한 공부가 좀 부족해서 위키백과에 라그랑즈 방정식을 찾아봤습니다. 대략 '시간과 p에 대한 미분항 (좌항) = 0(우항)'으로 표현되있더군요.
    1. 백과에서는 식 우항이 0으로 되있던데 여기서는 어떻게 F가 되어있는지.

    2. x에 대해 풀었을 때 왜 우항에 -xdot*f(점성마찰력)이 어떻게 추가되었는지.

    3. theta에 대해 풀었을 때 왜 우항에 F가 사라지고 -thetadot*f가 어떻게 추가되었는지..

    위 부분에서 막혀서 진도가 나가지 않고 있습니다ㅜㅜ 설명 좀 부탁드려요..

    • BlogIcon PinkWink 2011.07.29 18:30 신고

      외력이 존재하는냐 아니냐의 차이입니다.
      외력이 존재하지 않으면 '0'으로 두고, 존재하면 외력을 유도 후에 대입해야합니다. 그 외력이 모터같은 엑츄에이터가 없는 경우라 하더라도 일반적인 마찰력이 작용할 수 있기 때문에 -(속도성분)*마찰계수... 의 식으로 표현을 합니다.
      조금 더 간단한 시스템으로 한 번 확인을 해 보시면 됩니다.
      비슷한 내용을 다시 포스팅한 적이 있습니다.
      http://www.pinkwink.kr/356

    • 왕초보 2011.07.29 23:19

      빠른 답변 감사합니다^^

    • BlogIcon PinkWink 2011.07.31 14:33 신고

      네... 좋은 일이 있으시길 바랍니다.

  14. 왕초보 2011.07.30 20:45

    다시 한번 질문 드립니다.
    위 글내용에서 최종적으로 얻어낸 x와 theta에 대한 2차 미분방정식을 행렬의 상태방정식으로 표현하려고 하는데 막히네요..ㅜㅜ

    x''와 theta''를 각각 x1=theta, x2=theta', x3=x, x4=x' 의 매개변수로 치환하여
    X'(x1,x2,x3,x4의 미분으로 이루어진 4X1행렬) = FX + Gu 형태의 행렬 상태방정식으로 만드려고 합니다만..
    x''와 theta''의 항 중에 (theta')^2이 있어서 치환하면 x2^2(2차)이 되서 1차의 행렬식으로 정리가 되지 않네요.

    http://pinkwink.kr/36 의 유도과정 중간쯤에 제가 막힌 곳과 비슷한 부분이 있어서 직접 양쪽의 식을 적어가며 비교를 해봤지만 연관점을 찾지못했고 잘 이해가 되지 않습니다..

    (theta')^2 항의 처리를 어떻게 하는지 궁금합니다.

    • BlogIcon PinkWink 2011.07.31 14:35 신고

      아마 상태방정식은 통상 선형화후 얻을 때가 많아서
      상태의 제곱항은 선형화하면 '0'이 됩니다.
      그래서 상태방정식에서 나타나지 않을겁니다.

  15. 뉴비뉴비 2011.11.20 15:27

    여기서 얻어가는게 너무나도 많네요.^^ 감사합니다.
    여쭙고 싶은게 있어서 그런데,

    라그랑지방정식 세우는것 까진 알겠는데 Fθ Fx가 잘 이해가 안되서요.
    우스운 예기지만;;; 제가 구한게 뭘 구한건지 제대로 모르겠어요.
    여기서 Fθ는 몸체m이 θ방향으로 가해지는 외력인가요? 또 이것을 토크로 봐야 되나요? Fx는 바퀴M과 몸체m이 x축 방향으로 받는 외력인가요?
    몸체m에 모터를 장착하고 모터의 로터축에 바퀴M을 장착했을 때,
    모터의 총 토크는 작용반작용에 의해서 m와 M에 각각 같은양으로 힘이 분산되어야 하는 것 아닌가요?
    저기위에 '위는 x를 대입해서 얻은 것입니다.' 위부분에 F-dotxf(x)에서 F가 뭘 의미하는지 모르겠어요.

    그리고 JM(doubledotx)/R 부분에서 /R^2이 되어야할것같은데 그냥 /R인게 힘의 단위는 안나오고... 저게 어떻게 나온건지 모르겠어요. 연재 다음글들을 읽어봐도 설명이 안나오는 것 같고....ㅠㅠ

    으....여기서 막혀서 너무 머리 아프네요;;;

    • BlogIcon PinkWink 2011.11.20 21:20 신고

      그것은 상태에 작용되는 힘을 의미합니다
      단순히 개념적인 항으로 거기에 실제 힘을 대입하게 되는데
      모터가 붙어있다면 모터의 힘의 방정식을 ...
      단순히 링크만 있다면 마찰력을 적용시켰습니다

    • 뉴비뉴비 2011.11.26 10:43

      아하! 윙크님의 다른글들도 읽으면서 더 공부하니까 이제야 라그랑지운동방정식을 이해하겠어요!
      그리고 연재글 보면서 시뮬링크를 이용해서 동역학 모델링도 해봤는데 정말 재밌네요^^ 어떤 동역학모델이든 모델링 해낼 자신감이 생겼어요. 감사합니다.

    • BlogIcon PinkWink 2011.11.26 17:22 신고

      다행입니다.
      좋은 성과가 있기를 바랍니다.^^

  16. 제어새싹 2014.02.19 14:19

    안녕하세요
    위 댓글에서 왕초보님의 댓글과 같이 동역학식을 statespace 모델로 만들고 싶은데
    위의 삼각함수 안에 있는 Theta는 어떻게 처리를 해야하는 건가요.. theta를 0도로 두고 하는 건가요
    statespace모델을 만드는 과정이 궁금합니다.

    • BlogIcon PinkWink 2014.02.19 22:52 신고

      선형화하면 됩니다. theta = 0 부근에서 선형화한다면,
      sin(theta) = theta
      cos(theta) = 0
      가 됩니다. 좀 더 자세한건 선형화 linearization이라고 위키 검색을 하시면 됩니다.^^

  17. 왕초보 2015.02.08 01:08

    T 운동에너지 합에서 1/2 mv^2 에서 벡터i항을 x로 놓고 벡터 j항을 y로 놓으면 -2xy항은 왜 없어진거죠??

    • BlogIcon PinkWink 2015.02.08 09:04 신고

      표현은 언뜻 제곱처럼 보일 수 있으나... 벡터의 내적입니다. 자기 자신과의 내적이지요. 내적의 규칙대로 연산하면 말씀하신 2xy라는 항은 생성되지 않습니다.

  18. 왕초보 2015.02.08 20:51

    마지막 역행렬을 이용새 x'' 와 theta'' 를 구할때
    det(M)은 역행렬의 ad-bc 란걸 알겠으나
    [-cx'-G +F]랑 [-Ctheta''-G+F]가 어떻게 전개되는건지 잘모르겠네요 ...
    단순히 행렬의 뺄샘을 하고나서 M의 역행렬 과 행렬의 곱셈으로 구하는 건가요?
    손으로 계산해보니 계속 틀려서 여쭤봅니다 ...

    • BlogIcon PinkWink 2015.02.09 00:11 신고

      그 위에 나타나 있습니다.ㅠㅠ
      애초 M*p_ddot + C*p_dot + G = F 였습니다.
      그 상태에서 ddot만 남기고 우변으로 이항하니...
      M*p_ddot = F - C*p_dot - G 입니다.
      그리고 M마저 우변으로 넘길려니 양변에 M의 역행렬을 곱할 수 밖에 없었던거지요.

  19. 왕초보 2015.02.09 00:32

    그 저의 질문의 의도가 잘못 전달 된거 같군요 ......ㅎㅎ
    M의 역행렬을 곱하는 것은 알고있습니다
    [Cx'-G+F]에서 C = 2X2 행렬이고 G , F 1X2 행렬인데 행렬의 뺄셈이 가능한가요?
    행렬의 차수가 다른데 전개하는법을 잘 모르겠네요 허허...

    • BlogIcon PinkWink 2015.02.09 08:57 신고

      그렇지 않습니다.
      2*2의 크기인 C 행렬과 2*1의 크기인 p_dot이 곱해져서 2*1이 됩니다. F도, G도 모두 2*1의 크기입니다. 결국 2*2크기의 M의 역행렬과 곱해질 수 있는 것입니다.

  20. 2015.02.26 21:51

    비밀댓글입니다

    • BlogIcon PinkWink 2015.02.27 08:54 신고

      앗... 제가 동역학 전공이 아니라 보존계인지 아닌지에 대한 구분을 잘 못하겠지만... 여하튼.. 라그랑지안 방법을 적용한 예를 따라 적용했답니다.. 그나저나 보존계.. 비보존계는 뭔가요???

  21. a 2017.11.01 21:47

    안녕하세요
    핑크님
    오랜만입니다.

    혹시 제가 라그랑지안 방정식을 이용해 Dynamics Eq 를 구하고 있는데요
    그것을 할때 제가 각 컴포넌트(Ex.휠 , 몸체 등) 각 축에 대한 선속도와 각속도를 정하고 라그랑지안을 쓰는데요
    이 때 각 축에 대한 선, 각속도를 구할 때 .. 그냥 서로 간의 상관관계를 따져주며 해야할가요 아니면 그냥 그 물품에 대한 운동만 보면될가요 ?

    • BlogIcon PinkWink 2017.11.02 16:32 신고

      네.. 제가 이해한 내용이 맞는지 모르겠지만..
      http://pinkwink.tistory.com/342
      이 글을 한 번 보세요... 질문을 이해를 제대로 했는지^^ 몰라요