Speedy 삼총사

[회사 블로그에 올렸던 내용입니다]

내가 마우스를 만든 기간이 1986년에서 1989년이니 이미 마지막으로 손댄지 15년이 지났다. 그 때 만들었던 마우스들이 아직 이 정도 나마 형체를 유지하고 있는 것이 다행이다. 더 망가지기 전에, 내 기억이 더 희미해지기 전에 어딘가에 기록을 남겨야겠다고 계속 생각하고 있던 일을 이제야 하게 된 것이다.
내가 미로 찾는 마우스라는 것을 처음 들어본 것은 고등학교때였던 것으로 기억한다. 그 때 서울대학교 제어계측공학과에서 한국 최초로 마이크로 마우스 대회(그 당시 명칭은 "전국 마이크로로봇 대회")를 개최하면서 신문에 나온 것을 봤던 것 같다. 아뭏튼 그 때부터 나는 제어계측과를 가기로 맘 먹었고 결국 가게 되었으니 마우스라는 것이 내 일생에 그 때부터 영향을 끼치기 시작했던 것 같다.

그토록 바라던 제어계측과에 들어갔으나, 1학년 때에는 대회에 나갈 엄두를 못 내었다. 사실, 그 때도 시도는 할 수 있었겠지만 미팅도 하고 놀기 바빠서 마우스처럼 한번 손대면 몇달은 족히 걸리는 일을 감히 엄두내지 못했다. 대신 가을에 열렸던 제4회 대회 구경을 갔었는데, 그 때 충격적인 일이 있었다. 우리 과 선배들이 만든 마우스는 아예 움직이지도 않는 경우도 있었고 (대회엔 왜 나왔는지...) 목적지까지 찾아 가는 것 자체가 목적이라 속도는 신경쓰지도 못 할 수준이었는데, 시범 경기를 보여준 일본의 노리코는 정말 쥐새끼처럼 빠른 속도로 미로를 자유자재로 달리는 것이었다. 그 때부터 4년간은 마우스가 어떻게 하면 빨리 달릴 수 있을까 하는 생각을 머리속에서 떨칠 수가 없었다.


Speedy 1

대학교 2학년에 올라가면서 마우스를 드디어 만들기 시작했다. 정말로 아는 것이 없는 때 였지만, 속도가 빨라야 한다는 막연한 욕심에 성능/무게 비율이 좋은 DC 모터를 사용하기로 했다. 사실은 국민학교-중학교때 만들던 장난감의 연장 정도로 생각하고 있었던 것이다.

시작하면서 가장 힘들었던 일 중의 하나는 마우스의 이름을 짓는 일이었다. 그 당시 마우스 중에는 "골목대장" 처럼 재치있는 이름도 있었으나, 나는 이름에서부터 속도감이 느껴지는 것으로 하고 싶었다. 결국 몇 주만에 Speedy로 정했는데, 어감이 강아지 이름 같기도 했지만, 암튼 이 이름이 시리즈가 되어 몇년동안 사용될 줄을 그 땐 몰랐었다. 처음 만들기 시작할 때엔 그냥 "Speedy", 나중에 Speedy 2와 3를 만들면서는 "Speedy 1"으로 불렀던 이 마우스는 그 당시로는 여러가지 새로운 시도를 했었고 아마도 참신성에 있어서는 Speedy 삼총사 중 1위가 아니었던가 한다.


그 당시엔 같이 마우스를 만들 친구를 구하기 어려웠기 때문에 혼자서 외롭게 작업했었고 (여자 친구도 없었음!), 그 때문에 충돌 감지 스위치, 오동작을 줄이기 위핸 투과식 광 센서, 손으로 패턴을 에칭한 에폭시 기판을 몸체로 이용한 점이라던가 폭을 줄이기 위해 기어박스가 안쪽으로 들어가는 (단면이 "ㄷ"자 형태인) 특수 바퀴, F14처럼 접히는 날개 등 독창적인 구조의 마우스가 만들어졌던 것 같다.

