라즈베리파이 + 마인드스톰 NXT = 첫번째 RC카 제작 Do It Yourself

얼마전 무슨 검색을 하다가 라즈베리 파이 라는 단어를 보게 되었습니다.
처음에는 무슨 과일이 IT 쪽에 나오지? 하고 의아해 했으나, 검색을 하자마자
마법에 홀린듯 마음을 빼앗기고 말았습니다.


간단한 설명은 영국에서 아이들 교육 목적으로 25유로의 가격으로 만든
리눅스가 도는 컴퓨터입니다. 지금은 두번째 모델로 35유로의 라즈베리 파이 재단에서
만든 싱글보드 컴퓨터 입니다.

가격도 가격이거니와 거기에서 할 수 있는 일이 무궁 무진하다는 생각때문이었습니다.

처음에는 Element14 라는 외국 사이트에서만 판매를 하였다는데,
지금은 옥션이나 쥐마켓 등에서 검색을 하시면 수입판매를 해 주는 채널도 존재합니다.
하여간 지난주 화요일에 주문을 하여 수요일 저녁에 받아보았습니다.
(회사 팀 회식이라 늦게 들어가서 알딸딸한 정신으로 받았습니다.)

오른쪽이 일반 신용카드와 그 위에 32기가 SD 메모리와 USB 와이파이 동글이 있고, 왼쪽이 라즈베리파이 싱글보드 컴퓨터입니다.

지훈이가 케이스 안에 조립을 해 주었습니다. (이제는 이런 것도 알아서 해 주니 든든한 조수가... ^^)

그 다음날 저녁에는 설치를 해 보려 합니다~

HDMI 출력으로 Full HD 모니터에 연결하고, 랜선을 연결한 상태에서 전원 연결된 USB 허브를 꼽으면 바로 기동이 되더군요.

최초 설치시에만 유선랜을 설치하면 됩니다.

4G SD 카드에는 테스트로 XBMC 미디어 센터 프로그램을 설치해 보았습니다. 뭐 애플TV가 안 부러워 지더군요~

다른 32기가 SD 카드에는 이미지를 구워 라즈비언 "wheezy" 라는 데비안 리눅스를 설치한 다음 위의 raspi-config 명령으로 32기가를 Full 로 사용하거나 오버클락 등등을 할 수 있습니다.
boot_behaviour 로 Desktop을 지정하면 최근 4개월 전부터 애용하고 있는 LXDE 윈도우 환경이 그대로... ^^


토요일 점심까지는 헤롱 헤롱 데다가 오후에 철쭉동산에 다녀와서 저녁이 되었는데, 지훈이와 함께 의기 투합이 되어 
2009년 미국 출장에서 구입해온 레고 마인드스톰 NXT를 라즈베리파이로 움직여 보자는 프로젝트에 돌입했습니다.
 
기존에 마인드스톰 NXT에 프로그램을 하려면 PC에서 해당 로직을 짜서 NXT의 제어 brick에 명령을 넣어야 합니다.

가운데 제어 블록에 빛, 소리, 터치, 초음파 네 가지의 입력 센서가 연결되고, 출력으로는 세 개의 스텝모터가 있습니다.

헌데 아주 고맙게도 python-nxt 라는 확장 프로그램을 누군가가 만들어주어 USB 케이블 혹은 블루투스를 이용하여
쉽게 NXT의 입력 및 출력을 바로 컴에서 제어를 할 수 있습니다.

다음은 라즈베리 파이에 python-nxt 를 설치한 과정입니다.
(아주 쉽게 할 수 있었습니다.)

$ sudo apt-get install python-usb
$ wget http://nxt-python.googlecode.com/files/nxt-python-2.2.2.tar.gz
$ tar xvfz nxt-python-2.2.2.tar.gz
$ pushd nxt-python-2.2.2
$ sudo python setup.py install
$ popd
$ sudo groupadd lego
$ sudo usermod -a -G lego pi
$ sudo vi /etc/udev/rules.d/70-lego.rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="0694", GROUP="lego", MODE="0660"
(위의 내용을 넣어 주면 됩니다.)
$ sudo reboot

다음에는 NXT의 자동차 버전을 만들어 볼 차례입니다.

무한쾌도 차를 만들어 보려 하였으나 우리 키트에는 해당 쾌도가 없더군요.
그래서 최대한 유사하게 만들어 보려 말하였으나,
시키고 났더니 지훈이가 혼자 찾아 참고한 사이트를 이용하여
다른 자동차가 탄생했습니다.

