이 글은 블로그라는 특수성으로 인해 편집의 형태가 달라질 수는 있지만, 디바이스마트가 발행하는 잡지에 동시에 기고되는 글입니다. [디바이스마트매거진]. 그래서 글의 어투가 블로그에서 제가 오랫동안 사용하던 존칭이 아닙니다. 스케이트보드로봇 연재에서만 그러하니 기존의 블로그이웃들께서는 오해 없으시길 바랍니다.

 스케이트 보드 로봇(세그웨이 같은 로봇은 모두)은 가장 중요한 제어목적이 로봇이 쓰러지지 않게 한다는 것이다. 나중에 다시 이야기 하겠지만, 로봇이 쓰러지지 않게 하기 위해서는 로봇이 기울어지는 각도와 그 각속도를 ‘0’로 만드는 것이 가장 중요하다. 그렇게 하기 위해 또한 적절하게 모터를 가동시켜야 한다. 그렇게 제어기를 구성하기 위해서는 당연히 로봇이 기울어지는 각도와 각속도를 측정할 수 있어야 하고, 더불어 모터를 구동할 수 있어야 한다. 이번 회에서는 스케이트보도 로봇의 각도와 각속도를 측정하는 부분과 모터를 구동하는 부분을 포함하여 제어기가 탑재될 펌웨어를 제외한 전체 회로부분을 다룬다.




   1. 각도 측정하기  
 


 세그웨이나 세그웨이를 작게 만든 밸런싱 로봇이나 혹은 이번 연재의 주제인 스케이트보드로봇까지 로봇의 기울어진 각도를 측정해서 쓰러지지 않게 하는 것이 중요하다. 이미 디바이스마트 잡지에 ㈜위드로봇에서 MEMS 센서를 소개하는 연재를 통해 각 센서별로 사용상의 어려움에 대해 다룬 것으로 안다. 그러나 연재를 진행하는 입장에서 다시 한번 정리를 하고자 한다. 각도를 측정할 수 있는 방법은 아주 많다. 만약 센서를 하나 사용해서 깔끔하게 각도가 측정된다면 얼마나 좋을까. 그렇게 할 수 있을 것 같은 몇몇 센서를 보자.

