이것저것/My_Work

예전 기사

우담바라 2007. 9. 6. 00:19
“아주 먼 옛날 빌룬트라는 한 외로운 마을이 있었습니다. 이 마을의 농부들은 아침부터 밤 늦게까지 가축의 우리에서, 황량한 들판에서 등뼈가 휘도록 일했습니다. ... 그곳 빌룬트의 한 작은 목공소 주인인 올레 크리스티안센은 농사용 연장을 만드는 틈틈이 아이들을 위한 나무 장난감을 만들었습니다. 그 후에 그는 자신이 만든 장난감에 덴마크 말로 “재미있게 논다”를 줄인 ‘레고’라는 이름을 붙였습니다. 시골 목공소 주인이었던 그는 그 말이 라틴어로 ‘나는 공부한다’, ‘나는 조립한다’라는 뜻이 있는 줄은 꿈에도 몰랐습니다. 그리고 ‘레고’가 훗날 세계에서 가장 유명한 장난감의 대명사가 될 줄은 생각지도 못했습니다.” - 레고 스토리 중에

이경만 | gexpress999@daum.net

2000년 11월호였나? 무심코 본 마소에 나온 LegoOS 기사를 보고 흥미를 느껴 레고와 마인드스톰을 시작한지 어언 3년. ‘아직도 레고냐?‘는 주위의 핀잔에도 아랑곳 하지 않고 잠자리만 빼고는 레고 상자로 가득한 방을 뿌듯해 하며 오늘도 이족 보행 로봇을 레고로 만드는 꿈을 꾸고 있다.


레고와 같은 조립식 블럭은 아이들이나 가지고 노는 장난감이라는 인식때문인지 장성한 이후에는 가지고 싶은 생각은 들지 않았다. 사실 관심있었던 것은 8비트 PC와 프라모델이였다. 간단한 베이직 프로그램으로 직접 모눈종이에 디자인한 비행기를 움직이면서 슈팅게임과 간단한 액션게임을 만들며 알게 모르게 예전에 만들던 레고 블럭 생각이 났다. 도트로 디자인하는 것과의 외형적 유사성때문일까? 아마 프로그램을 한다는 것과 레고로 조립한다는 것에는 논리적인 조립과 물리적인 조립의 유사성이 있기 때문일 것이라고 생각된다(억지일수도 있지만). 프라모델은 건담이나 레이즈너, 가리안 등의 시리즈에 빠졌지만 다 완성하고 나면 느끼는 허무함은 지울 수 없었다. 주어진 대로 조립만하고 그 후에는 할 수 있는 것이 없기 때문이었을 것이다.
본지 2000년 11월호에 나온 LegoOS에 대한 기사는 아련한 기억 속에 숨겨져 있던 레고에 대한 욕망을 끌어 올렸고 온힘을 기울여 인터넷으로 마인드스톰(mindstorm)에 대한 정보를 모으기 시작했다. 브릭(brick)은 블럭의 영국식 표현으로 레고를 지칭할 때 브릭이 일반적으로 많이 쓰이는 단어이므로 ‘브릭’으로 표기하기로 한다.

레고 마인드스톰
아이들의 창의력을 키우기 위한 방법에 관심이 많았던 MIT 교육연구소의 Seymour Papert 교수는 퍼스널 컴퓨터에서 그 가능성을 찾았다. 그래서 나온 것이 거북이 모양의 커서를 이용한 교육용 언어인 LOGO였다. 프로그래밍을 한다기 보다는 거북이를 가지고 놀면서 여러 가지 창의적인 행위를 유발하고 싶었다고 한다. 하지만 소프트웨어를 이용한 교육에 한계를 느꼈는지 새로운 일을 구상하게 되는데 그게 바로 레고 마인드스톰이다. ‘마인드스톰’이라는 이름은 이 교수의 세미나북 ‘Mindstorms: Children, Computers and Powerful Ideas’에서 유래했다. 마인드 스톰 시리즈의 최초의 제품인 RIS(Robotics Invention System)라는 제품에는 이런 유명한 문구가 써있다.