토요일 오후 다른 친구들 처럼 어린이날 선물을 못 받았다고 몇번이고 투덜데던 지훈이가 받은 어린이날 선물이... 제대로 작동을 하지 않았습니다.

현서도 도와서 같이 무언가를 하고 있는데 들어갈 틈이 없어 그냥 구경만...

스텝모터에 바퀴도 달고..

메뉴얼 대로 하려고 하는데, 핵심 부터 몇가지가 없는 것이었습니다... 그러나 이 부분에서 지훈이가 다른 부품을 사용해서 문제를 해결하는 것을 보고는..
기특한 생각이 들었습니다.

드디어 자동차의 후륜부 완성~~

현서는 피곤하다고 안방에 엄마랑 같이 자는 사이, 내친김에 지훈이는 완성을 하려는 기세입니다~

아빠는 이마트에서 사온 막걸리 한잔하는 사이...

메뉴얼에 나와있는데로...

이렇게 만들고는 지훈이가 스스로 자신을 얻는 것을 보고... '역시 공대 엄마 아빠를 둔 지훈이구나..' 했습니다. (현서는 안 그렇습니다만...)

이제는 앞바퀴 조종부분과 뒷바퀴 구동축을 연결한 자동차 하체부 완성!!

그 위에 NXT 제어 벽돌을 얹었습니다.

원본에는 없는 부품을 임기 웅변으로 풀어내는 바람에 덤으로 얻은 부분입니다...

원본과는 다른 이 라즈베리파이 컴을 어디다 달아야 하나... 생각하다가,

약간의 힌트를 주기는 했지만 결국은 이렇게 앞부분에 라즈베리를 넣고 제어 벽돌 아래에는 배터리를 넣었습니다.

이제는 웹캠도 달아보았습니다. 웹캠은 Microsoft VX800 이라는 모델을 26,800원에 구입하여 

$ sudo apt-get install motion
모션 패키지로 기동시키면 됩니다.

뭐 프레임이 몇 초에 한 장씩 주는 등 별로 좋지는 않지만 훌륭하게 웹으로 전송을 해 줍니다.

비록 밤 1시가 다 되었지만 해 냈다는 뿌듯함으로 한껏 누린 채지훈군... ^^

일요일에는 앞바퀴 조향 장치의 기어비가 잘못되어 그것을 수정하고는 드디어 완성하였습니다.

저기 선이 연결된 것은 라즈베리 파이의 USB 허브의 전원 선입니다.
배터리 만으로 무선 와이파이 동글과 웹캠의 전원을 모두 담당하기에는 무리가 있더군요.

이 상태에서 맥북에서 이 라즈베리 파이에 SSH로 접속하여 Python으로 다음과 같이 작성한 간단한 프로그램으로,

#!/usr/bin/env python

import nxt
import sys
import tty, termios
import nxt.locator
from nxt.sensor import *
from nxt.motor import *

brick = nxt.locator.find_one_brick()
wheel = nxt.Motor(brick, PORT_A)
left = nxt.Motor(brick, PORT_B)
right = nxt.Motor(brick, PORT_C)
both = nxt.SynchronizedMotors(left, right, 0)
#leftboth = nxt.SynchronizedMotors(left, right, 100)
#rightboth = nxt.SynchronizedMotors(right, left, 100)

def getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(fd)
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch

ch = ' '
print "Ready"
while ch != 'q':
ch = getch()

if ch == 'w':
print "Forwards"
both.turn(-100, 360, False)
elif ch == 's':
print "Backwards"
both.turn(100, 360, False)
elif ch == 'a':
print "Left"
#leftboth.turn(100, 90, False)
wheel.turn(60,20,False)
elif ch == 'd':
print "Right"
#rightboth.turn(100, 90, False)
wheel.turn(-60,20,False)
print "Finished"


다음과 같은 결과를 얻을 수 있었습니다.


비록 라즈베리파이를 이용하여 할 수 있는 무궁 무진한 (실은 컴을 이용하여 할 수 있는 모든 일이죠)
것의 하나를 시도해 보고 비교적 금방 적용해 볼 수 있었고,
그것을 지훈이와 함께 잘 할 수 있었고, 자신감을 느낄 수 있어서 좋았습니다.