하지만 물론 아무리 독창적이더라도 결국 중요한 것은 결과. PI제어의 "P"자도 모르는 상태에서 DC 모터를 써서 만든 엉터리 제어 알고리즘으론 마우스가 똑바로 가지조차 못했다. 조금만 자세가 비뚤어지면 에러를 보정하고, 보정량이 너무 커서 다시 반대로 비뚤어지고, 이러다가 진폭이 커지면서 벽을 들이 받았다. 하지만 충돌 센서에 의해 뒤로 후진했다가 방향을 틀어 다시 전진하길 반복했다. 결국 대회에 나가길 포기하려 했었는데, 주위의 친구들과 선배들은 그래도 나가는 것이 더 낫다고 했고, 대회에선 간신히 몇 칸 정도를 갈 수 있었던 것으로 기억한다. 하지만 그래도 독특한 모양과 동작으로 많은 관중의 인기를 끌었던 것 같다.


H/W Specifications

CPU: Z-80A 4MHz
RAM: 2KB S-RAM
ROM: 8KB EPROM
Timer: Z80A CTC
PIO: Z80A PIO
Front sensor: 2 x IR transmittive
Side sensor: 6 x IR, transimittive
Collision sensor: 4 x micro SW
Motor: 2 x DC motors with hand-made encoder
Host interface: direct bus connection to custom parallel interface board on PC

소프트웨어

모든 소프트웨어는 Z-80 어셈블리어로 만들었었다. 그 당시 내가 사용하던 FDD밖에 없는 IBM-PC 호환 컴퓨터에서 command line 방식의 assembler/linker를 사용하는 것은 꽤나 불편했기 때문에 Pascal로 Z-80 어셈블러, 다운로더, 메모리 편집/dump 기능등을 갖는 간단한 IDE를 만들었지만 결국 대부분의 코딩과 디버깅은 80컬럼 연속 프린터 용지 위에서 손과 머리로 했던 것 같다. 길 찾는 알고리즘은 당시 표준으로 사용되던 "등고선 알고리즘"이었는데, 최단 거리 경로를 효율적으로 찾아주므로 직선 구간 가속 기능이 없던 당시 마우스에는 충분한 알고리즘이었다 (물론 Speedy 1에는 가속 기능이 있었다.... 똑바로 가지 못했던 것이 문제였지만).

디버깅 장치라곤 LED와 실제로 동작하는 것을 눈으로 보는 방법 밖에 없었다. 나중엔 메모리에 남아있는 값을 연결 포트를 통해 읽어내는 방식을 사용했으나 불편하긴 마찬가지였다. 이 당시만 하더라도 디버깅용 시리얼 포트가 있는 경우조차도 드물었었고 대부분 EPROM을 구워 소켓에 꽂고 잘 안돌면 눈과 머리로 디버깅하는 방법 밖에 없었다.


Speedy 2

Speedy 1의 실패를 거울삼아, Speedy 2는 스테핑 모터를 사용하고 과욕을 부리지 않기로 했다. 스테핑 모터를 사용함에 따라 기판의 크기가 커지게 되었고, 결국 CPU 보드와 I/O 보드를 나누어 2층으로 탑재했다.

(모터와 바퀴는 Speedy 3에 재활용되었음)


측면에는 Speedy 1과 마찬가지로 투과식 적외선 센서를 사용했다. 투과식은 일반적으로 사용하는 반사식에 비해 훨씬 주변 환경에 덜 민감했지만, 광선의 방향이 비스듬히 기울어져 있으므로 날개(수광 센서)의 높이에 따라 벽의 위치가 다르게 측정된다는 문제가 있었는데 이 문제는 날개를 앞바퀴와 함께 움직이도록 해서 어느 정도 해결되었다. 센서를 장착한 날개는 Speedy 1과 달리 위쪽으로 접힐 수 있도록 했다. 접었을 때 크기가 컴팩트해지기 때문에 비교적 소형의 전용 가방에 폼나게 넣어다닐 수 있었다.
Speecy 1에서 회전식 캐스터가 진행 방향의 오차를 발생시켰기 때문에 Speedy 2에서는 고정식 보조바퀴(베어링)을 사용했는데, 생각보다 마찰이 커서 좋지 않았으나 나중에 바꿀 수는 없었다. 전방 보조 바퀴는 전방 초음파 및 측면 적외선 센서부와 함께 움직이도록 했고 후방 보조 바퀴는 각각 독립적으로 움직이도록 했다. 대개 전자 전공인 사람이 마우스를 만들 때 서스펜션 같은 기계적인 부분은 별로 중요하지 않게 생각할 때가 많은데, 급격한 가감속시 좋은 서스펜션을 갖고 있지 않으면 보조 바퀴가 바닥에 부딪히는 충격에 의해 진로가 바뀌는 현상이 나타났다.