“Knowledge is only part of understanding. Genuine understanding comes from hand-on experience - seymour papert .”

즉, “지식은 이해의 일부일 뿐이며, 진정한 이해는 손끝으로 느낀 경험으로부터 온다” 는 뜻으로 레고 마인드스톰의 기본적인 정신을 말해준다. 이제 하나하나씩 레고 마인드스톰의 여러 요소들을 살펴보자.

RCX
LOGO에서 시도되었던 PC를 이용한 창의력의 개발은 레고 마인드스톰에서 한 차원 업그레이드 되어 손으로 레고를 만지고 조립해서 기계적인 모듈을 만들고, 그것들을 PC에서 쉽고 간단한 프로그램으로 제어하는 것이다. 이것을 위해 RCX 같은 P브릭, 즉 프로그래밍 가능한 브릭을 이용하게 되는데 레고 브릭 안에 모터와 센서를 제어하는 기판과 간단한 8비트 CPU가 들어간 형태이다. 자세한 사양은 다음과 같다.

◆ 히타치 H8 CPU, 32KB의 RAM, 16KB의 기본 펌웨어가 들어 있는 ROM
◆ 3개의 모터와 3개의 센서를 연결하고 제어할 수 있음
◆ IR(적외선) 포트를 기본으로 이용하며 마인드스톰에 제공되는 IR 타워를 이용해 PC와 프로그램을 주고받을 수 있음
◆ LCD를 이용해 기본적인 정보를 주고받을 수 있음
◆ AA 사이즈 건전지 6개가 들어감
◆ 마인드스톰의 기본 셋인 RIS라는 제품에 포함되어 있다. 현재 1.0, 1.5, 2.0 버전이 나왔으며 모두 호환된다.

좀더 자세히 설명을 하면 기본적으로 16KB의 ROM에 있는 펌웨어는 시스템 구동에 필요한 기본적인 기능만 있어서 현재는 쓰지 않고 더 업그레이드된 펌웨어를 쓰는데 마인드스톰 프로그램을 PC에 설치하면 자동으로 새로운 펌웨어 다운로드 하게 된다. 좀 불편한 점은 건전지를 교환할 때마다 다운받아야 하는데 RCX가 업그레이드될 때 이 점은 좀 고쳐졌으면 좋겠다. 또 AA 사이즈 건전지가 6개 들어가는 것은 9V 모터를 3개나 제어해야 하기 때문으로 전지 교환이 불편하고 소모량도 상당해 RCX를 개조해서 9V 어댑터를 달 수 있게 개조하거나 충전지를 사용하기도 한다. 필자는 그냥 충전지를 사용한다. RCX에 대해 더 자세한 사항은 RCX Internal 사이트에 나와 있다. 또 RCX의 성능에 만족하지 못하거나 RCX와 비슷한 것을 만들고 싶은 독자라면 RCX의 전신인 MIT-Handy 보드를 추천한다.
레고 센서
레고 센서는 RCX의 센서 단자에 연결되는 센서로 마인드스톰의 기본 센서는 터치 센서, 라이트 센서, 각도 센서, 온도 센서 등이 있다. 각도 센서는 RIS 기본 제품에 없고 마인드스톰 엑세서리 팩을 사거나 레고 닥타(Lego Dacta)에 센서만 따로 주문해야 한다. 레고 센서의 기본적인 작동 원리는 RCX에서 오는 0~5V의 전류를 센서 내부적인 저항으로 바꿔서 0~65535의 값으로 나타내 주는 것이어서 단순히 5V 이하의 입력을 받아 5V 이하의 값을 반환하는 것은 모두 레고 센서가 될 수 있다. 따라서 전자공학적인 지식이 있으면 누구나 레고 센서를 만들 수 있고 실제로 레고 센서를 전문적으로 자작해서 파는 레고 관련 사이트도 늘고 있다. 기존에 나온 것은 모든 센서들이 레고화 되어 있고, 마니아들을 상대로 판매도 되는 것들이다.
참고할만한 볼거리로 고성능의 자작 센서를 이용해서 세그웨이(Segway)처럼 두 바퀴로 움직이면서 넘어지지 않는 레그웨이(Legway)가 있다. 레고에서 제공하는 기본 광 센서로는 짧은 거리를 정밀하게 읽어내지 못하는데 고성능의 자작 센서로 짧은 거리의 변화를 읽고 모터를 가동시켜 항상 평행을 유지하도록 한다. 또 이 센서를 판매하기도 한다.

