내가 소개할 레고 마인드 스톰은 개발자 뿐 아니라 학생들에게 재미를 줄 뿐 아니라 새로운 경험을 할 수 있는 장난감이라는 생각이 들었다. 또한 교육용으로 아주 좋은 제품이라 생각되어 소개를 한다. 
짧은 2달 동안 직접 마인드 스톰을 2달 정도 만지막 거리고 안드로이드 폰을 이용해서 마인드스톰을 control하면서 가졌던 지식과 소감을 얘기하고자 한다.


사용자 삽입 이미지



마인드스톰의 시작은 MIT Media 연구소에서 시작되었다. 로봇 개발 시스템 키트라 해서 하드웨어와 소프트웨어를 이용한 셋트로 개발되었다. 당시에 프로그래밍은 Z80처럼 생긴 Brick이라는 보드에서 개발하였다

IMAGE Imgs/index02.GIF


교육 자체가 너무 어렵기 때문에 Visual 툴로 개발할 필요성이 생겼고,  연구와 교육적인 목표로 해서 콜로라도 대학에서 만들게 되었다. Interactive한 기계, 즉 센서를 통한 이벤트를 사람에게 전달하고 그 이벤트를 사람이 쉽게 처리하게 하는 기능을 가지는 것을 개발하려고 했다.
 

IMAGE Imgs/index06.GIF

이툴의 이름은 Virtual Brick이라는 툴로서, 사람이 센서나 모터를 하나의 Component로 지정하고 내가 원하는 프로그램을 할 수 있응 기능을 제공하였다.

IMAGE Imgs/index10.GIF

즉, Interactive하게 할 수 있도록 하는 철학이 반영된 것이다. 
이 단순한 모델의 최초 철학은 지금까지도 잘 전달되었다. 
 



처음 제품이름은 Mindstorms Robotics Invention System kit 이었으나, Lego로 팔리면서 NXT 라고 불리워졌다. 최신 키트는 2009년 8월에 시판된 NXT 2.0으로 NXT와는 조금 다르다. 


 

NXT 2.0의 구성품은 울트라 소닉 (약 2,3미터에 있는 물질을 파악) 센서, RGB 컬러 센서, 2개의 터치 센서, 3개의 모터, 블루투쓰를 지원하는 NXT Bricks 그리고 조립 가능한 brick으로 구성되어 있다.





이 것을 이용해서 로봇을 만들 수 있다. CD에서는 4가지의 로봇 예제를 제공하고 쉽게 만들 수 있다.




4개의 예제로 끝나지 않고, 인터넷을 이용하면 많은 사람들이 자신이 만들었던 예제들을 공유하고, 유투브를 통해서 자신이 만든 것들을 만들어 볼 수 있다. 

대표적인 싸이트는 다음과 같다. 
http://us.mindstorms.lego.com/en-us/community/NXTLog/default.aspx
http://nxtprograms.com/index2.html


레고 마인드스톰은 기존에 사용하던 블럭을 쓰지 않는다. 
 

레고의 단순한 브럭이 아닌 로봇에 맞는 블럭을 이용해서 조립한다는 점에서 로봇에 대한 신선한 경험을 할 수 있다는 것이 매우 새롭다.기존의 블럭이 장난감이라면 레고 마인드스톰의 블럭은 조금 더 산업적으로 연계할 수 있는 장난감이라고 생각이 든다. 다시 말하면 기존의 블럭은 수직이나 수평과 가까운 직선이라면 레고 마인드 스톰의 블럭은 원처럼 자유도는 높지 않지만 길다란 타원의 느낌으로 자유도를 제공한다. 

* 레고 마인드스톰 블럭으로 마든 iphone4 거치대



 

