본문으로 바로가기

이번 연재는 꽤 길게 끌고 있네요. (연재의 길이가 길어지는 거라면 차라리 좋은데, 연재간 간격이 길어지고 있네요...ㅠㅠ) 요즘 기말고사 채점과 계절학기 수업 준비, 그리고 가장 큰 것은 논문준비로 인해서 입니다. (그럴거라는 생각은 안하지만..) 혹시 연재를 기다리시는 분들께는 꽤나 죄송합니다. 이제 좀더 하고 나면, 하드웨어(DSP2812)적인 부분도 다뤄야하는데 말이죠.^^

거기다 또 하나 고민이 생겼는데, 이전(2005년)에 저희가 밸런싱로봇을 한 번 만들었다[관련글]는 사실을 이야기했었는데요. 이것을 가지고, 그대로 진행하는 것은 왠지 좀 부족하지 않나 싶어 로봇의 YAW움직임도 제어하는 밸런싱로봇을 만들어야하지 않을까 생각하게 된겁니다. 그렇게 할려면 동역학도 수정되어야하거든요. 하드웨어적인 이야기를 진행하기 전에, 로봇의 동역학을 수정할려면 지금해야할 것 같아서요.

Yaw 움직임을 고려한 동역학을 수립하기로 결정하긴 했지만, 또 혹은 당연히 닥쳐오는 문제는 당연히 어떻게?? 입니다. 이럴때 가장 좋은 도구는 역시 우리 구글이죠. 딴 이야기입니다만, 전 개인적으로 네이버는 간략화된 정보(창원 맛집?, 춘천 드라이브 코스?) 뭐 이런 정보를 찾을 때, 혹은 요즘 부쩍 좋아하는 애프터스쿨의 사진 찾기? 등등으로는 꽤 좋은데요. 문서화된 정보를 찾는 것은 구글이 좋더군요^^ 하여간 구글로 찾다보니 좋은 문서가 하나 나타나던데요.

바로 저 놈입니다. 레고(Lego) 마인드스톰(Mindstorms) NXT 라는 모델입니다. 인터넷을 찾아보시면, 쉽게 관련 동영상을 확인하실 수 있습니다. 이 레고의 로봇의 모든 것은 기술문서화 되어서 인터넷에 배포되고 있더군요. 문서의 저자는 Yorihisa Yamamoto라는 분으로 CYBERNET SYSTEM 사의 Application Engineer라고 합니다. 하여간 저 분이 작성한 Lego Mindstorms NXT 모델의  기술문서를 읽게 되었습니다.

그리고, 그 문서를 통해 장인의 손길을 느끼게 되네요. 제 자신이 상당히 작아진 느낌입니다.ㅠㅠ 역시 우물은 좁고, 우린 스스로가 개구리라는 사실을 모르고 살고 있는 모양입니다. 이 타이밍에 제가 존경해 마지 않는 율리우스 카이사르(Julius Caesar)의 말이 생각이 나는군요.

"사람은 자신이 보고 싶은 것만 본다."
Julius Caesar

그래도 지금이라도 알았으니 참 다행이에요^^. 이번 포스팅의 모든 내용은 레고사의 기술문서에 있는 내용입니다.


레고사의 밸런싱로봇을 간략히 도식화한 그림입니다. 로봇의 폭은 W, 두게는 D, 높이는 H이구요. 좌우 바퀴의 각도를 각각, theta_r, theta_l로 두고, 바퀴의 반지름은 R로 두었습니다.

이 위의 그림이 가장 중요한 그림인데요. 이 후 수식의 전개를 설명하니까요.^^. 바퀴의 질량은 m으로 두고, 몸체의 질량은 M으로 둡니다. 몸체가 쓰러지는 방향의 관성모멘트는 J_psi로 바퀴의 관성모멘트는 J_w로 두었습니다. 로봇 전체 길이 H의 절반을 무게중심까지의 거리 L로 두었구요. 로봇의 Yaw 각도는 psi로 두었습니다. 오른쪽 그림에서 좌표계에 아랫첨자 l은 왼쪽바퀴의 회전중심의 좌표이구요, r은 오른쪽 바퀴에 대해서 입니다. 아랫첨자 m은 두 바퀴의 중심입니다. 아랫첨자 b는 로봇이 기울어지게 되면, 로봇의 무게 중심이 바퀴축의 수직축상에 있지 않고, x-y평면에서 보면 밖으로 나오게되는데요. 그때의 좌표입니다.