프로그래밍하기
레고 마인드스톰의 기본 프로그램은 그래픽 기반의 프로그래밍 툴로 마인드스톰의 기본 스크립트 언어를 브릭으로 구성하여 끌여 놓고 값을 입력하는 것만으로 프로그램 가능하다. 실제로 초등학생도 한 두 시간만에 쉽게 배울 수 있을 정도로 쉽다. 그리고 RCX의 거의 모든 기능을 다 쓸 수 있을 정도로 강력하다. 하지만 좀더 프로그래머다운 툴을 원하는 독자들을 위해 NQC를 권하고 싶다. NQC는 NotQuitC의 약자로 Dave Baum이란 사람이 만들고 배포한 공개 소프트웨어로 C와 비슷한 문법에 레고의 표준 펌웨어 기반의 언어이다. 따라서 이 언어를 쓰기위해 따로 펌웨어를 교환할 필요가 없다. 하지만 레고의 기본 펌웨어 자체가 16KB정도의 고용량이라서 실제로 사용자 프로그램에서 쓸 수 있는 RCX의 공간은 16KB로 경우에 따라 메모리가 부족할 때가 있다.
그래서 나온 것이 LegoOS로 히타치의 H8용의 cross-gcc를 사용해 만든 작은 펌웨어다. 현재는 저작권 문제로 BrickOS로 이름을 바꾸었다. gcc 기반이기 때문에 GNU 기반의 컴파일러는 대부분 사용할 수 있고 필요에 따라 32KB의 모든 메모리 공간을 거의 다 사용할 수 있기 때문에 상당히 자유롭게 쓸 수 있다. 또 레고 펌웨어에서 지원하지 않는 실수 연산도 지원한다. gcc를 사용할 수 있는 리눅스나 윈도우에서는 CygWin을 이용해서 프로그래밍할 수 있다. 하지만 커맨드라인이 익숙하지 않은 사람들을 위해 여러 가지 공개된 IDE가 있다. 그 중에서 BrickCC라는 프로그램이 가장 유명하다. 델파이 기반으로 소스까지 공개되어 있으며 NQC와 BrickOS 모두 지원한다. 여기에 열거된 모든 소프트웨어 들은 참고자료에 적어 두었다. 이 언어를 통해 모터의 제어라든지 센서 값을 읽어오고 그에 따라 반응하도록 프로그램밍이 가능하다.

