본 내용은 현재 너무 오래되고 포스팅의 내용이 자세하지 않아 다시 포스팅을 했습니다. 연재를 수행했지만, 최종글인 http://pinkwink.kr/344 을 읽으시면서 링크를 따라가시면 됩니다.

2005년인가 2006년에 일인승 스쿠터로 많은 사람들의 관심을 끌었던 Segway라는 제품(회사?)가 있었습니다. 얼마전에 읽은 블로그에서는 이제 2인승도 나올거라고 하더군요. 여하튼 당시 그 모델을 보고 제어나 전자를 전공한 학생들이 한번쯤 만들어 보고 싶어 했었거든요. 우리 실험실도 그래서 당시(2007년) 학부논문조와 함께 작업을 했었습니다.

 

I. 시작하기 전에 

 밸런싱로봇은 그 구동방법이나 원리등이 역진자 시스템과 아주 흠사합니다. 뭐 딱 봐도 카트형 펜들럼이죠. 일단, 실제 제작전에 카티아(Catia)로 외형을 잡고 아이디어 회의를 했었네요.


위의 그림이 당시 어찌어찌 하면서 잡은 외형입니다. 모터를 놓을 자리나, 센서의 위치, 적절한 무게등등을 논의 했었죠.


이번엔 못쓰는 시디와 그 시디 케이스와 빨대(^^)로 모형을 제작해 봤습니다.


음... 이게 최종적으로 만들어진 모형입니다. 허접 납땜의 모습이 보이지만, 전시를 위해 데코레이션도 나름대로 좀 했었죠...ㅜ.ㅜ


당시 사용한 맥슨모터의 스펙입니다.


II. 동역학 방정식 유도


뭐 우리가 항상하듯이 또 동역학 유도 해야지요^^ 밸런싱 로봇을 위와 같이 간략화 할 수 있습니다. 무게들이 극단적으로 위 그림처럼 배치되어있다고 보는 겁니다. 지구 중심에서 쓰러진 각도를 phi라하고 지구중심에서 바퀴가 돌아간 각도를 theta라 하고 몸체에서 바퀴가 돈 상대 각도를 beta라고 했습니다.


위는 각 펙터들의 의미입니다.


또 다른 이야기 하나하면, 위의 문자에 이상한 &기호 보이시죠? 이후에도 계속 저런 &기호를 만나실 텐데, 저건 미분을 의미하는 dot입니다. 즉, theta_dot 이 theta_&로 표기되어진 것입니다.
 음. 위 방법은 라그랑지방법으로 동역학을 유도할려고 하는 것입니다. 그러기 위해서 위에서 나온 T, U, D, Q를 구해야만 합니다.


위에서 구한 운동에너지나 위치에너지등등을 그 위의 원식에 대입하면


와 같은 비선형식을 얻게 됩니다.


III. 동역학 방정식의 검증

 당연히 위의 동역학 방정식을 검증해야만 합니다. MATLAB/Simulink를 이용하여 검증을 수행했습니다. 실제 기구부를 거꾸로 뒤집어서 단진자처럼 자유운동을 하는 움직임을 시켜놓고 그 데이터를 MATLAB에서 확인한 것입니다.


위는 그때 사용한 MATLAB/Simulink 블럭도입니다. 일단 시뮬레이션 결과만보면


와 같습니다. 그래프를 잘 보면 몸체의 각도가 90도와 270도를 지날때마다 바퀴의 방향이 바뀌는 것을 볼 수 있습니다. 이는 90도 270도 지점에서 진자 운동을 하면서 바퀴에 대해 반대의 힘을 받기 때문이라고 생각됩니다.


다시 자세한 시스템 ID를 위해, 실제 기구부의 wheel을 고정시키고 몸체만 진자운동시켜서 위의 시뮬레이션 결과와 비교합니다.


일단 저정도가 최대한 일치시킨 정도입니다.


이번에는 실제 기구부의 몸체를 고정시키고 Wheel만 등속 회전 운동을 시킨 결과를 비교하기 위해서입니다.


이 부분도 역시 최대한 일치시킨것입니다.


위의 실험으로 시스템의 모든 파라미터를 ID할 수 있었습니다.


IV. 제어기 설계


이렇게 해서 비선형 방정식을 이제 선형화후 상태방정식으로 표현해야겠습니다.


0도부근을 동작점으로 잡아야겠지요?^^


선형화 되었습니다. 여기서 다시


몇몇 변수들을 치환하고