핑백

  • 지훈현서 : [라즈베리파이3 모델B] 간단 설치 및 네트워크 설정 2016-08-05 15:47:02 #

    ... 처음 라즈베리파이를 보고는 감동을 많이 했던 기억이 있습니다.(지난번 블로그 내용 중 라즈베리파이+마인드스톰 첫번째 RC카 제작 이라는 내용으로 올린 기억이 있습니다) 그 당시 좀 불만이었던 것은 실제 프로그램을 돌릴 때 반응 속도 등이 좀 느리다는 것을 체감할 ... more

덧글

  • 드릴러 2013/05/12 22:30 # 삭제 답글

    아이에게 즐겁고 유익한 공부가 되었을 거 같아 저까지 흐뭇해 집니다.
    좋은 글 감사합니다.
  • 지훈현서아빠 2013/05/13 09:23 #

    별말씀을요, 제가 감사합니다~
  • 제임스 2013/05/12 22:53 # 답글

    참 부지런 하시네요 ^^ 아들과 함께 하는 것도 보기 좋고요
    어찌 그런 열정을 아직도 유지하고 계시는건지 신기합니다 하하
  • 지훈현서아빠 2013/05/13 09:24 #

    ㅎㅎ 뭐 60까지는 재미있게 이게 천직이다 생각했던 30여년전의 결심이 그대로 가고 있다고나 할까요...
    감사합니다, 잼스님~~ ^^
  • 루루카 2013/05/12 23:42 # 답글

    저어기... 로지텍 마블 트랙볼 볼이 빠져있어요... 덜덜덜...
    재미있게 잘 보고 가요~ 멋지네요~ ^_^`...
  • 지훈현서아빠 2013/05/13 09:24 #

    ㅎㅎ, 예리하십니다. 딸인 현서가 저 볼을 가지고 놀고 있었거든요~~ ^^
  • 잡가스 2013/05/13 00:11 # 답글

    자녀들과 함께 하시는 모습을 보니 좋습니다 :)
    저도 나중에 자녀가 생기면 저런 아버지가 되어 줄 수 있으면 좋겠습니다 ^^
  • 지훈현서아빠 2013/05/13 09:25 #

    충분히 가능하십니다~ 감사합니다 ^^
  • 선인장 2013/05/13 07:07 # 삭제 답글

    와, 정말 부러워요!! 아버지와 사이좋게 주거니 받거니 이야기하는 모습도 상상되고 지훈 군이 저렇게 집중해서 짜짠 하고 만들어내는 모습도 정말 대단해요!! +_+ 훌륭한 아버지이신 거 같아요, 정말!
    나중에 지훈 군이 다 자라도 지금 이런 기억들이 얼마나 즐거운 추억으로 남아있을지 생각하면, 지훈 군이 부럽습니다. ㅎㅎ
    현서 양도 잘 따라할 것 같은데.. 지훈 군이 오빠겠지요? 남매가 같이 놀 거리가 있어야 확실히 유대감이 깊어지는 거 같아요. 아무리 둘러봐도 이렇게 훌륭한 놀이 겸 학습이 없는 거 같습니당. ㅎㅎ
  • 지훈현서아빠 2013/05/13 09:25 #

    별말씀을요, 보여주기 위한 것이 아닌 스스로 즐기기 위한 것으로 생각하심 됩니다~
    감사합니다~~ ^^
  • SDPotter 2013/05/13 09:49 # 답글

    우와- 저도 저런 아빠가 되어야겠군요- 사진만 봐도 흐뭇흐뭇- 멋지십니다!!
  • 지훈현서아빠 2013/05/13 10:43 #

    누구나 하실 수 있습니다~~ ^^
  • 천하귀남 2013/05/13 09:54 # 답글

    아이들이 참 좋은 경험을 한듯합니다.
    라즈베리파이 구입하려고 눈팅중에 좋은 정보 잘봤습니다. ^^
  • 지훈현서아빠 2013/05/13 10:43 #

    관심있게 봐 주셔서 감사합니다. ^^
  • 은이 2013/05/13 10:55 # 답글

    제목만 보고 아! 여기도 이거 가지고 노는 분이 계시구나! 하고 왔는데
    자제분들과 같이라는데서 놀랐고 부러움을 느낍니다 +_+)b
  • 지훈현서아빠 2013/05/13 11:04 #

    원래 라즈베리파이가 교육용으로 만들어 졌다기에요... ^^
    감사합니다~
  • 2013/05/14 00:08 # 삭제 답글

    몇살 되면 저렇게 할 수 있나요~?
    어려서부터 관심 이끌어주시고, 좋은 경험 많이 주신 듯..
  • 지훈현서아빠 2013/05/14 09:03 #

    첫째가 초등학교 6학년입니다~ 아직 소프트웨어는 시작단계이지만 레고는 곧잘 만드는 정도입니다~ ^^
  • 현민 2013/06/09 02:37 # 삭제 답글

    와.. 대단하십니다.. 라즈베리파이를 저렇게도 사용할수 있었군요
  • 옹알이 2013/06/19 14:24 # 삭제 답글

    멋진대요.
    잘 보았어요.
    레고 마인드스톰을 본적이 없어서 그런데, 레고로도 지금 만든것이 가능하지 않나요 ?
    레고보면 주변기기 굉장히 많던데요.

    요즘 아이들 게임에 미쳐있는 아이들만 보다가 이런 아이(지훈) 보니까 기쁩니다.

    현서도 오빠랑 같이 즐겁게 하다보면
    혹시 과학계의 악동뮤지션이 되지 않을지... 기대해봅니다.
    안녕히계세요.
  • 지훈현서아빠 2013/06/19 14:28 #

    뭐 저희집도 다른 집과 그렇게 크게 다르지 않다고 생각합니다.
    대신 시간을 내서 아이들 좋아하는 것을 하도록 옆에서 도와주었으면 하는 것이지요.
    그런데 도와주려다 보니 제가 잘 하는 것을 해야 잘 도와줄 수 있더라구요~
    그런 의미에서 부모가 하던일을 아이에게 물려주는 것이 당연하지 않을까 싶습니다~~
    감사합니다 ^^
  • 개준 2013/06/25 04:05 # 삭제 답글

    정말 멋지네요.^^
    현재 공대생인데 정말 멋진 부모님이 시네요.

    저도 꼭 아빠가 되면 아이들과 같이 개발해보고 싶네요~^^

    정말 새로운 생각을 가지게 되는 글이 었어요~ㅎㅎ
  • 지훈현서아빠 2013/06/25 07:51 #

    좋게 생각해 주시니 감사합니다~ ^^
  • 박하 2014/01/23 10:56 # 삭제 답글

    검색해보다 궁금해서 질문남깁니다!
    보면 nxt python 프로그래밍 하실때 원격으로 코드를 짜고 그걸 그대로 nxt에 다운로드하셔서 구동하신 것 같은데...
    저는 usb가 꽂혀있는 상태에서 데스크탑에서 작성된 코드로 움직이고 있거든요... nxt에 코드를 받은게 아니라요;
    nxt에 어떻게 다운받을 수 있는지 여쭤봐도 될까요? greatmint8@gmail.com으로 메일주셔도 좋아요!!
  • 지훈현서아빠 2014/01/23 13:32 #

    저 파이썬 프로그램은 라즈베리파이에서 직접 구동되는 것이구요, 그 프로그램이 직접 NXT를 제어하도록 되어 있습니다.
    따라서 NXT 에 별도의 다운로드 같은 것은 필요 없습니다~~
    도움이 되셨기를 바랍니다
  • 두농이 2014/04/11 19:54 # 삭제 답글

    검색하고 잘 보고 갑니다!
    근데 궁금한게 있어서 질문좀 할게여
    레고마인드하고 라즈베리하고 융합해서 작품 만드셨는데
    라즈베리활용은 카메라 말고 또 어떤거 하셨나여?
    두개 같이한 콜라보한 이유가 궁금합니다
  • 지훈현서아빠 2014/04/12 13:58 #

    일단 마인드스톰은 자체의 CPU(Brick 라고 이야기 하더라구요) 블락이 있고
    거기에다 프로그램을 할 수 있습니다. 자체 입력 센서들과 세 개의 아웃풋에 해당하는
    스텝 모터가 그것이지요.
    문제는 이 프로그램이 RC와 같이 원하는 즉시성이 아니라 움직임을 미리 프로그램
    해 놓아야하는데 문제가 있더라구요.
    그래서 Brick은 단지 스텝 모터 제어의 전달만 해주고, 위와 같이
    라즈베리파이에서 직접 구동을 해 보는 것이었습니다~~
  • 돌도리 2014/06/03 13:17 # 삭제 답글

    안녕하세요 블로그 잘 봤습니다
    저는 오드로이드를 이용해 nxt를 구동해 보려고 하는데 라즈베리파이와 nxt간 통신은 어떻게 하신건가요? 말씀하신거로는
    라즈베리파이로 직접구동하신거같은데 유선으로하신건가요?
    아님 블루투스동글로 하신건가요?
  • 지훈현서아빠 2014/06/04 11:02 #

    USB로 직접 구동 시켰습니다~
  • 돌도리 2014/06/03 16:30 # 삭제 답글

    오드로이드로 마인드스톰을 유선연결했는데 장치인식을못하고
    70-lego.rules 가 안나오고 70-persistent-cd.rules 70-persistent-net.rules 이런것들이 나오는데 여기다 추가해도 되는게 맞나요?
  • clockwiz 2014/08/11 16:42 # 답글

    라즈베리파이. 이거 급 관심이 가서~ 잼 있었겠군
  • 쵸쵸 2015/02/04 13:28 # 삭제 답글

    저도 이글 보고 똑같이 따라 하고 있습니다.
    많은 도움이 되고 있습니다. 감사합니다. ^^
  • 지훈현서아빠 2015/02/04 14:04 #

    도움이 되셨다면 저의 보람입니다~~ ^^
  • jonkim 2015/04/13 23:59 # 삭제 답글

    아이들과 함께 할수있다는 것만으로도 소중한 사랑이네요~ 도전받고 갑니다. 우리 아들 둘과도 곧 돌입할듯~ 감사해요~
  • 지훈현서아빠 2015/04/14 09:43 #

    도움이 되셨다면 저의 보람입니다~ ^^
  • 호돌 2015/09/17 13:41 # 삭제 답글

    안녕하세요. 라즈베리안 파이를 가지고 있으며, 레고 9695 마인드스톰 에듀케이션도 보유하고 있습니다. 물론...저는 레고도 해 본 적이 없으며, 파이는 리눅스 설치할 수 있는 정도의 지식만 있습니다. 저도 레고를 직접 프로그래밍해서 자동차를 만들어보고 싶은데요. NXT에 대한 지식이 없어서 문의드립니다. 기본적으로 NTX라는 것은 출력과 입력을 받을 수 있는 모듈인 것이지요? NTX에 파이에서 지령을 내리면 NTX는 DC 신호를 모터에 줘서 모터를 구동하고, 센서에서 읽은 정보를 NTX를 통해서 파이로 전송해주는 역할을 하는 것이 맞는지요? 맞다면 제가 보유하고 있는 KIT는 예전에 누가 사용하던 것으로 NTX 모듈이 없던데 이것을 구할 수 있는 루트도 좀 알려주시면 정말 감사하겠습니다. PLC를 알고 계신지 모르겠습니다만 아시고 계신다는 조건하에 질문을 다시 드리면 파이는 PLC의 CPU 역할을 하며 NTX는 PLC의 입출력 카드의 역할을 하면 된다고 생각하면 되는지요...
  • 지훈현서아빠 2015/09/17 15:30 #

    넵! 실은 아주 간단한 수준의 프로그래밍을 직접 NXT에 넣어 그 동작만을 하도록 할 수도 있습니다. 그러려면 거의 레코에서 주는 수준 아니면 C로 프로그램을 해야 하는 것으로 알고 있습니다. 그 보다는 라즈베리파이에서 NXT의 입출력을 직접 관리하여 돌아가는 것을 고수준 언어인 파이썬으로 할 수 있다는 장점이 생기지요.
    미약한 지식이나마 시도를 해 보았으나 그 다음 진도는 많이 나가지 못했네요~~
  • pang 2019/08/01 17:50 # 삭제 답글

    안녕하세요 라즈베리파이와 nxt 연결 문제 때문에 검색도중 글을 발견하게 되었습니다
    라즈베리파이와 nxt 를 usb 로 직접 연결해서 제어하셨다고 했는데, 혹시 라즈베리파이에 설치한 nxt-python 에서 어떤설정을 해야 제어가 가능한건가요??? ㅜㅜ
    설정을 따로 하는게 아니라면 어떻게 해야 nxt 를 제어할 수 있는지 궁금합니다.!
댓글 입력 영역

구글애드텍스트