본문 바로가기

Robot/Project

[밸런싱 로봇 만들기] 3. 동역학 모델 구성하기


밸런싱 로봇 (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등등을 아직 모릅니다. 일단, 다음 연재는 이 파라미터를 알아내는 과정을 소개할 생각입니다. 그리고, 동역학 모델이 정확한지 확인할 방법이 마땅히 떠오르지 않으므로, 연재 중간중간에 상황에 맞는지 부분 검증을 수행하게 될 겁니다. 이번에는 복잡한 수식을 다루었네요. 


반응형