이때, 두 바퀴의 회전각도의 평균을 theta라고 두었습니다. 그리고, Yaw각인 psi를 잡는 부분이 나오는데요. 이건 추가 설명이 좀 필요하겠네요.

위 그림을 보시면 됩니다. 바퀴가 굴러가서 만든 원호의 길이 R(theta_r - theta_l)은 yaw각 psi에 의한 원주의 길이와 같아야겠지요. 그러니 라디안각 기준으로 W * psi = R * (theta_r - theta_l) 이어야할 겁니다.

그렇다면 두 바퀴의 중심의 좌표 (x_m, y_m, z_m)은 쉽게 도출가능한데요. 이것의 변화율은 일반적이지 않습니다. 두 바퀴 중심의 좌표의 변화율에 phi가 관여하지 않기 때문입니다. 그러므로, theta, phi가 모두 시간에 대한 함수이긴 합니다만, 두 바퀴 중심의 위치의 속도성분을 고려할때는 theta만 미분하게 됩니다.

이제, 그 바퀴중심의 좌표에서 왼쪽 바퀴의 좌표(x_l, y_l, z_l)과 오른쪽 바퀴의 좌표(x_r, y_r, z_r)는 쉽게 도출 가능하구요. 로봇의 무게 중심의 좌표(x_b, y_b, z_b)의 경우는 로봇이 기우는 각도 psi가 고려되어야합니다.

이제 본격적으로 동역학을 구축하기 위해서는 뉴턴역학을 이용한 방법인지 에너지를 이용한 라그랑지 방법을 이용할 것인지 생각해줘야합니다만, 통상 에너지식을 잘 수립할 수 있다면, 역시 라그랑지 방법만큼 편한 방법도 없지요^^ 그래서 운동에너지와 위치에너지를 구해야합니다. 운동에너지 중에서 먼저 병진운동에너지는

입니다. 세 개의 좌표(오른쪽, 왼쪽 바퀴와 로봇의 무게중심)를, 즉, 위치를 알고 있느니, 

 T = 1/2 * m * v^2 

이라는 고등학교 물리에 나오는 운동에너지 식을 사용하면 됩니다. 이제 좌표 각 성분의 제곱에 대해 고려하면 되지요. 문제는 회전운동에너지 인데요. 이는 병진운동성분에서 질량(m)을 관성모멘트(J)라고 생각하면

 T = 1/2 * J * omega^2

이 됩니다. 이를 가지고 구하면

입니다. 처음 네 개의 항은 바퀴 두개와, 로봇의 기우는 각도, 그리고, yaw 각도에 대해 각각 회전 운동에너지를 생각해 준 것이구요. 마지막 두 항은 모터가 회전하면, 바퀴도 굴리게 되지만, 그 반작용으로 로봇의 몸체에도 영향을 주게 되죠. 그것을 모터의 기어비(n)를 고려해서 만들어 준것입니다. 얼마전에 포스팅했던, Reaction Wheel Pendulum에 관한 글[관련글]에서, 이걸 알았다면, 좀 더 아름답게 정리 할 수 있었을 텐데 말이죠..ㅠㅠ (이것도 다시 포스팅 해야겠어요.. ㅎㅎㅎ)

하여간, 이렇게 운동에너지 모두를 고려했습니다. 위치에너지는 상대적으로 좀 쉬워요. 역시 우리가 배운 고등학교 물리에 의해 위치에너지는

U = mgh

라고 알고 있으니, 각 위치 좌표의 z축 성분만 가져다 놓으면 됩니다.

이렇게 말이죠^^

라그랑지 방법을 사용하는 다음 단계는 라그랑지안(Lagrangian)을 수립하는 것인데요. 총 운동에너지의 합에 총 위치에너지의 합을 빼면 됩니다.

그리고, 설정한 상태에 대해 라그랑지 방정식을 구해주면 됩니다.

이 과정과 외부힘 F, 그리고, DC 모터를 포함한 동역학의 완성은 다음에 포스팅해야겠네요. 아침 7시거든요. 배고파요...ㅠㅠ 아침먹으로 가야죠^^

신고