또한  가장 재미있는 점은 프로그래밍이 굉장히 쉽다. 원래 Interactive한 교육용으로 만들어졌던 탓의 그 배경이다.  NXT 2.0안에 들어가 있는 NXT-G라는 툴은 상당히 흥미롭다. NXT-G는 Visual 툴(일종의 저작도구)로서, 프로그래밍 언어를 모르는 사람이 쉽게 프로그래밍을 할 수 있다. 처음에는 텍스트가 아니라 그래픽툴이라 눈에 들어오지 않아서 안쓰려고 했지만, 점차 단순하게 느껴지고 재미가 붙을 수 있다.

Interactive 상에서는 보면, 어떤 것을 센싱했을 때, 어떤 일을 하라고 인간이 지시하는 모델을 따르고 있는데.
사실 이 원칙에 충실하다.


* 레고 마인드 스톰 NXT 2.0 CD에서 제공하는 NXT-G 저작도구 툴



어떤 상황은 if로 만들어지고, 어떤 일을 하라는 것은 명령(action)으로 이어질 수 있다.

센서 포착 -> 모터 동작



계속 이 동작을 하게 하는 것은 for로 할 수 있는데. 이 원칙에 따라서 어플을 개발할 수 있다. 

NXT-G는 그냥 컴포넌트를 놓고 연결만 하면 동작하는 구조로 되어 있다. 
Action 컴포넌트의 속성에 대해서도 쉽게 지정할 수 있다. 울트라 소식 센서의 경우는 센싱의 길이를 1m에서 10cm로 줄일 수 있도 있다.  

개발자는 if 문이나 for 문, 모터나 센서를 지칭하는 component들이 눈에 보이고 쉬워보인다. 

아이들이 접근할 때는 c언어를 가르켜 주는 것은 어쩌면 처음부터 어려운 숙제를 주는 것은 아닐까 생각이 든다. 단순히 특정 동작에 대한 집중력만을 가르켜 주는 것이 배우는 데 확실한 방법이 된다. 

NXT-G외에도 수많은 툴이나 언어를 이용하면 NXT 2.0을 구동할 수 있다. 

- LabVIEW Toolkit
- Lego::NXT
- Ada
- Next Byte Codes & Not eXactly C
- RobotC
- NXTGCC
- URBI
- leJOS NXJ
- nxtOSEK
- MATLAB and Simulink
- Lua
- FLL NXT Navigation
- ruby-nxt
- Robotics. NXT
-  Microsoft Robotics Studio Developer Center 


Robolab도 NXT-G처럼 개발이 가능하다. 

사용자 삽입 이미지



주목할 점은 자바(leJOS NXJ)를 이용해서 개발이 가능하다는 점이다.  
이클립스위에 Plugin을 설치하면 자바로 쉽게 개발할 수 있다. 






이를 이용해서 NXT 장치를 내가 원하는 자바 프로그래밍을 쉽게 할 수 있다.  Runtime jar 와 jvm이 내려받게 해서 동작하게 한다. 
다른 언어나 툴도 비슷하게 쉬운 인터페이스와 API를 제공해서 원하는 프로그램을 짜게 할 수 있다. 
레고 마인드 스톰이 API 하나는 정말 쉽게 개발했다는 점이 주목할 만 한다.
(사용자가 사용하는 API는 단순한만큼 내부 구현은 엄청 힘들었으리라 생각이 되긴 한다.)

이런 언어적인 특성뿐 아니라 더 큰 장점이 있다. 

NXT-G cross compiling, image uploading이라는 부분이 너무 편하다는 것이 있다. NXJ는 이미지 업로딩이 편했다. NXT-G에 아래 화살표로 된 버튼을 누르면 크로스 컴파일된 어플리케이션을 이미지화해서 다운로드 하는 점이다. 

MINDSTORMS SOFTWARE DEMO


(나는 전 직장에서 셋탑박스와 모바일 기기의 소프트웨어를 개발하는 일을 하고 있었는데, 임베디드 기기에 많이 싫증나있었다. 무한 반복 컴파일, 굽기는 사람을 코딩의 세계로 보여주지 못하고 노가다나 시간과의 싸움을 알려주었다. 레고 마인드 스톰을 보니.. 이거 완전 물건이라고 생각이 되었다. 왜 이런 생각을 못했을까 하는 생각이 들었다..)

