앞의 글에 대한 속편이랄까. -_-;;; 이전 시합에서 지고 나서 몇가지 대대적인 공사를 하고, 다시 도전한 끝에 결국 이길 수 있었다. 딱 2명이 한달에 한번 싸우는 시합이지만 그래도 이기니 기분은 좋다. ㅋㅎㅎ

지난 번의 시합 후에, 몇가지 심각한 약점을 발견하고 짬짬이 보완했다. 우선은 하드웨어... 로봇 몸체를 거의 다시 설계...라기보다 그냥 조립하면서 설계를 바꿔 나갔다. 일전에는 조금이나마 멋진 디자인을 목표로 했다면, 이번에는 최대한 목표에 맞게 바꾸는 게 목표.

SsirumBoy X

뭐가 달라졌는지 잘 안 보인다. -_-;;; 포인트는 무게중심을 낮춰서 발랑 뒤집어지는 일이 없도록 하고, 3륜이었던 것을 4륜 혹은 6륜으로 바꿔서 역시 안정성을 높였다. 그러기 위해서 런던에 간 김에 바퀴부품을 사오기도 하고 동네 테스코에서 할인해서 파는 소방차 세트를 낼름 집어오기도 했다는. ㅡ_ㅡ 그리고 약간 변칙이지만, 씨름장에 높이가 있어서 그 가장자리에 바퀴가 빠졌을 때 어이없게 떨어지는 걸 방지하려고, 바닥에 임시로 균형을 잡을 수 있는 지지대를 설치했다.

SsirumBoy XSsirumBoy XSsirumBoy X

덕택에 저번처럼 여유있고 비례감있는 디자인은 아니지만, 좀처럼 넘어지지는 않게 됐다. 제풀에 넘어지지는 않게 했으니 일단 (자체적으로) 합격.

다음은 소프트웨어인데, 이건 사실 딱 두 군데만 수정했다. 이전 버전에서 상대방의 거리를 측정한 다음 딱 그만큼만 달려가도록 한 것을 (생각해 보면 왜 그랬는지 모르겠다 -_-;; ) 링 가장자리까지 계속해서 밀어붙이도록 했고, 먼저 주변을 살피고 눈앞을 살피던 방식을 먼저 눈앞을 살피는 '보초병 알고리듬'으로 바꿨다. 요컨대 눈앞에 적이 있으면 무조건 "으싸으싸" 밀어붙이는 공격형이랄까.

뭐 덕택에 좀 피에 굶주린 듯한 행동거지를 보이는 놈이 되기는 했지만, 마침 이마팍에 갖다붙인 소방차 부품과 어울리므로 그럴 듯하다. 시합 내내 그야말로 미친듯이 밀어붙이는데, 뭐 다행히도 폭주해서 도장 밖으로 뛰쳐나가지 않고 끝났다. (테스트에서는 꽤 자주 그랬는데 천만다행 ㅎㅎㅎ )

결과는 5판 3승제로 했는데 3:1로 승부를 지을 수 있었다. 훗훗훗.



이제 상대 로봇을 이겼으니 상대방도 다시 업그레이드를 시작할 테고, 나는 나름대로 바퀴 버전의 최선의 모습을 보였다고 생각하고 다리 버전으로 넘어갈까 생각 중이다. 그런데 과연 4족 보행로봇(사실은 이미 설계안 확정;;) 이 기동력에서 과연 바퀴달린 놈을 이길 수 있을까나. -_-a;;;

거기, "그래서 이게 Robot UI랑 무슨 상관인데?"라고 하신 분. 덕후의 로망을 이해하지 못하는구먼! 버럭!!! *_*=3 ... 사실은 요새 영 재미있는 소재가 없기 때문이긴 하지만.
신고
Creative Commons License
Posted by Stan1ey

늘 갖고싶었던 장난감이 있었다. MIT와 합작으로 개발 중이라는 소문에 가슴이 설레고, LEGO에서 출시되었다는 소문을 듣고 업무핑계로 사놓고서도 당장의 일에 바빠서 손대지 못하고, 경제적/시간적인 여유가 없다는 핑계로 미뤄온 게 어느새 10년이 넘었다. 그러던 장난감을 드디어 이번에 대대적으로 -_- 질러 버렸다.

LEGO Mindstorms

