4개의 레고 마인드스톰 nxt을 이용해서 큐브 조립를 5.15초에 해결




2010년도에 만든 것. 9초 정도 소요되었음

Posted by 김용환 '김용환'


내가 소개할 레고 마인드 스톰은 개발자 뿐 아니라 학생들에게 재미를 줄 뿐 아니라 새로운 경험을 할 수 있는 장난감이라는 생각이 들었다. 또한 교육용으로 아주 좋은 제품이라 생각되어 소개를 한다. 
짧은 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 를 콘트롤


(동영상)  안드로이드 중력 센서를 이용해서 마인드스톰을 콘트롤하는 동영상
https://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만원..
  


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


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




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

동영상은 https://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



<그림> 자작 위성에 사용



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



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


<동영상> 마인드스톰 광고
https://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 김용환 '김용환'
직장인이 저녁에 설명서 보고 만드는 데 2일 걸린다. 
학생이라면 하루 정도면 데모 정도 돌릴 정도다. 

 

간단하게 어플 돌려보고...
안드로이드 어플을 이용해서 control하기에는 장난치기에는 딱 좋다.


 
동영상을 올릴려고 했는데. 이미 유투브에 있어서.. 링크만 올린다.

 



Posted by 김용환 '김용환'

공장을 만들기 전에 미리 프로토타입으로 만들어서, 레고 마인드스톰으로 테스트해본다고 한다.
총 3개의 동영상 관련 자료들을 공유


 















Posted by 김용환 '김용환'

셋팅하는데, 한참 걸렸다. 워낙 블루투쓰에 관심이 없었는데. 추후 안드로이드에서 개발할 때 참조가 될 수 있을 것 같아서, 개념잡기 위해서 테스트해봤다.

우선, NXT 밧데리 소모가 어마어마 해서 바로 밧데로 방전되는 것을 생각하고 진행해야 한다. 다행히 밧데리가 소모되기 전에 셋팅을 끝낼 수 있었다.

노트북은 vaio 제품이고, windows xp 이며, 블루투쓰가 지원하는 모델이다.


(여러번 테스트하면서 얻은 결론이라, 약간 틀릴 수 있다.)

내 BlueTooth 설정에서 장치를 검색하고, 페어링 설정을 한다.
서로 쌍을 이룬 블루투쓰 장치는 비밀 키를 교환해야 한다. NXT의 비밀번호는 1234 이고, 내 노트북도 1234로 지정했다.





마인드스톰 NXT 에서는 다음과 설정해야 한다.
1. 블루투스 메뉴 -> visibility를 선택하고 true(visibility)로 설정
2. 블루투스 메뉴 -> on/off에서 on으로 설정
3. 블루투스 메뉴 -> My contacts 메뉴 -> 컴퓨터 이름 (나는 kim이라고 지정했고, kim 이라는 이름으로 나온다. )으로 접근하고, 내비둔다.
NXT 기기를 살펴보면, 왼쪽 상단 메뉴에 보면, Bluetooth 마크가 보이고 @< 이렇게 떠있는 것을 확인할 수 있다.



PC로 되돌아온다. 아까 등록한 장치관리자에서 포트 정보를 확인한다. Bluetooth 통신 포트가 생겼음을 알 수 있다.
여러번 테스트하다보면 COM port는 여러개로 늘어나기도 한다.


포트 정보를 좀더 확인하라면, 마우스 오른쪽 버튼을 눌러서, bluetooth 통신 포트를 보면 된다.




찾은 NXT에 대한 목록을 확인한다. 아직 연결된 것이 아니다.
아래 그림은 그냥 목록에 있다는 뜻이다.



NXT와 연결한다. 연결하면서 NXT 블루투쓰 보안코드를 넣어야 하는데. 디폴트가 1234여서.. 다음과 적는다.



블루투스 환경에서 NXT 아이콘 를 두번 클릭하면 Dev A의 NXT와 Dev B의 NXT가 보인다.
여기서 Dev A의 NXT 아이콘을 선택하고, 마우스 오른쪽 버튼을 누르고, "연결"을 선택한다.

아래와 같이 정상적으로 연결이 되면, 초록색 -><-이 뜬다. 이게 제대로 뜨지 않으면 연결이 잘 안된 것이다.


그리고, 전체 블루투스 환경에서 보면, 녹색 -><- 으로 되어 있는 것을 확인할 수 있다.
정상적으로 연결된 것임을 확인할 수 있다.





NXT 기기를 살펴보면, 왼쪽 상단 메뉴에 보면, Bluetooth 마크가 보이고 @<> 처럼 보인다. 즉 <> 이 두개가 있어야 연결이 정상적으로 되었음을 알려주는 마크이다.  


아래 링크에서 NXT Vehicle Remote 첨부파일을 다운받아 실행시킨다. 
http://cafe.naver.com/hirobotjks.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=696&