레고 마인드스톰 NXT 2.0의 콘트롤러는 ARM7 계열의 프로세서(atmel)를 탑재하고 있기 때문에 작업 PC의 환경과 다르기 때문에 cross compiling이라는 작업을 거치고 이미지 다운로드 작업(일명 굽기)을 해야 한다. 
그러나, 이런 과정을 상큼히 제거하고 쉽게 구축할 수 있다. 이것은 레고 사의 정말 탁월한 선택이라고 생각한다. 


NXT 2.0은 블루투쓰를 지원하는데, 노트북뿐 아니라 안드로이드 폰에서 NXT 장비를 콘트롤 할 수 있다. 아이폰도 가능하다고 하지만, API의 제약사항때문에 힘들다고 한다. 안드로이드 마켓을 가보면 많은 어플이 있다. 또한 소스도 공개한 안드로이드 어플이 있으니. 공부하기도 쉽다.

적외선과 달리 블루투쓰로 상당히 빨리 통신할 수 있어서 좋았다. 내가 원하는 데로 콘트롤을 하는 재미가 솔솔했다. 
 

* 노트북에서 블루투스를 이용해서 NXT를 콘트롤


* 안드로이드에서는 블루투스를 이용해서 NXT를 콘트롤 

예제 1) 패드 다루듯이 NXT 콘트롤
Screenshot of NXT Remote Control


예제 2) 중력 센서를 이용해서 NXT 를 콘트롤


(동영상)  안드로이드 중력 센서를 이용해서 마인드스톰을 콘트롤하는 동영상
http://www.youtube.com/watch?v=L-ff_s5lF3Y






마인드스톰의 콘트롤러를 살펴보자. 프로세서는 두개가 있다. IO를 위한 보조 프로세스를 달아놓아 속도의 향상을 높이려는 시도가 보인다. 


Main processor: Atmel® 32-bit ARM® processor, AT91SAM7S256
- 256 KB FLASH
- 64 KB RAM
- 48 MHz
 
Co-processor: Atmel® 8-bit AVR processor, ATmega48
- 4 KB FLASH
- 512 Byte RAM
- 8 MHz
 
Bluetooth wireless communication CSR BlueCoreTM 4 v2.0 +EDR System
- Supporting the Serial Port Profile (SPP)
- Internal 47 KByte RAM
- External 8 MBit FLASH
- 26 MHz
 
USB 2.0 communication Full speed port (12 Mbit/s)
 
4 input ports 6-wire interface supporting both digital and analog interface
- 1 high speed port, IEC 61158 Type 4/EN 50170 compliant
 
3 output ports 6-wire interface supporting input from encoders
 
Display 100 x 64 pixel LCD black & white graphical display
- View area: 26 X 40.6 mm
 
Loudspeaker Sound output channel with 8-bit resolution
- Supporting a sample rate of 2-16 KHz
 
4 button user-interface Rubber buttons
 
Power source 6 AA batteries
- Alkaline batteries are recommended
- Rechargeable Lithium-Ion battery 1400 mAH is available
 
Connector 6-wire industry-standard connector, RJ12 Right side adjustment
 



나름 훌륭한 제원인데 반해, AA 밧데리 6개가 늘 필요하다는 점, RJ12 잭을 필요로 하면 사야한다는 점이 불편하다. Extreme NXT  라는 외국 서적에는 RJ12 잭을 만드는 법이 나와 있으니. 그 책을 보고 만드는 것도 좋을 것 같다. 







마인드스톰은 개발 싸이트에서는 제공하는 다양한 개발 툴킷을 제공하기 때문이다. 
블루투쓰뿐 아니라 하드웨어, 소프트웨어 (모바일, 오픈소스 펌웨어)개발 킷을 제공해서 마음껏 원하는 동작을 가능케 한다. 또한, 하드웨어 제원까지도 모두 공개하여 원리를 이해할 수 있도록 제공하고 있다. 