초음파 센서는 처음 사용해보는 것이었기 때문에 전기적 잡음에 얼마나 민감할 지 예상을 할 수가 없었다. 그래서 수신 회로는 별도의 알루미늄 박스에 넣었는데, 지금와서 생각해보면 좀 over engineering이었던 것 같다. 어쨌거나 bipolar 구동의 송신부와 함께 1미터 이상의 꽤 먼 거리에서도 미로 벽을 검출할 수 있었다. 이 점은 나중에 버그로 나타나서 원인을 발견하기까지 한참 걸렸는데, 초음파 센서 샘플링 주기를 너무 짧게 잡아 멀리 떨어진 벽에서의 반사파가 그 다음 샘플링 주기에 수신이 되어 바로 앞에 벽이 있는 것으로 인식하는 일이 있었던 것이다.

서울대학교 주최 대회

Speedy 2는 1987년 제 5회 전국 마이크로로봇 경연대회에서 1등을 했다. 한국 최초로 1분 벽을 깨는 순간 (38초) 나는 대회장(서울대학교 문화관 소강당)의 500여 관중들로부터 기립 박수를 받았는데, 그 때의 감흥은 아마 평생 잊지 못할 것 같다. 대회용 전광판을 제작했던 내 동기 친구들(장래혁, 박정우 등)은 운영요원으로 무대위에 앉아 있었는데, 기록 수립 후 이 친구들과 차례로 악수를 하고 교수님과 관람석 쪽으로 인사를 했더니 미리 연습해서 연출한 장면이 아니냐는 오해도 받았었다. 난 그 때 여자 친구를 데리고 와서 옆자리에 함께 앉아 있었는데 친구들의 눈총도 좀 받았지만 그 이후로 대회에 여자 친구를 데리고 오는 전통을 만들어냈다.

대회 1등상으로 현대에서 만든 IBM 호환 PC를 받았는데, 이 PC에는 10MB의 HDD가 달려있었다. 요즘 HDD에 비해서야 용량이 1/10000 밖에 안되지만 플로피밖에 없었던 내게는 HDD가 너무 빠르고 편리했다.

IEEE 주최 대회

학교의 추천을 받아 IEEE APEC 주최의 대회에 나가게 되었다. 생전 처음 해외 여행하는 것이어서 우여곡절이 많았다. 당시만 하더라도 군 미필의 남자가 해외에 출국하는 것은 범죄자가 해외출국하는 것 만큼이나 어려웠다. 학교 추천서와 주최측 초청장까지 있었는데도 단수 여권을 받느라 병무청과 내무부, 학교를 몇차례 왔다갔다 해야 했고 결국 아는 분 통해 모 권력기관의 힘을 빌어서야 여권을 받을 수 있었다. 여권을 일단 받으니 미국 비자는 오히려 쉽게 나왔다.

그 때까지 제주도도 못가봤던 내가 생전 처음 비행기 타고 혼자 해외 여행을 하게 되었는데, 때마침 KAL기 폭파 사건이 일어나면서 보안 검색까지 대폭 강화되었다. 그 때 김현희가 라디오 내부에 폭탄을 넣었었기 때문에 모든 전자제품은 정상동작하는 것을 보인 후 배터리를 분리시켜야 했다. 결국 나도 마우스를 공항 검색대 위에서 동작시켜 보여야 했다. 재미있었던 것은, 김포 공항에선 공항 직원이 나와서 "빳데리 모두 빼서 주세요~"하고 소리쳤는데 미국으로 가니 역시 한국 사람인 공항 직원이 나와서 "배러리 맡겼던 분~"하고 혀꼬부라진 소릴 해서 미국에 도착했다는 실감을 할 수 있었다.

