10년전 로봇 동아리 신입생의 실수

Posted on January 29, 2023 by 주형

동아리에서 만든 로봇을 삼성 테크윈(지금은 한화 테크윈) 본사에서 시연해야 하는 날 아침, 나는 나를 괴롭히는 간헐적인 통신 에러와 씨름을 하고 있었다.


나는 프로그래밍을 로봇동아리에서 배웠다. 대학교에 들어가 고른 전공은 원자핵공학과였다. 1학년 3월의 어느 날 친구의 권유로 로봇동아리에 갔고 그 곳에서 프로그래밍을 배워 컴퓨터공학으로 전과를 했다. 그 때의 동아리 사람들과 로봇동아리를 가게 해준 친구에게는 여전히 감사하다.

동아리에서 참여한 첫 프로젝트에서 나는 통신하는 코드를 작성했다. 로봇이 움직이게 만들려면 꽤 많은 요소가 필요하다. 로봇의 외관을 디자인하고 만들기, 회로를 설계하고 납땜하기, 센서의 값을 읽고 모터를 돌리기, 스마트폰이나 pc에서 복잡한 어플리케이션을 만들기, 칩들 사이의 통신을 만드는 작업들이 필요하다. 나의 주 전공은 통신하는 코드를 작성하는 거였고, 보조 전공으로 회로를 만들거나 모터를 돌리곤 했다.

그 때 삼성 테크윈에서 시연하려고 했던 로봇은 헤드 트래킹과 안구 트래킹으로 조종할 수 있는 로봇이었다. 로봇을 원격으로 조종하기 위해서는 로봇에 카메라를 달고 카메라로 상황을 확인한다. 고정된 카메라 하나로 확인할 수 있는 시야는 매우 제한적이다. 카메라를 여러 개 달거나 하나의 카메라를 움직여 시야를 넓혀야 한다. 그 때 그 로봇은 머리와 눈알 굴리기를 통해서 로봇의 카메라를 조종는, 매우 편리한 ux를 제공하는 로봇이었다. 선배들이 조종석, 스마트 헬멧, 로봇의 차체, 등을 개발했다. 나는 안드로이드 폰에서 오는 명령을 바탕으로 로봇이 움직이게 하는 코드를 작성했다. 신입이지만 그래도 한 파트를 맡아서 뿌듯했다.


로봇 프로그래밍의 재미는 내가 작성한 코드가 물리적인 형태로 나에게 보인다는 점이다. 그건 통신 코드를 작성하던 나에게도 의미가 있었다. 내가 작성한 통신 코드의 동작을 오실로 스코프라는 기계로 직접 확인할 수 있었다. 내가. 10110010 데이터를 보내면 이 모양 이대로 회로의 전압이 바뀌는 걸 디버깅할 수 있었다. -_--__-_ 이런식으로 1과 0의 패턴이 전압의 변화로 보이게 된다.

오실로스코프 사진 - 회로의 전압의 변화를 눈으로 볼 수 있다: UnsplashDoug Baney

로봇을 만들며 공부했던 것들 중 의외로 오래오래 남아 도움이 되는 것들이 있다. 그 중 하나가 오래걸리는 작업을 기다리는 방법이다. AVR 칩에서는 한 번에 1byte 가량의 데이터만 전송하고 읽을 수 있었다. 여러 byte를 읽으려면 블록킹, 폴링, 콜백 형식 중 하나의 방식으로 이전 byte가 전송된 후 다음 byte를 전송하는 코드를 작성했어야 했다.

블록킹, 폴링, 콜백 방식은 은행에서 대기표를 뽑고 기다리는 상황에 비유해서 이해할 수 있다. 블록킹 방식은 하염없이 은행의 다음 번호 스크린을 보고 있는 방식이다. 간단하지만 시간이 아깝다. 내 번호가 10번 뒤라면 적어도 10분 동안은 내 차례가 오지 않을 것이다. 폴링 방식은 중간 중간 다른일을 보고 오는 방식이다. 은행 대기표를 뽑고 편의점에서 아이스크림을 하나 먹고 다시 은행에 오는 방식이다. 시간을 효율적으로 쓸 수 있지만 너무 늦게오면 내 차례를 놓칠 수 있다. 콜백 방식은 은행 앱으로 내 차례가 왔을 때 알람을 받는 방식이다. 편하게 다른 일을 할 수 있긴 하지만 너무 알람을 많이 설정한 경우 알람을 전부 놓치거나, 일이 중간 중간 끊겨 제대로 다른 일을 못하게 된다.