위와 같이 간단히 표현했습니다.


위의 형태의 상태방정식으로 표현하면


이렇게 될 것입니다.


상태궤환을 사용하여 각 상태를 항 상 0으로 유지하는 레귤레이터를 LQR을 이용하여 설계할 수 있습니다. 상태방정식을 블럭선도로 표기하면 위와 같습니다. 이때 제어기 K를 고려하면


와 같이 꾸며지게 될 것입니다.


이때 제어입력을 위와 같이 잡은 것입니다. 이를 상태 방정식에 대입하여 다시 정리하면


이렇게 됩니다.

MATLAB에서 제공하는 lqr명령어를 사용하여 간단히 제어게인 K를 구할 수 있습니다.


제어기를 테스트하기 위한 Simulink 블럭입니다.


제어 결과는 아주 만족스럽습니다.^^


V. 하드웨어 구성


저희가 이 밸런싱로봇을 구동하기 위해 사용한 하드웨어적 장비들은


먼저 DSP2812를 주 프로세서로 사용했습니다.


모터와의 절연을 위해 Photocoupler는 HCPL2731을 사용했구요.


모터 드라이버로는 LMD18200을 사용했습니다.

VI. 성공^^





동작 결과 동영상을 보시죠^^ (아래 동영상은 본문에서 말하는 로봇의 다음 버젼입니다. 당시 동영상으로 기록을 남기지 않고 바로 다음버젼으로 넘어갔습니다. 동영상의 로봇과 본문의 로봇이 형태가-껍데기(^^)가 다르다는 것을 알 수 있으실겁니다.)