긴장감 속에 시작한 대회에서 Speedy 2는 생각처럼 잘 동작하지 않았다. 바닥의 마찰 계수가 달랐던 것이 원인인 것 같은데 결국 대회 규정을 살짝 어기고 메모리를 지우지 않은 채로 배터리를 교환한 후에야 완주를 할 수 있었다. 그럼에도 불구하고 전체 3등, 학생부 1등을 할 수 있었는데, 이건 미국 학생들이 만든 마우스도 우리나라 학생들이 만든 것 보다 썩 낫지 않았고 (더 독창적이긴 했다) 다들 소심해서 내가 대회 규정을 어긴 것을 항의하는 사람이 없었던 탓이기도 했다.

어쨌거나 미국에서 상을 타고 오니 TV나 신문에 몇 차례 나올 기회가 있었다. 사실 국내 대회에서 1등한 것이 미국 대회에서 3등한 것만 못하지 않았는데도 미국 대회에 대해서만 언론은 관심을 가졌고 언론에 소개된 후엔 심지어 여학생의 팬레터까지도 받아봤다. 이 때부터 사람들의 기술 사대주의와 언론의 위력(?)을 실감할 수 있었다.

H/W Specifications

CPU: Z-80A 4MHz
RAM: 8KB S-RAM
ROM: 8KB EPROM
Timer: Z80A CTC, Intel 8253
PIO: Z80A PIO
Front sensor: ultrasonic
Side sensor: 6 x IR (transimittive) + 2 x IR (reflective)
Motor: 2 x stepping motor with bipolar driver
Host interface: direct bus connection to custom parallel interface board on PC

소프트웨어

Speedy 1과 크게 다른 점은 없었으나, Speedy 1이 기본적인 주행이 안되어 나머지 알고리즘 부분은 제대로 테스트해볼 기회도 없었던 것을 Speedy 2에서 완성할 수 있었다.


Speedy 3

Speedy 2로 상도 타고 유명세도 얻은 후 4학년이 되었다. 그 당시 서울대 제어계측과를 졸업하기 위해서는 "졸업 프로젝트"라는 악명 높은 과목을 이수해야만 했다. 이 과목을 수강하게 되면 한학기 내내 프로젝트에만 매달려야 했는데, 지금 생각해봐도 학부생들로서는 꽤 부담스러운 프로젝트를 수행해내어야 했다. 난 다른 것을 해 볼까 하는 생각도 안했던 것은 아니었지만 결국 마우스를 또 만들기로 했다. 이미 머리가 마우스에 대한 아이디어로만 꽉 차있어서 다른 생각을 해낼 수 없었다. 또 지난 대회에서 2등을 했던 박남규 선배(현재 거원 대표이사)가 또 대회에 나온다고 했기 때문에 경쟁심이 발동해서이기도 했다.

결국 Speedy 3를 만들게 되었는데, 미국 대회 수상 등으로 우쭐한 기분에 스스로 목표치를 너무 높혀 잡았던 것 같다. CPU도 16bit 로 업그레이드하고, 센서의 수도 대폭 늘리고 모터도 훨씬 높은 전압으로 드라이브하는 등 하드웨어의 모든 스펙을 Speedy 2와 비교할 때 2배~4배로 업그레이드하느라 소프트웨어를 제대로 만들 여유가 없었던 것이다. 아마 이런 건 한번 히트 상품을 내놓은 신생 기업에서도 흔히 있는 일이 아닐까? 유명해졌으니 다음 버전은 훨씬 더 획기적이고 강력한 것을 내놓아야 한다는 착각에 사로잡혀 균형 잡히지 않은 제품을 내놓거나 아예 제품 출시가 아주 늦어져 버리는 일...




제6회 대회
아뭏튼 그렇게 만들어진 Speedy 3는 최고 속도가 좀 빨라진 외에는 사실상 Speedy 2와 크게 다르지 않은 채로 대회에 나가게 되었다. 박남규 선배의 Turbo(몇 호인지 기억나지 않음)는 유사 smooth turn을 구현하는 등 Speedy 3보다 기술적으로 나은 점이 있었지만 항상 대회운이 나빴던 탓에 결국 Speedy 3에 1등 자리를 다시 내놓아야 했다. Speedy 3가 Turbo에 비해 상대적으로 feature를 희생하면서 안정화를 조금 더 하기는 했지만, 운이 좋았던 점도 부인할 수 없다.