조립하기
마인드스톰을 시작하는데 있어 뜻밖의 난관은 바로 조립이다. 레고의 조립은 어릴 적 생각한 것처럼 쉽지만은 않다. 우선 부품의 종류도 워낙 많다. 2000여 종이 넘는 레고 부품의 종류가 있고 계속해서 새 제품이 나오기 때문에 해마다 몇십 개에서 몇백 개의 새로운 부품이 생겨나고 있다. 또 어디다 어떤 부품을 사용해야 할지 감이 안 온다. 성이나 배 같은 기본 레고 브릭만 사용한 제품을 보아왔던 사람은 쉽게 테크닉 부품의 용도를 추측해내기 어렵다. 그래서 이상하게 생긴 테크닉 브릭에 적응하지 못하고 포기해 버리고 마는 것이다. 성급한 분들을 위해 처음를 시작할 때 알아야 할 기본 브릭의 몇 가지 사항을 정리했다.
<화면 5>은 기본 레고 브릭의 사이즈이다. 왼쪽의 브릭을 2×4 브릭이라고 하고 오른쪽은 1×1 브릭이라고 한다. 비율은 그림에서 설명하는 대로 1:2:4, 5:5:6의 비율이다. 이 비율이 중요한 이유는 레고 디자인을 하는데 가장 많이 쓰는 브릭이 바로 기본 브릭이기 때문이다. 가끔씩 결정적인 부분에서 아귀가 안 맞는다면 바로 이 비율을 생각하지 않고 만들었기 때문이다
기본 브릭의 두께의 3분의 1 정도 되는 브릭을 플레이트(plate)라고 한다(<화면 6>). 그렇다면 1×1 플레이트의 가로세로 높이의 비율은 어떻게 될까? 32×32나 64×64 같은 대형 플레이트들은 모델을 만들 때 바닥판으로 쓰이기도 한다.
다음은 브릭 이름 앞에 테크닉이라는 수식어가 붙는 브릭들이 있다. 기본 브릭에 구멍이 뚫린 형태의 브릭이 바로 테크닉 브릭이다. 이 구멍은 다음과 같은 테크닉 핀으로 고정시켜서 테크닉 브릭별로 고정하거나, 엑슬(axle) 등으로 회전축을 만드는 용도로 사용된다. 또 테크닉 부시는 엑슬의 양끝을 막아주는 역할을 한다(<화면 7, 8>).
핀에는 두 가지 종류가 있는데 돌기가 있어서 연결된 브릭이 못움직이게 하는 핀(pin with friction)과 돌기가 없는 연결된 두 브릭이 자유롭게 움직이는 핀 두 가지가 있다. 조립시 가동이 필요한 경우 돌기가 없는 것을 쓰면 된다. 엑슬에는 바퀴나 기어 등이 연결된다. 부시는 엑슬이 빠지지 않도록 지탱해주는 역할을 한다.
<화면 9>은 응용이다. 1×4 테크닉 브릭과 1×4 플레이트를 이용해 구조물을 만들고 그 위에 1×6 테크닉 브릭을 핀을 이용해 연결해보다 왼쪽의 경우 위와 아래 부분에만 핀으로 연결할 수 있다. 오른쪽의 경우 가운데 부분도 연결 가능해서 좀더 안정적인 구조가 된다. 앞에서 설명한 비율은 이런 식으로 응용된다. 물론 분해 조립의 경험으로 손끝을 통해 알 수도 있다. 물론 이외에도 수많은 부품이 있고 상당히 다양한 기능을 가지고 있다. 라지 턴태이블, 공기압 실린더, 기어, 모터, 캠 카메라, 플랙서블 케이블, 쇼크 옵져버 등 아직도 무궁무진한 레고 부품들이 있다. 그들을 익히는 가장 좋은 방법은 레고 테크닉 시리즈를 사서 모으는 것이다. 하지만 그렇지 못하는 경우에는 http:// www.peeron.com/와 같은 사이트에서 예전 레고 테크닉 제품들의 조립 설명서를 찾아 현재 자신이 가지고 있는 부품만으로 재현해 보는 것도 좋을 것이다. 또 필요한 부품은 브릭 링크나 레고 인사이드 같은 사이트에서 사용자간에 거래로 구할 수도 있다. 또는 가까운 레고 닥타사를 이용해서 필요한 부품만 살 수도 있다.