A. 엔코더
B. 기울기 센서
C. 자이로 센서
D. 가속도 센서

 이렇게 4개 정도가 일반적으로 많이 알려진 후보다. 개괄적으로 장단점을 이야기하면, A. 엔코더의 경우 상대적으로 정확한 각도를 측정해 주지만, 고정점이 없으면 각도를 측정할 수가 없다. 즉, 세그웨이와 비슷한 타입의 로봇처럼 각도를 측정하기 위해 고정점을 설치할 수 없는 경우는 엔코더는 사용할 수가 없다. B. 기울기 센서는 얼핏 센서의 이름만 보면 많은 희망을 주지만, 저가형으로 판매되는 기울기 센서들은 내부의 유체나 구슬 같은 것의 기울어진 각도를 측정하는 것으로, 포함된 유체나 구슬로 인해 올바른 각도를 출력하는데 많은 시간이 걸리거나 혹은 진동이 심하게 된다. 한마디로 응답시간이 너무 느리다는 단점을 가지고 있다. 이것은 스케이트보드와 같은 로봇들에는 적용하기가 힘들다. [관련글] C. 자이로 센서는 출력이 각속도이다. 간혹 인터넷의 질문과 응답 게시판에 보면 이를 혼돈하는 경우를 많이 보는데, 자이로는 각속도를 출력하는 센서이다. 그러므로 각도를 구하고 싶다면, 당연히 자이로의 출력(각속도)을 적분을 해야 한다. 문제는 여기에 있다. 어떤 센서이든지 적분이라는 과정을 거치는 경우 반드시 나타나는 현상이 있다. 흔히 드리프트 현상이라고 부르는 것으로, 적분 오차가 누적되어 나타나는 현상이다. 이 적분 오차가 아무리 작아도 결국은 시간이 흐르면 각도 측정에 문제가 생기게 된다. [관련글] 마지막으로 D. 가속도 센서의 경우는 간단히 삼각함수를 이용하면 각도를 측정할 수 있다. 그러나 가속도 센서는 센서의 중심이 회전의 중심과 가급적 일치하면서 병진운동이 없어야 각도 추정이 용이하다. [관련글
 위에서 방금 이야기한 센서를 하나만 사용했을 때, 문제점들이 극복이 불가능한 것은 아니다. 각종 인터넷 자료나 논문들을 검색해 보면, 위에 열거한 문제점들을 극복하는 많은 방법들이 나타나 있다. 또한 좀 더 고가의 좋은 성능을 가진 센서를 사용하는 경우 센서를 하나만 사용해도 좋은 결과를 얻을 수 있다. 그러나 저가의 MEMS형 센서를 사용하여 각도를 추정하고자 하는 경우를 가정하면 각도를 측정할 수 있는 익히 알려진 좋은 방법은 두 개 이상의 센서를 융합하는 것이다.
그러나 두 개 이상의 센서를 융합하는 것도 그리 만만하지는 않다. 일반적으로 자이로 센서와 가속도 센서를 대상으로 칼만필터나 혹은 상보필터를 적용하는 것이 많이 사용된다. 항공이나 필터관련 전공자나 혹은 오랫동안 공부한 사람이 아니면 칼만필터나 상보필터를 이해하고 적용하는 것에 많은 시간을 들이게 된다. 물론 이와 같은 센서 융합기술을 익히고 자기 것으로 만드는 것도 좋은 일이지만, 우리는 지금 스케이트보드로봇을 만드는 것에 초점이 맞춰져 있으므로 여기에 많은 지면을 –바꿔 말하면 노력을- 투자하는 것은 상황에 맞지 않은 것 같다.
 그림 2에 관성항법장치 중 한 종류인 ARS(Attitude Reference System) 장비가 있다. 그림 2에 보이듯이 ARS 장비는 물체의 자세를 의미하는 Yaw, Pitch, Roll 중에서 Pitch와 Roll을 측정하는 장비이다. 뭐 사실 스케이트보드 로봇을 만드는 데는 한 축에 대한 회전각도와 각속도만 검출할
수 있으면 되지만, 시중에 그와 같은 장비는 없으니 ARS를 사용하고자 한다. ARS 중에서 필자의 연구팀에서 최근 판매를 시작한 NT-ARSv1[판매처]을 사용하기로 한다.

[그림 2] NT-ARSv1


[그림 3]. 엔티렉스에서 판매 예정인 스케이트보드 로봇 NT-SBMRv2


[그림 4] 스케이트보드 로봇 내부에 장착된 NT-ARSv1


 그림 3의 스케이트보드 로봇 내부에 그림 4와 같이 ARS 장비인 NT-ARSv1을 장착했다. 사용된MCU는 AVR – AT90CAN64이다. NT-ARSv1의 배포 매뉴얼을 참조하여 각도를 받아오는 부분은 다음과 같다. 장착된 방향 상 NT-ARSv1의 roll각을 받으면 된다. 다음 회 연재에서 적용할 제어기를 위해서 각속도 성분인 자이로의 값도 받도록 한다. NT-ARSv1의 또 하나의 장점은 자이로에서 나오는 각속도를 [rad/sec]단위로 직접 전송해 주기 때문에 바이어스를 고려하고, 스케일 펙터를 고려하는 것은 걱정할 필요가 없다. 그리고 아래 코드는 CAN통신을 사용한 것이다.

1: // roll angle 음수일 때

2: if((can_rx_data[0] >> 7) == 1){

3: roll = can_rx_data[1];

4: roll += can_rx_data[0] << 8;

5: roll = -(roll & 0x7fff);

6: }

7: // roll angle 양수일 때

8: else{

9: roll = can_rx_data[1];

10: roll += can_rx_data[0] << 8;

11: }

12: roll_angle = (double)roll / 1000.0;

13: // gyro_x 음수일 때

14: if((can_rx_data[4] >> 7) == 1){

15: gyro_x = can_rx_data[5];

16: gyro_x += can_rx_data[4] << 8;

17: gyro_x = -(gyro_x & 0x7fff);

18: }

19: // gyro_x 양수일 때

20: else{

21: gyro_x = (can_rx_data[4] << 8);

22: gyro_x += can_rx_data[5];

23: }

24: gyro_x_angle = (double)gyro_x / 1000.0;

 
 위 코드에서 12행과 24행의 roll_angle과 gyro_x_angle이라는 변수가 각각 roll방향으로 회전한 각도와 각속도를 받는 부분이다. NT-ARSv1의 매뉴얼에 따라 각각 양수와 음수인지를 판단하고, 16비트데이터가 8비트크기의 배열로 전송이 되는 것을 고려하고 있다. 마지막으로 전체 데이터는 1000을 곱한 상태에서 전송되므로, 1000으로 나눠주면, 라디안(radian) 단위의 각도와 각속도를 측정할 수 있다.




   2. 모터 드라이버 선정  
 

[그림 5] 스케이트보드 로봇 내부에 장착된 DC 모터 드라이버


[그림 6] DC모터 - MY1016Z2-200W-24V


 스케이트보드 로봇의 구동 모터로는 그림 5의 내부 그림에 보이듯이 디바이스마트에서 판매하고 있는 DC모터인 그림 6의 MY1016Z2-200W-24V를 대상으로 하고 있다. 이 모터는 최대 구동 전압이 24V에 무부하 전류는 1.8A이다. 정격 최대 토크가 6.65Nm에 정격 최대 전류는 13.7A이며, 토크 상수는 0.559 이다. 모터의 내부 저항은 1.82옴에, 기어비는 9.7:1이다.
 현재 스케이트보드 로봇의 전체 가격과 부피 등을 고려하여 선정한 DC모터가 아쉽게도 구동 전류가 높은 편이다. 그로 인해 저렴한 가격의 일반적인 DC모터 구동 드라이버는 적용하기가 쉽지가 않다. 물론 직접 회로를 꾸며도 상관없지만, 꼭 여기서 모터 드라이버를 만드는 것을 다룰 필요는 없을 것 같다. 모터 사양에 맞춰 직접 제작해도 되지만, 이 연재가 발표될 시점에 출시 예정인 NT-DC20A[판매처]라는 1채널 DC 모터 드라이버 두 개를 사용하도록 하겠다. 그림 5에 빨간 박스에 표시된 부분이 모터드라이버 2개다. 이 모터 드라이버는 구동 전압 12-24V에 정격 전류 7A, 순간 전류 30A의 구동 환경을 가지며, PWM신호와 방향신호를 받도록 설계되어 있다. 부가적으로 Enable신호와 강제 stop기능, 전류를 0-5V로 변환하여 센싱하는 기능을 제공하고 있다. 

[그림 7] 스케이트보드 로봇의 MCU 회로

 





   3. 기타 회로  
 

[그림 8] CAN과 Serial 통신부


[그림 9] DC 모터드라이버(NT-DC20A)와 ARS모듈(NT-ARSv1)과 연결부


[그림 10] 조종기와 연결부


[그림 11] 조종기 회로도


 이제 MCU와 각 주변장치를 연결해 보자. 그림 7에 전체 회로를 제시했다. 이하 각 그림은 레귤레이터나 리셋 등과 같이 일반적으로 추가되는 부분을 제외하고, 중요한 부분에 대한 캡션들이다. 그림 10의 조종기와의 연결부에 시리얼통신을 가능하도록 연결한 것은 펌웨어의 수정을 일일이 로봇의 덮개를 열고 하는 불편함이 없도록, 외부로 빼놓을 조종기에서 펌웨어 수정을 가능하게 하기 위해서다. 이렇게 꾸며진 그림 10의 회로는 그림 11의 조종기 회로에 연결된다.
 

   4. 결론  
 

 이번에는 스케이트보드 로봇을 구성하기 위해서 가장 중요한 각도 센싱과 모터 구동, MCU와 기타 회로부에 대해 다루었다. 결론적으로는 상용부품을 장착하긴 했지만, 크게 개의치 않는 것은 각도 센싱에 대한 필터나 DC 모터를 구동하기 위한 드라이버 회로 보다 연재 1회에서 다룬 동역학모델을 바탕으로 설계할 제어기가 더욱 중요하기 때문이다. 다음 연재에서는 제어기를 설계하고, 그로부터 어떻게 펌웨어를 구성할 것인지에 대해 이야기를 하고 연재를 마치고자 한다.
 
http://pinkwink.kr/trackback/438 관련글 쓰기
  • 핑구야 날자 2011/06/02 08:26

    PinkWink님의 작품이 일반화 되어 우리아이들이 즐기길 빨리 기대해봅니다.

    • PinkWink 2011/06/02 09:22

      저도.. 좀.. 팔였으면.. 푸하하...^^
      날씨는 별로지만 좋은 하루 되세요^^

  • 라라윈 2011/06/03 03:31

    핑크윙크님 덕분에
    신세계를 알아가고 있어요... +_+

  • 구차니 2011/06/18 23:00

    중간중간에 광고로 인해서
    응? 벌써 내용이 끝인가? 를 몇번이나 경험했어요!

    인셉션을 체험하는 느낌?! ㅋㅋㅋ
    하아.. 전 언제쯤 이런걸 해볼날이 오려나요 ㅠ.ㅠ

    • PinkWink 2011/06/19 08:42

      재미있어요...^^ 저도 학생때 조런거 많이 해볼껄.. 하는 생각을 요즘 많이합니다.^^

  • 2012/05/19 01:32

    비밀댓글입니다

    • PinkWink 2012/05/21 09:26

      이곳과 ntrexlab.co.kr블로그에 공개된 내용은 출처를 밝혀주신다면 인용이 언제나 가능합니다.

  • zanaisreal 2013/07/10 23:28

    지금 세그웨이를 제작 중에 있습니다 . 지금 이 제품에 사용 중인 모터와 모터드라이브를 이용 하여 구동 하려고 하는데 체인과 바퀴가 어떤식으로 연결이 되어있고 바퀴의 체인이 연결되어 있는 축이 어떤식으로 설계되어 있는지 알고 싶습니다. 가능하다면 바퀴를 사려면 어디서 구매하면 되는지 알려주시면 감사 하겠습니다.

    • PinkWink 2013/07/11 11:07

      아.. 네... 저처럼 기계 문외한이 보긴엔 그냥 모터와 브라켓, 그리고 체인을 감았다.. 말고는 저도 딱히 드릴 말씀이 없답니다.
      그리고 이 모터를 사용하시면 좀 어려울 수도 있습니다. 이 모터는 엔코더가 없거든요.

  • ksk0430 2013/09/10 22:59

    세그웨이 제작중에 궁금한점이있는데 혹시 전원부는 어떻게 구성하셨는지 좀 알려주실수 있을까요..?
    배터리쪽과 전원부가 궁금하네요.. 알려주시면 감사하겠습니다..

    • PinkWink 2013/09/10 23:29

      전원부는 그냥.... 연축전지를 사용했습니다만...ㅠㅠ
      배터리는 크게 고민하지 않았습니다.
      그저 현실에 순응해서 사용했답니다.^^

1 ... 22 23 24 25 26 27 28 29 30 ... 44