저작자 표시 비영리 변경 금지
http://pinkwink.kr/trackback/38 관련글 쓰기
  • 밸런싱 로봇의 동역학 유도 Trackback from PinkWink's Blog 2010/01/03 05:17 [ DELETE ]

    이번에 크리스마스때 태국에서 개최되는 학회를 다녀왔는데요. 비행시간이 6시간인데 갈때 너무 지루하더군요. 잠도 오질 않고... 그래서 이전에 밸런싱로봇([공학기초/Robot] - Balancing Robot 밸런싱 로봇) 동역학이 엉망으로 정리된듯해서 그걸 다시 정리해서 올려야겠다고 생각하고 정리했습니다. 비행기 안에서 주는거 다 받아 먹으면서 정리했더니 대략 한 3시간 정도 걸렸네요. 뭐 그래도 지루하지 않은 비행이었습니다^^. 이번엔 저도 이걸..

  • 검도쉐프 2009/06/14 01:30

    옷~ 포토커플러! 반가운 녀석이 보이네요.
    이거 유럽쪽에서 사람들 타고 다니는 그거 같네요. 재미는 있어보이던데, 양복입은 사람이 타고 다니니 좀 웃기긴 하더라구요. ^^

    • PinkWink 2009/06/14 01:46

      사실...저도 하나 장만하고 싶었는데...ㅎ
      가격에 비해 효용가치가 저한텐 그리 높지 않아서요^^

  • now 2009/09/11 21:03

    대단하시네요. 엔코더 만으로 각도 추출하여 만들다니..
    동영상 보니까 제어도 잘 되는거 같에요.
    저도 지금 만들고 있는데 가속도랑 자이로 센서 이용해서 만들고 있는데 님이 만드신 것만한 포퍼먼스가 안나오네요..
    질문 있어요.
    각도, 각속도, 이동거리, 속도 이용해서 세우는 것까진 완성했는데, 손으로 밀면 자꾸 앞으로 가다가 넘어지네요. 방법이 없을까요. 각 팩터들 앞에 가중치만 주고 더해서 속도 조절하고 있는데 잘안되네요. 조언 부탁 드립니다.

    • PinkWink 2009/09/11 22:18

      먼저... 현상에 대한 답변은 항상 틀릴수도 있다는 사실을 알아주세요... 전 정확하게 알 수 없으니...
      일단 센서부터 확인하셨나요?
      기울어진 각도, 각속도, 이동한 거리, 속도는 참값이 맞는지... 확인하시길 바랍니다. 센서 쪽 측정결과가 안좋으면 뭐 시작할 수도 없을테니까요... 그것이 확인이 되었다면... 그다음은...
      제어기를 확인해 보세요...
      만약 MATLAB을 다루실줄 안다면, 동역학방정식과 제어기를 결합하고 도출된 제어게인을 이용해서 안정화가 되는지를 확인해야합니다. 올바른 시뮬레이션을 수행했다면, 시뮬레이션에서 동작하지 않는 제어기는 대부분 실제에는 적용해봐야 엉망입니다.

      위 단계를 밟아 확인해보시길 권장합니다^^

      그러나 개인적 의견으론...
      센서의 출력이 실제와 같다면...
      제어기의 문제일 확률이 (다른 부분의 아직 인지하지 못한 실수가 없으시다면...) 높다고 생각됩니다.

  • 제어인 2009/09/24 01:14

    정말 잘 보았습니다.

    엔코더만 이용하여 두 바퀴 균형로봇을 완성하셨다니 정말 대단하다는 생각이 듭니다.

    그런데 자이로 센서를 사용하지 않으셨다니 몇가지 의문이 생깁니다.
    제 짧은 생각으로는 자이로 센서 없이 로봇을 두바퀴로 세우기는 어렵다고 생각하고 있습니다.
    물론 수학적인 모델을 통한 시뮬레이션은 가능하겠지만 실제는 수학과는 다르니까요.
    동영상을 보니 자이로 값이 정상이라는 말이 나오는데 자이로 센서를 사용하신 것인가요?
    마지막으로 동영상에서 손으로 로봇을 미는 동작을 하셨는데 동역학모델에서는 고려되지 않은
    외력에 반응하는 모습을 보니 자이로가 없이는 영상에서처럼 능동적으로 움직이는게 가능한가
    하는 의문이 듭니다.
    정말 자이로 센서의 각속도 출력을 전혀 사용하지 않으셨다면 손으로 미는 동작을 했을때
    로봇의 기울어진 각을 수동으로 입력하여 그 각을 초기값으로 시스템을 리셋하신것은 아닌지
    알고 싶습니다. 동영상중 키보드 소리가 혹시 각도를 리셋해주는것이 아닌지 궁금합니다.

    제 글에 기분상하셨다면 죄송합니다. 전 다만 저의 수준에서 잘 이해가 가지 않아서 글 남깁니다.
    괜찮으시다면 좀더 자세한 설명을 부탁드립니다.

    • PinkWink 2010/05/03 19:34

      죄송합니다. 엔코더만 이용했다는 내용을 수정했습니다.

      본론으로 들어가서

      제가 원래 하고 싶었던 말은
      '각도'를 직접 측정하는 장비는 엔코더 뿐이다 입니다.
      자이로를 이용한 '각속도'측정은 하고 있습니다.
      단지 자이로를 적분하여 '각도'를 구하는 것을 못해서 사용을 못했다는 이야기입니다.

      그 다음 초음파 센서를 비스듬하게 앞뒤두개에 장착해서 몸체의 각도를 잡을려고 한것입니다. 보시는 동영상은 그것입니다. 넘어지는 각속도는 자이로로... 각도는 초음파센서로...

      그리고, 동역학에서 외란을 고려하지 않아도, 선형화시키는 범위내에서 (혹은 좀더 크더라도) 외란에 대해서는 견디는 편입니다. 밸런싱이 오히려 좀 약한 편이고, 역진자 시스템의 경우는 더욱 강합니다. 물론 외란을 고려하는 많은 역학적 방법들이 있지만, 자신이 견딜 범위는 분명 존재합니다.

      또한... 동영상중 들리는 소리... (좀 웃기게 들리시겠지만, 전 이 동영상의 소리를 한번도 들어본적이 없습니다. 찍을땐 같이 있었고 동영상중 웃는 소리가 접니다만...)를 키보드 같다고 하신 그 소리...^^.. 그건 키보드 소리가 아니고, 로봇에서 나는 소리입니다. 음.. 자꾸 돈없는걸 강조하는 듯 해서 창피하긴 합니다만, 모터에서 바퀴까지 기어를 장착했는데 싼값에 제작했더니 정확하게 물리질 못하고 약간 간격이 생겼습니다. 게다가 저희가 직접 나머지 바디 부분은 손으로 제작하다 보니 기판이 연결되는 부위나 랜딩기어의 개념으로 단 보조바퀴(구동중에는 땅에 닿지 않으니...)등에서 나는 소리입니다. 로봇이 앞뒤로 움직일때 싱크가 적절히 잘 맞다는 것을 아실수있을겁니다.^^.

      그리고 저 기분 안나쁩니다. 오히려 제어인께서 기분이 나쁘실듯합니다. 본문의 내용을 일목요연하게 정확히 작성하지 못하고, 쓸데 없는 시간을 낭비하게 해드려서 죄송합니다.

  • 간지러움 2009/12/24 05:44

    안녕하세요. 저는 전자공학과에서 로봇을 공부하는 학생입니다.
    좋은 글 정말 잘 읽었습니다!
    그런데 중간에 모터와 바퀴를 연결하는 기어를 어디서 제작하신 건지
    무척 궁금한데 가격과 같은 정보를 가르쳐 주실 수 있나요?

    • PinkWink 2009/12/24 07:24

      저희가 깎았습니다^^ 아름답게 딱맞는 제품을 찾기가 어렵거든요..^^ 바퀴는 괜찮은 걸 인터넷으로 찾았고 모터와 맞는 연결 축은 깎은 수 방에 없더군요^^

  • racer 2010/01/12 11:54

    안녕하세요?
    자이로 가속도계 융합에 대한 글에 이어 이글도 읽어보았습니다.^^
    박사과정이신가영? 내공이 상당하신듯하네영 ㅠ

    궁금한점이 있는데여 혹시 모델링 이후에 파라미터 즉
    바퀴의 관성모멘트나 로봇바디의 pitch나 yaw방향의 관성모멘트는 어떤 방법으로 구할 수 있는지 알고 싶습니다

    • PinkWink 2010/01/12 12:15

      관성모멘트와 마찰계수는 측정할 만한 장비가 없어 딱맞는 실험법은 아닙니다만 실험으로 측정했습니다.

      예를 들면, 관성모멘트는 회전중심출을 고정하고 자유운동을 시킵니다. 그래서 회전중심축에서 시간에 대한 각도를 데이터로 저장한 다음 그 데이터를 보고 잡았습니다.

      그리고 저희는 진행방향(x축)에 대한 동역학만을 고려했기 때문에 -중간에 방향을 트는 것은 동역학을 유도한 것이 아니라 순간순간 바퀴의 기준 각도를 틀어준것입니다.- pitch와 yaw각에 의한 측, y축 z축 중심의 관성모멘트는 측정할 필요가 없었습니다.

  • 하급공학자; 2010/02/25 13:59

    정말... 내공이 대단하신듯 하네요 ^^

    전 이제 석사 1년차 들어가는데... 실례지만, 학교가 어디신지 물어봐도 될런지 후후후;;;

    대답안하셔도 됩니다;

    이제 학부를 마치고, 올라가는데, 기껏 아는것은 공업수학이랑, 미적 나부랭이 밖에 아는게 없고,

    AVR, DSP조금 만질줄아는데... 전 언제쯤 저정도의 내공을 쌓을까요;;; 부럽습니다.

    • PinkWink 2010/02/25 14:49

      저도... 조금밖에 할 줄 모릅니다...ㅜ.ㅜ
      저는 따뜻한 남쪽 창원에 있답니다...^^

  • 엘리 2010/04/21 22:12

    어떻게 식이 저렇게 나오는지 완전....봐도봐도 가슴만 답답;;;;
    그냥 전 단순하게 접근해서 저런식이 세워지지가 않아요 ㅠㅠ

    상태방정식도 우째 저렇게 나오는지도 갑자기 확틔어 나오는거 같음;;;;;

    • PinkWink 2010/04/22 09:02

      동역학에서 상태방정식으로 가지 말고..
      상태방정식에서 동역학으로 가보면... (역으로)
      이해가 될 수 있습니다.
      그리고 이 글보다
      http://pinkwink.kr/244
      여기를 참조하세요

  • 열공학부생 2010/07/12 21:34

    안녕하세요 MCU를 공부하고 있는 학부생인데, 지금 밸런싱 로봇을 만들고 있어요. L298로 모터를 컨트롤 하는 중에 전류가 딸려서 인지는 잘 몰라도
    제대로 컨트롤이 되지 않더군요... 그래서 LMD18200을 두개 사용해서
    모터를 제어하려는데 희안한 점이 발생했어요.. 각 모터 따로 구동하면 잘
    동작하는데 두 모터를 동시에 동작시키면 하나만 동작이 되네요...ㅜ
    이유를 잘모르겠어요.. 핑크윙키님도 LMD18200을 사용하셔서 이렇게 질문드립니다..ㅜㅜ

    • PinkWink 2010/07/13 02:11

      글쎄요... 저도 정확히는 잘 모르겠습니다.
      저흰 그저 하나의 파워서플라이(혹은 배터리)에서 병렬로 연결해서 사용하고 있는데요...

    • 김현진 2010/10/24 19:03

      오래된 글이긴 하지만
      이건 배터리 용량 문제라고 90프로 확신합니다.
      어떤 배터리 사용하시는지 모르겠지만 로드가 많이 걸리면 전류량이 증가하여 배터리 내부저항에 의해 전압강하가 생겨 구동력이 떨어집니다.

    • PinkWink 2010/10/24 20:20

      네.. 그럴 수도 있겠네요...^^

  • hong 2010/10/05 15:50

    학교 텀프로젝트로 세그웨이 만들고 있습니다. 하나하나 다 공부해가면서
    만들려고 하니 보통 힘든게 아니네요ㅜㅜ
    자이로센서나 가속도센서의 위치는 하단부에 놓으신건가요??
    센서들의 위치에 따라 반응속도가 달라진다던가 하는 그런 점은 없는거죠?

    • PinkWink 2010/10/05 19:55

      가속도 센서는 당연히 반응이 다릅니다...
      그러나... 자이로센서와 잘 융합하면 밸런싱로봇의 경우는 센서 위치에 큰 무리가 없더군요...

    • 김현진 2010/10/24 19:05

      하단부에 위치하는 이유는 아마도 가속도계 때문일것입니다. 자이로는 위든 아래든 위치에 별로 관계가 없지만 가속도의 경우 원운동을 할때 호의 길이는 R*theta 즉, 호의 반지름이 클수록 선형가속도에 미치는 영향이 커지니깐요 이는 가속도계를 이용해서 각도를 추정하려는 원래 생각에 나쁜영향을 미치지요 그래서 아래에 다는게 좋습니다(아래 : 동체 회전축에 가까운곳)

    • 김현진 2010/10/24 19:09

      아.. 그리고 반응속도라는 것은 위에 달든 아래달든 관계없습니다.. 반응속도는 센서 자체의 대역폭에 의존하지요..

  • 이영일 2012/11/13 16:51

    pic 를 공부하면서 프로젝트로 한번 만들어 보려고 하는데요
    필요한것이 무엇인지 잘 모르겠네요 부품들 설명은 많이 없는거 같구요,,
    현재 모터 자이로센서 구조는 다 완성을 했는데 더 필요한것이 무엇이 있을지 궁금하네요
    모터의 자리를 다 잡아놓은터라 혹시 엔코더가 꼭 필요할까요? x 포지션을 얻을수 있는방법이 또 있나요?
    그리고 가속도센서와 가속도 센서를 같이 사용해야 하면 좋다고 하시는데 자이로 센서 하나만으로는
    제어가 안될정도로 부족한가요??

    • PinkWink 2012/11/14 13:00

      엔코더와 같은 로봇의 이동거리를 알 수 있는 센서를 사용하지 않으면, 로봇이 제자리에있거나 혹은 어디로 이동시키기 힘듭니다. 또... 자이로센서만으로도 제어하신 분들의 동영상이 많이 있습니다. 전 그렇게 시도하지 않았구요.

  • 이영일 2012/11/16 19:39

    혹시 자이로센서만으로 제어하는거 링크라던가,, 방법이라던가 알수 있을까요?
    모터에 들어가는 전압에 대해서 역으로 계산을 하면 x 변위를 알 수 있을까요?

    • PinkWink 2012/11/18 15:59

      저도 한번보고 지나같던거라 기억은 잘 나지 않습니다. 그냥 자이로 밸런싱로봇으로 검색하셔도 될듯해요
      모터의 전압을 역산한다능 것도 꽤 많은 오차를 가지게 됩니다. 너무 많은 오차지점이 있어서요ㅠㅠ

  • 차영택 2013/07/01 11:31

    매트랩을 통해 하드웨어를 제어해보고 싶은 학생입니다. 매트랩을 사용하는 부분은 어떻게 이해하겠는데, 보드를 어떻게 제어해야 하는지 궁금하네요? 올리신 내용에는 C로 코딩하신 것 같은데, DSP보드를 제어하는데, 어떤 지식을 쌓아야 하는지? 교육이 있다면, 어떤 교육들을 들어야 하는지 궁금하네요. 어떤식으로 배워가야하는지 알려주시면 감사하겠습니다.

    • PinkWink 2013/07/01 14:24

      글쎄요. DSP를 사용하기 위한 지식들이 좀 필요할 겁니다. 그 중에서도 PWM이나, 시리얼통신 등을 사용해야하고, 별도로 이 글에서는 ADC도 사용을 했답니다.