조립을 돕는 CAD 프로그램
레고 마인드스톰의 기본 셋인 RIS를 구입해 열심히 여러 가지를 만들다 보면 부품의 부족을 느낀다. 하지만 그때마다 필요한 부품이 얼마나 되는지 감을 잡기는 힘들다. DOS 시절 2000여 개가 넘는 레고 부품들을 제공하면서 레고를 조립할 수 있는 CAD 프로그램이 있었으니 바로 LDraw다. 하지만 도스용 CAD 프로그램을 누가 쓰겠는가. 그래서 LDraw의 부품 데이터만 가져다 쓰는 프로그램들이 생겨나기 시작했다. 그것이 바로 LeoCad(저작권 문제로 G자를 일부러 뺀 것), MLCad 등이 대표적인 프로그램이다. 특히 이 프로그램들은 조립 설명서를 만들 수 있는 기능이 제공되며, Povray 같은 공개 렌더링 툴로 데이터를 변환해서 멋진 레고 CG를 만들 수 있다. 특히 LDraw의 모든 데이터는 마니아들에 의해 자발적으로 만들어졌으며 모두 인터넷상에 공개되었고 새로운 부품들도 계속적으로 업데이트되고 있다. MLCad , LeoCad 등도 모두 LDraw 사이트에서 다운받을 수 있다. 이글의 예제에 사용된 CG들은 모두 이 프로그램을 이용해서 만들어진 것이다.

접어두었던 ‘로봇’의 꿈을 펼치며
80년대에 초등학교 시절을 보낸 사람이라면 알겠지만 그때에는 TV를 틀면 로봇만화가 나왔었고 장래희망은 어김없이 과학자였다. 그래서 로봇은 여타 기계와 달리 그렇게 낭만적으로 다가올 수밖에 없다. 나이를 먹고 직업을 얻어 다른 길을 간다고 생각했지만 마인드스톰은 그때 그 꿈을 다시 생각하는 계기를 마련해 준 것 같다. 이 기사가 필자처럼 로봇을 좋아했고 만들어 보고 싶어했던 독자라면 ‘이런 것도 있었구나, 나도 한번 해볼까’하는 마음이 들었으면 좋겠다. 그리고 이 글을 쓰는 데 흔쾌히 이미지의 사용을 승락해 준 레고 마스터 에릭 소피(Eric Sophie)와 JP Brown에게 감사를 전한다.


참+고+자+료

? 레고스토리, 마그렛 울레, 미래의 창
? Seymour papert 교수의 홈페이지, http://www.papert.org
? BrickOS, http://brickos.sourceforge.net
? RCX Internal, http://graphics.stanford.edu/~kekoa/rcx
? HandyBoard, http://lcs.www.media.mit.edu/groups/el/projects/handy-board/index.html
? RCX Sensor Input 사이트, http://www.plazaearth.com/usr/gasperi/lego.htm
? LegWay, http://perso.freelug.org/legway/LegWay.html
? NQC 홈페이지, http://www.baumfamily.org/nqc
? BrickOS 홈페이지, http://brickos.sourceforge.net
? BrickCC 홈페이지, http://members.aol.com/johnbinder/bricxcc.htm
? Art Of Lego, http://fredm.www.media.mit.edu/people/fredm/papers/artoflego/ cliche.html



[ 레고 관련 커뮤니티 사이트 ]

◆ 마인드스톰 홈페이지, http://mindstorms.lego.com, 레고의 공식 홈페이지
◆ 레고 유저 그룹, http://www.lugnet.com, 전 세계적인 레고 사용자 그룹
◆ 브릭인싸이트, http://www.brickinside.com, 한국에서 가장 활발한 레고 커뮤니티
◆ 브릭링크, http://www.bricklink.com, 레고 벼룩시장, 해외
◆ 브릭셋, http://www.brickset.com, 레고 셋의 정보가 있는 곳
◆ 브릭인스트럭션 포털, http://www.bricksonthebrain.com, 자작 레고 조립 설명서를 모아 둔 사이트
◆ 진사토의 HomePage, http://www.mi-ra-i.com/JinSato/MindStorms/index-e.html, 레고 마인드스톰계의 유명 인사인 진사토의 홈페이지, 마인드스톰으로 만든 로봇 개인 미보가 소개되어 있다.
◆ 이소가와의 홈페이지, http://isogawastudio.co.jp/legostudio, 레고와 마인드스톰을 응용한 다양한 작품들이 전시되어 있다. 마인드스톰을 시작하는 사람이라면 꼭 봐야 한다.