Speedy 3 Plus

대학원에 진학하면서는 학부 때만큼 시간이 많지가 않았다. 하지만 Speedy 3는 만들다 만 것 같아서 도저히 그대로 끝낼 수는 없었다. 대학원에 들어가면서 그 당시 널리 쓰이기 시작한 C언어를 공부했는데, 이번에는 C언어를 이용하고 소프트웨어에 치중해서 Speedy 3를 업그레이드하기로 했다 (이 때부터 ITSS - It's the software, stupid!의 원칙을 배우게 된 것 같다). 이 전에 박남규 선배가 Turbo Pascal을 사용한 적 있었지만 C언어를 사용한 마우스는 내가 알기론 국내에서 Speedy 3 plus가 최초였다. C언어를 사용하기로 했을 때 가장 우려했던 것은 ROM화가 가능하냐는 것과 어셈블리어만큼의 속도가 나오느냐는 것이었다. 결국 터보 C 컴파일러의 어셈블리어 출력을 한참 분석하고 C statement를 어떻게 쓰면 컴파일러가 어떻게 코드를 출력하는 지에 대해 감이 생긴 후에야 C언어로도 가능할 것이라는 확신을 할 수 있었다 (그러다 컴파일러 버그를 하나 찾기도 했다).

C 언어를 사용하니 portability가 생기면서 PC상에서 요즘식으로 말하면 unit test가 가능해졌다. 간단한 시뮬레이터를 만들어 길 찾는 알고리즘을 개발하고 튜닝하는데 이용했고 여기서 사용된 알고리즘은 옵션바꿔 다시 컴파일하기만 하면 마우스에 탑재할 수 있었다. 마우스의 CPU가 8088 호환이기도 했지만, 굳이 CPU 호환성이 없었더라도 가능한 일이었기에 high level language를 사용하는 효과를 실감할 수 있었다. 이에 따라 소프트웨어 생산성이 대폭 향상되어, 결국 직선 구간의 가감속이나 방향 전환에 필요한 오버헤드까지 고려하는 최단시간 경로 탐색 알고리즘을 만들 수 있었다. 기존의 등고선 알고리즘이 breath-first 알고리즘인데 반해 최단시간 경로 탐색은 depth-first일 수 밖에 없었고, 계산해야 할 경우의 수가 대폭 늘어나게 되었지만 검색 중지 조건울 추가하고 C의 매크로를 사용, 코드를 최적화하여 대개 1초 내에 최단시간 경로를 계산할 수 있었다.

그 외에 속도 향상에 절대적이었던 "smooth turn"을 구현할 수 있었고, 정지 후 재 출발 시 위치 교정, 1차 탐색 알고리즘의 개선 등 S/W에서 대폭적인 개선을 해서 이제야 비로소 Speedy 3의 하드웨어를 제대로 활용할 수 있었다.

제 7회 대회



소프트웨어는 짬짬이 짬을 내어 시뮬레이션으로 구현하고 테스트할 수 있었지만, 하드웨어 특히 실제 주행에서의 테스트는 그렇게 할 수 없었다. 아는 사람은 다 알겠지만, 우리나라 웬만한 대학의 공대 대학원은 회사에 못지 않게 학생들에게 full-time을 요구한다. 내가 다녔던 연구실은 별로 그런 게 심하지 않았지만 그래도 대학원 신입생으로 교수님 눈치를 보지 않을 수 없었다. 결국 교수님으로부터 여름 휴가를 1주 얻은 후 몰래 학교에 나와서 최종 실험과 튜닝을 했는데, 한번은 복도에서 교수님과 마주쳐서 휴가기간 중 왜 학교에 나왔는지 얼버무리느라 혼났던 기억이 난다.

아뭏튼 우리과 주관의 대회인 만큼 교수님들이 다 참석을 하셔서 내가 그동안 딴 짓하고 있었던 것이 알려질 수 밖에 없었다. 1등 수상 후 교수님이 기분 좋아하시면서 칭찬해주신 후에야 맘이 놓였다. 그 때까지도 교수님의 성품을 잘 몰라서 이런 일 하는 것을 어떻게 생각하실 지 확실할 수 없었지만, 이제와서 생각해보면 미리 말씀드렸어도 대학원 일을 소홀히 하지만 않았으면 별 문제 없었을 것 같다.

쥐 모양 머리의 유래

원래 Speedy 3의 앞부분은 특별한 기능 없이 만화영화에 나오는 우주선이나 로봇의 머리 같은 형상을 하고 있었다 (여기에 비밀 센서가 숨어있는 것 아니냐는 추측들도 있었으나 사실이 아니었다). 그런데 학교 실험실에서 Speedy 3 plus로의 업그레이드 작업을 하고 있는 중에 친구 박상환(현재 위트콤 대표이사)이 와서 한번 만져본다고 하다가 머리 부분을 망가뜨려버렸다. 그냥 수리하면 되는 것이었지만 나는 농담삼아 "더 멋지게 고쳐놔라"고 했고, 박상환은 그러겠노라고 했다. 그 다음날, 조그만 쥐 모양 저금통을 들고와서 이걸 쓰라고 했다. 자기가 가게 지나가다 보고 마우스를 만들 때 쓰려고 사둔거라나. 아뭏튼 그걸 받아 실톱으로 잘라 떨어져나간 부분에 갖다대니 신기하게도 크기가 딱 맞았다. 꼬리도 따로 떼어서 뒷 부분의 IC위에 순간접착제로 고정시키니 영락없는 마우스였다. 드디어 아이들도 좋아할 만한, 포토제닉 마우스가 탄생한 것이다. Speedy 3 plus는 실제로 "뽀뽀뽀"였던가, 애들 TV 프로그램에 출연한 적이 있다. 이 즈음엔 마우스에 대한 관심이 전국적으로 퍼지면서 몇몇 학교의 동아리나 관련 학과 세미나에 초대받아 가게 되었고, Speedy 2때부터 사용하던 전용 가방을 톡톡히 활용할 수 있었다.


Speedy 3 plus 이후, 직장에 취직도 하게 되면서 더 이상 마우스를 만들지 않기로 결심했지만 몇년동안은 자꾸 마우스에 대한 새로운 아이디어가 생각나는 것을 막을 수 없었다. 심지어 골목길을 걸어갈 때나 운전을 할 때에도 "어떤 길로 가야 빨리 가나"하는 생각을 자꾸 하게 된다. 습관이 얼마나 무서운 것인가.

Specification
CPU: NEC V40 8MHz
RAM: 32KB S-RAM
ROM: 32KB EPROM
Timer: Intel 82C53
PIO: Intel 82C55
Front sensor: ultrasonic
Side sensor: 32 x IR (reflective)
Motor: 2 x stepping motor with constant-current bipolar driver
Host interface: RS-232C
by alphageek | 2004/08/07 08:36 | 기타 | 트랙백 | 핑백(1) | 덧글(5)
Linked at terraforming님의 글.. at 2007/10/23 00:04

... 80년대 후반 마이크로 마우스 경진대회 3연패를 달성했던 전윤호씨와 그의 Speedy 시리즈를 기억하시는 분이라면... [Speedy 3총사][그의 홈페이지] 오전 12시 4분 옛사람 ... more

Commented by 미친병아리 at 2004/08/07 16:08
정말 재미난 글 잘 읽었습니다..
Commented by 프리버즈 at 2004/08/07 21:10
정말 멋집니다. 부럽고, 존경스럽네요. 열정이 가득 담겨 있는 글, 재미있게 잘 읽었습니다.
Commented by LikeJAzz at 2004/08/08 01:59
16년만에 다시보는 저금통 쥐모양 마우스는 여전히 귀엽게 생겼네요. 아직도 건재해보입니다 ^^
Commented by Yena at 2004/08/11 02:15
오 이게 마우스예요? 멋지네요
Commented by Yena at 2004/08/11 02:16
-_- 이어지는 글을 보니-_-; 죄송;; 암튼 멋지군요~
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.


<< 이전 페이지 다음 페이지 >>
크리에이티브 커먼즈 라이센스
이 저작물은 크리에이티브 커먼즈 라이센스에 따라 이용하실 수 있습니다.