로봇 이외의 분야에서도 블록킹, 폴링, 콜백 방식은 매우 다양한 분야에서 다시 만나게 되었다. 그 로봇을 만든지 12년이 지난 최근에도 블록체인 데이터를 분석하는 코드에서 폴링 방식을 사용했다. 블록체인에서 블록은 주기적으로, 적당히 변칙적은 시간 간격으로 생성된다. 새롭게 생성된 블록을 콜백 방식으로 전달받을 수도 있고, 폴링 방식으로 원할 떄 받아올 수도 있다.


삼성 테크윈은 여러 학교의 로봇동아리에게 매 학기 250만원의 지원금을 주었다. 로봇을 만들기 위해서느 돈이 많이 필요하다. 수십, 수백만원이 필요하다. 삼성 테크윈에서 지원을 해주어서 다양한 로봇을 만들 수 있었다. 삼성 테크윈에서 지원을 받은 동아리들은 방학이 끝나기 전 모여서 만든 로봇을 시연한다. 각 동아리들은 지원받은 250만원으로 헛된 일을 한 게 아니라 유의미한 일을 한 증거를 가져와서 보여주었다. 으레 기한을 정해놓고 기한을 늦출 수 없는 일들이 그러듯이 시연하는 날 제대로 잘 동작하는 로봇은 많지 않다. 대부분 한 순간 잘 동작하던 로봇을 소중히 안고 시연장에 들어간다. 그리고 자신의 차례를 기다린다, 무사히 시연을 할 수 있기를 기도하면서. 다른 팀이 발표하는 중에도 실시간으로 코드 버그를 고치거나 회로의 납땜을 다시 하는 것도 볼 수 있었다.

시니어의 조건 중 하나는 흔히 일어나는 문제를 머리속에 담아놓고 문제가 생겼을 때 빠르게 과거의 지혜로부터 찾아내는 것이다. 그런 경험이 없다면 의심스러운 모든 부분을 하나 하나 점검해나가며 문제의 원인을 찾아야한다. 아쉽게도 내가 작성했던 통신 코드는 잘 동작 하다가도 가끔 먹통이 되는 버그가 있었다. 코드를 잘못 작성했는지 의심했다. 비슷한 동작을 하는 다른 코드를 작성해도 똑같은 에러가 발생했다. 회로에 문제가 있는지 확인했지만 문제가 발견되지 않았다. 통신에 필요한 설정값을 잘못 설정했는지 보았지만 잘못한 부분은 없었다.

간헐적으로 발생하는 문제는 원인을 찾는 게 쉽지 않다. 그리고 항상 시연하는 날 발생한다는 법칙이 있다. 그렇게 시연 날은 하루 하루 다가오고 있었다.


결국 우리 동아리의 발표 차례가 다가왔다. 나는 결국 문제를 해결하지 못했다. 시연은 시작되었다. 선배가 나가서 로봇을 움직였다. 나는 시연장 구석에서 두손을 맞잡고 기도를 하고 있었다. 로봇은 잘 움직였다. 그리고 멈추었다. 명령을 듣지 않은 것이다. 선배는 문제를 확인하고 말을 돌리며 발표를 이어갔다. 그렇게 발표가 끝났다. 아쉬웠다.

문제의 원인은 나중에 밝혀졌다. 회로와 회로를 연결하는 10pin connector의 문제였다. 내가 10pin connector를 거꾸로 만들었던 것이다. 제대로 만들었으면 안정적으로 선이 연결되어 있었겠지만 내가 거꾸로 연결했기 때문에 연결이 안정적이지 못했다. 로봇 좀 몇 번 만들어본 사람이라면 하지 않을 실수지만 첫 작품에 참여했던 나는 상상도 못했던 실수였다. 시연은 이미 끝난 뒤였고, 나는 10pin connector를 잘 만들어야한다는 교훈을 얻었다.

10pin connector의 사진 홈이 있어서 앞뒤를 구분할 수 있다. 신입생은 몰랐지만

(10년도 더 지난 과거의 일이라서 많은 부분에서 잘못 기억하고 있을 수 있습니다. 적당히 소설이라고 생각해주세요.)