테스트를 하다보면, 재미있는 것이 있는데, 멀티태스킹과 같은 괜찮은 기능을 가질 수 없는 부분이 있다. 펌웨어의 단점이기도 한데, 이때는 운영체제를 탑재시켜 멀티태스킹과 같은 비싼 동작을 시킬 수 있다. 

leJOS (http://lejos.sourceforge.net/index.php) 나 오래 전에 deprecated된 brickOS(http://brickos.sourceforge.net/) 을 이용해서 내가 원하는 기능을 더 수월하게 하거나 나만의 OS를 만들 수 있다.

(brickOS에 대한 관련자료 
http://heehiee.codns.com:9000/060611/0_%B8%B6%C0%CC%C5%A9%B7%CE%BC%D2%C7%C1%C6%AE%C0%E2%C1%F6/2001/2%BF%F9%C8%A3/%C6%AF%BA%B0%B1%E2%C8%B9/%B8%B6%C0%CE%B5%E5%BD%BA%C5%E8%BF%EB%BF%EE%BF%B5%C3%BC%C1%A6_LegOS%BA%D0%BC%AE/0102-370.pdf)


지금까지 정리한 NXT의 장점과 단점을 얘기해본다.


<레고 마인드스톰 NXT 2.0 의 장점>
0. 신기한 마인드스톰의 블럭
  (기존의 블럭과 차원이 다른 블럭)
1. 쉬운 API
   (내부적으로는 복잡한 로직은 잘 감쌌는 소리)
2. 포팅의 편이
  (Development kit를 제공해서 확장성을 높여, 하드웨어 확장성이나 소프트웨어 확장성이 커짐)
3. 블루 투스 지원
4. 이미지 다운로딩이 간결함
5. 다양한 개발 툴킷과 문서를 지원

단점
1. 가격이 비싸다.
2. AA 밧데리를 항상 필요 6개
  (밧데리 비용이 나갈 수 있다.
3. 확장을 위한 부속 부품(센서나 모터,RJ)등이 비싸다.
  중력센서는 10만원, 바퀴는 1만원..
  


마지막으로 레고 마인드스톰을 이용한 데모들을 소개하고자 한다. 
레고를 이용해서 프로토타입을 개발할 수 있고, 장난감으로 사용할 수 있다. 


<그림> 레고 마인드스톰을 이용한 프린터




<그림> 레고 마인드스톰을 이용한 스케치

동영상은 http://www.youtube.com/watch?v=_ogQuLdEcBY&feature=related 




<동영상> 레고로 만든 공장



<동영상> 레고로 만든 공장
http://www.pandora.tv/category.ptv/video/category/c1/05/c2/0078/ch_userid/kogijowa/prgid/42896612


<동영상> 공장을 어떻게 구현했나에 대한 이야기
http://serviceapi.nmv.naver.com/flash/NFPlayer.swf?vid=BBBE73FFD5AF48AB5A3044ADD437F69A4D81&outKey=V125b12203c64efbf8cdbf22ddf79b69b594e521c0607c4f6f368f22ddf79b69b594e



<그림> 자작 위성에 사용



<동영상> 스도쿠 문제 풀기
http://www.youtube.com/watch?v=Mp8Y2yjV4fU



<동영상> 자동차 자동차
http://www.metacafe.com/watch/429097/mobile_phone_bluetooth_remote_controlled_lego_mindstorms_nxt_rov/


<동영상> 마인드스톰 광고
http://www.youtube.com/watch?v=xuk9Ei5PbXk




<동영상> 다리 만들고 건너가기
http://youtu.be/1pslLoNkiL0






* 참조 싸이트

http://l3d.cs.colorado.edu/systems/legosheets/Home.html
http://blog.naver.com/PostView.nhn?blogId=tygermask&logNo=30103186978
http://en.wikipedia.org/wiki/Lego_Mindstorms_NXT_2.0
http://electoy.tistory.com/47
 



Posted by '김용환'
,