레고 마인드스톰 LEGO Mindstorms... 덴마크가 코앞(?)인 이 동네까지 와서 이걸 안 산다면 도대체 무슨 핑계를 더 대야 하는 건가 싶었는데, 마침 회사에서 로봇 스모 경기(그냥 '경기장 밖으로 밀어내기' 게임; 원래는 로봇의 면적 규정이 있는데, 회사에서 하는 친선놀이에는 그런 거 없다. ㅎㅎ )를 하는 친구들이 있어서 동참하기로 하고 질렀다. ... 그리고 이어진 잠 못 이루는 주말 3연타. ㅠ_ㅠ

처음 목표는, 그래도 로봇 좀 구경해본 입장인데 센서나 액츄에이터 특성을 잘 활용한 물건을 만들자! 라는 야심찬 계획이었으나, 결국 현실과 타협하다보니 그만그만한 놈이 나와 버렸다. 지난 몇주간 짬짬이 작업하면서 겪은 수많은 변화 중에서 그 세가지 (주요) 버전의 로봇 디자인은 다음과 같다.

SsirumBoySsirumBoy Mark IISsirumBoy X

... 사실 뭐가 달라졌는지는 잘 보지 않으면 안 보인다. OTL... 첫 버전에서는 터치센서(라고는 하지만 사실은 그냥 soft dome switch)을 앞에 달아서 상대방을 명확히 감지하려고 한 건데, 사진을 본 동료들이 "... Boy 구나.*-_-* " 라고 하는 바람에 디자인 상의 결격사유로 탈락. 때마침 추가주문 -,.-;;; 한 가속도 센서와 광센서가 도착한 덕택에 두번째 버전을 만들었으나, 광센서를 좌우로 배치하는 게 '밀어내기' 경기에서는 그닥 도움이 되지 않는 관계로 전면적인 재설계. 결국 세번째처럼 광센서를 앞뒤로 배치하고 가속도 센서를 등에 짊어진 형태가 됐다.

최종적으로 정해진, 아무도 궁금해하지 않는 하드웨어의 설계 스펙은 이렇다.

Distance Sensor of SsirumBoy
초음파 거리 센서
: 눈처럼 생긴 부분으로, 한 방향 밖에 보지 못하므로 몸체 자체를 회전시켜서 상대방을 찾도록 되어 있다. 미로찾기 경기에 사용되는 마이크로 로봇의 경우처럼, 센서를 경사지게 배치해서 시야를 제한시켰다. 실제로 시합장 바깥까지 보면 로봇도 정신이 없어진다. 초음파 센서는 인식면의 반사특성에 따라 거리를 다르게 인식하기 때문에 균일하게 만들어진 시합장 표면만 내려다 보도록 한 거다. 결과적으로 오인식률은 낮췄다고 생각하는데, 실제로는 어떤지 모르겠다.

Light Sensor of SsirumBoy
광 센서
: 로봇 스모 경기는 흰색 테두리가 있는 검은색 원형 경기장에서 치뤄지는데, 우선 경기장 안에서 스스로 뛰쳐나가지 않는 게 기본이다. 그러다보니 일반적인 line tracer와 같은 식으로 반사형 광센서를 바닥을 향해서 설치해서 경기장 안을 향하고 있는지 밖을 향하고 있는지 알 수 있도록 했다. 광 센서는 주변광에 대한 영향을 많이 받아서 회사하고 집에서 동작이 너무 달라지길래, 자체 calibration 기능을 넣어 경기를 시작하기 전에 약간의 쑈를 하면서 해당 조명조건 하에서 바닥을 판단/학습하는 기능이 있다.

Accelerometer of SsirumBoy
가속도 센서
: 가장 고민이 많이 된 센서로, 로봇 자체가 움직이다 보니까 계속해서 극단값이 들어오는데 그것만으로는 자세를 판단하기가 어려웠다. 몸체 중심에 배치해서 진동을 최소화하는 것도 실패하고 나서, 결국 고민 끝에 오히려 가장 많이 흔들리는 등에 짊어지게 해 놓고 별도로 normalizing 하는 함수를 넣었다. -_-a;; 결국 센서 신호가 있는 후에 판단까지 0.1 초 정도의 지연이 있지만, 사실 자세 신호를 써먹을 수 있는 것은 상대방이 로봇을 들어올리려고 하는 경우 뿐이고, 넘어진 상태라면 뭐 팔이 있는 것도 아니니 그냥 밀려나가는 수 밖에 없다. 그다지 경우의 수가 많이 않지만 순간회피동작만 하나 넣고 말았다. (비싼 센서인데 써먹을 데가 없다니!)