혹시 몰라, 여기에도 저장해둔다.



다음과 같은 메뉴가 뜨는데. 왼쪽 상단에 보면, BlueTooth Connection 밑에 connect라는 버튼이 있다.
이 버튼을 마우스로 클릭했을 때, 팝업이 뜰 수 있다. 이것은 정상적인 포트가 아닌 것을 의미한다.

장치 관리자의 '포트 정보'를 보고 그 포트 단위로 접근하면 된다.

즉 블루투스로 NXT와 노트북이 연결되었음을 확인하고, 위 어플을 이용해서 remote control 하는 것이다.








만약 정상 연결이 되었으면, 중간 아래에 보면, 빨간색 방향표가 나타나는데. 이것이 바로 연결되었음을 알려주는 표식이다. 에러 팝업이 뜨지 않고, 아래 화살표가 나타나면 Connected가 된것이다.
Connection 상태에 connected가 된 것을 확인할 수 있다.


이렇게 왔다 갔다 테스트해보면 정상동적하는지 확인할 수 있다. 밧데리 금방 방전되어서 조금은 당황스럽다.. 모터보다 통신 모듈에 에너지의 수요가 많다니..^^;;

* 블루투스 연결이 안되는 것 같아서 NXT에 firmware 1.29로 올렸다.
* NXT 어플이 아무것도 설치안되어도 노트북의 제어 프로그램만으로 제어가 가능하다.


원리는 어렵지 않다.레고싸이트 (http://mindstorms.lego.com/en-us/support/files/default.aspx)에 블루투스에 대한 개발 정보가 들어가 있다.



Bluetooth Developer Kit를 보면 통신 프로토콜이 있다. 이를 가지고 통신하면서 제어하는 것이다.
아주 간단하게 되어 있는 거라, 통신쪽을 조금 안다면 쉽게 개발할 수 있을 것 같다.



이제 로보트나 좀 만들어봐야겠다.


Posted by 김용환 '김용환'

먼저 블럭으로 잘 만들어둔다.






color lamp를 못찾아서 시간이 많이 걸렸다.
애기들은 어떻게 color lamp를 찾았지?

나와 같이 고생했던 사람들이 있을 수 있으니, 올려놔야지.


첫번째 메뉴는 Common 메뉴이다.


아래 하단을 보면, 구분 메뉴가 있는데. 이 부분을 내가 미처 못봤다..
하단에 동그라미, 네모세개, 바두개 있는 게. 구분자이다.


두번째 네모 세개 메뉴를 아래와 같이 나온다.




두번째 Complete 메뉴에서 2번째 Action을 선택하면, color lamp가 있는지 확인할 수 있을 것이다.



color sensor와는 첫번째 common 메뉴에 있다.



바 2개는 custom 방식이다.




이제 shooterbot 로봇의 알고리즘이다.



c나 java 코드로 하면 10줄이나 될란가? 
이렇게 그림을  통해서 개념을 익히는 데는 참 좋은 툴인거 같다.
java의 창시자 제임스 고슬링이 요즘 블로그에서 언어에 대한 개념을 가르치는 교육용 프로그램에 관심이 많던데.. 이런 툴이 있으면 확실히 감을 잡을 수는 있을 것 같다. 

위의 NXT-G에 대해서 간단히 설명한다.

1. 아래 줄
파란색 등을 보이면서, 울트라소닉 센서로 BC 모터를 사용하여 왼쪽 방향으로 계속 돌게 한다.

2. 윗줄 앞부분
울트라소닉 센서로 주변에 무엇인가 있다고 찾아내면, 파란색 등을 보이며, 정지하고 object 소리를 낸다.
그리고, 1초를 쉰다.

3, 윗줄 뒷부분
또 한번 울트라소닉센서에 의해서 발견되면(즉, 2번 센서 체크를 의미) 빨간색 등을 보이게 하고
alarm 소리를 내고, A 모터를 이용해서 총을 발사한다..


이미지를 다운로드 하고, 실행시키면 정상적으로 돌아가는지 확인 가능하다.


테스트를 해보니. 울트라소닉센서가 상당히 민감하고, 잘 돌아가는 것 같다.


시나리오는 검은색 작은 가방으로 유인해서 내게 쏘게 한다.. 잘 돌아간다.
 (마지막에 엉뚱한거 쏘는 거는 빨래한테 쏘는 것임. 버그 아님)




Posted by 김용환 '김용환'


오늘 레고 마인드 스톰을 구매했다.
이제 슬슬 공부해야지~


레고 마인드스톰에 대해서 정리
http://junho85.springnote.com/pages/2122328.xhtml

레고 마인드스톰 링크
http://www.cs.unc.edu/~lastra/comp006/lego_mindstorm_links.html


 

Posted by 김용환 '김용환'