Step Motors of SsirumBoy
스텝 모터(x2)
: 기본으로 제공하는 모터가 스텝모터라는 건 좀 의외였다. 로봇을 앞세우는 컨셉이라 그런가. 어쨋든 꽤 다양하게 조작할 수 있었는데, 각 센서에서 내세우는 우선권을 비교해 가면서 동작을 움직이려니까 모터가 앞뒤로 흔들리면서 고민하는 경우가 많아서 (상충되는 명령이 무한반복으로 돌아갈 경우) 의외로 다루기가 어려웠던 부분이다. 처음에는 MIT의 synthetic agent 모델을 들여다보면서 넣어보려고 하다가, 결국은 그냥 확률과 랜덤, 그리고 두어개의 우선권 flag로 대충 구현해 버렸다.

Status Indicator of SsirumBoy
LED
: 사실은 포트가 남아서 넣은 거지만, 로봇이 무슨 '생각'을 하고 있는지를 표시하는 데에 도움이 많이 되고 있다. 상대방을 발견하면 불을 켜고 달려들고, 긴가민가 할 때는 깜박이거나 하는 등 유일하게 외부로의 표현이 들어간 부분이다. <Affective Computing>에 따르면 로봇의 이런 상태들이 인간의 감정에 해당하는 부분이라고 했으니, 이런 깜박임이 이 로봇의 표정이라고 해도 되겠다. 이 포트에는 모터를 달 수도 있는데, 좋은 아이디어가 떠오르기만 하면 표정이고 나발이고 집게 팔을 하나 달아서 공격용으로 쓸까 생각 중이다. ㅎㅎㅎ

Debug Screen of SsirumBoy
화면 및 음성
: 중앙의 정보처리 및 통신 모듈인 RCX 상자에는 작은 LCD 화면과 스피커가 있는데, 이 안에도 몇가지 표시가 들어오도록 했다. 그래봐야 각 센서의 상태와 입력값, 그리고 그에 따른 판단결과를 두 가지 모드(실전 및 debug)로 표시하고, 특정 상황이 인식되면 적당한 대사를 - "Hello", "Ooops!", "Watch Out!", "Game Over" 따위의 - 말하도록 해 두었다.



위와 같은 내용을 구현한 소프트웨어는 NXT-G라는, 그냥 기본으로 포함되어 있는 그래픽 방식의 프로그램을 이용해서 개발했다.

LEGO Mindstorms Education NXT: Screenshot

이 프로그램은 레고하고 똑같이 각 모듈의 블록을 연결해서 시각적으로 프로그래밍을 할 수 있게 해주는데, 'Pure Data' 같은 그래픽 프로그래밍 도구의 좀 과하게 화려한 버전이라고 생각하면 된다. 굳이 "과하게"라고 한 이유는, 이게 워낙 다운이 잘 되어서, 마치 10년전의 포토샵 교본에 나와있는 것처럼 "수시로, 자주, 여러 파일로 저장해 놓을 것!" 이라는 게 첫번째 사용지침이었다. (실제로도 얼마나 날려먹었는지. -_ㅠ )

여하튼 하드웨어와 소프트웨어가 만나자면 이건 뭐 예상치 못한 문제가 한두가지가 아니다.


이런저런 고생 끝에 이제 완성(했기로)하고, 이제 이번 주에 대망의(?) 첫번째 경기를 하기로 했다. 상대방이야 마이크로 로봇 키트로 만들어진 로봇이라 사실 기동력 면에서 영 불리하지만, 뭐 선무당이 사람 잡는 경우도 있으니까. (아, 이게 아닌가 -_-;; )

이 글은 그동안 왜 블로그가 한적했는지에 대한 핑계를 겸하고 있다. ^-^a

저작자 표시 비영리 변경 금지
신고
Creative Commons License
Posted by Stan1ey

BLOG main image
by Stan1ey

카테고리

분류 전체보기 (347)
HTI in General (45)
User eXperience (11)
Voice UI (50)
Vision UI (14)
Gesture UI (25)
Tangible UI (28)
Robot UI (14)
Public UI (9)
Virtuality & Fun (56)
Visual Language (15)
sCRAP (70)

글 보관함



www.flickr.com
This is a Flickr badge showing public photos and videos from Stan1ey. Make your own badge here.