2019 AgBot 챌린지

이스트 고등학교

콜로라도 덴버의 이스트 고등학교에 다니던 시기(2014-2018) 동안, 저는 방과 후 활동에 매우 적극적으로 참여했는데, 그중 가장 큰 영향을 준 것은 로보틱스 동아리인 AngelBotics였습니다. 처음에는 축구에 집중하고 있었기 때문에 동아리에 가입한 것은 2학년 때였습니다. 이 동아리는 주로 FIRST 로보틱스 대회 (FRC)에 참가했으며, 이를 통해 저는 기계공학과 전기공학, 그리고 프로그래밍을 탐구할 수 있었습니다. AngelBotics를 통해 저는 CAD 도구, 3D 프린터, 그리고 기타 공학 장비를 사용하는 법을 배웠고, 대학생들에게나 주로 허용되는 STEM 개념들을 접할 수 있었습니다. 처음에는 양자 물리학자가 되기를 꿈꿨지만, AP 물리와 로보틱스 경험을 통해 제가 물리를 그다지 잘하지 못한다는 것을 알게 되었고, 그 결과 기계공학 진로에서 멀어지게 되었습니다.

대신 저는 프로그래밍에서 저만의 적성을 찾았고, 그것은 처음 라즈베리 파이에서 파이썬 코드를 작성하면서 시작되었으며, AP 컴퓨터 과학에서의 자바 프로젝트들을 통해 더욱 굳어졌습니다. 시험에서는 고전했지만, 제 선생님인 Nagel 선생님은 저에게 소프트웨어 개발을 추구하라고 격려해 주셨고, 시험 점수보다 프로젝트의 가치를 강조하셨습니다. 이로 인해 저는 대학에서 컴퓨터 과학을 전공으로 삼아 소프트웨어 엔지니어가 되는 꿈을 가지게 되었고, 나아가 제 커리어의 최종 목표로는 창업자가 되고자 했습니다.

과제의 부담과 높은 학습 곡선 때문에 AngelBotics에 아주 깊이 관여하지는 못했지만, 그 경험은 제 평생의 로보틱스 열정을 불러일으켰습니다. 그래서 대학에 진학했을 때, 저는 반드시 대학 로보틱스 동아리에 들어가고 언젠가는 로보틱스를 통해 현실 세계의 문제를 해결하는 회사를 만들겠다고 결심했습니다.

광산대학

이스트 고등학교를 졸업한 후, 저는 콜로라도 광산대학에서 컴퓨터 과학 학사 과정을 시작했습니다(2018-2022). 첫 학기 동안 저는 Mines 로보틱스 동아리를 살펴보다가 AgBot이라는 아주 새로운 로보틱스 그룹을 발견했습니다.

AgBot은 2019 agBots Weed and Feed Competition에 참가할 로봇을 만들기 위해 결성된 새로운 로보틱스 동아리였습니다. 이 대회에는 두 가지 주요 과제가 있었습니다:

  1. 해충 및 잡초 식별과 제거
  2. 로보틱스를 통한 새로운 수확 방법 만들기

우리 팀은 첫 번째 과제에 집중하기로 했습니다. Mines가 agBot 대회에 처음 참가하는 것이었고, Mines 로보틱스 동아리가 농업과 관련된 어떤 일에도 처음으로 참여하는 것이기도 했습니다. 그 점 때문에 모든 것이 새롭게 느껴졌습니다.

저는 그 프로젝트에 즉시 끌렸습니다. 제 가족은 터키에서 여러 세대에 걸쳐 농부였고, 아버지 세대까지 그랬습니다. 그래서 AgBot은 제 로보틱스와 프로그래밍에 대한 열정과 잘 맞아떨어지면서도 마치 제 고향과도 같은 느낌을 주었습니다. 제 조부모님 같은 농부들에게 도움이 될 수도 있는 로봇을 만든다는 아이디어는 정말 신나는 일이었습니다.

개발

AgBot 팀의 일원이 된 것은 제 대학 시절 가장 기억에 남는 경험 중 하나였습니다. 동시에 그때까지 제가 가장 힘들게 노력했던 일 중 하나이기도 했습니다. 이 프로젝트는 제가 처음으로 파이썬, 우분투, 그리고 ROS를 깊이 있게 다뤄본 경험이었습니다. FRC에서는 모든 것이 자바 기반이었기 때문에, 이 모든 것은 저에게 완전히 새로운 영역이었습니다. 과거에 파이썬과 우분투를 사용한 적은 있었지만, ROS는 한 번도 건드려 본 적이 없었습니다. ROS가 어떻게 작동하는지를 배우는 것은 힘겨운 싸움이었습니다. 그때 저는 파이썬 환경이 무엇인지조차 몰랐습니다.

저는 대부분의 시간을 라이다에서 제가 작성한 ROS 노드로 유용한 데이터를 보내게 만드는 데 썼습니다. 제 임무는 라이다 데이터를 사용해 로봇이 작물 줄의 끝에 도달했는지 감지할 수 있는 end_detector라는 ROS 노드를 구현하는 것이었습니다. 지금 들으면 단순해 보이지만, 그때는 엄청난 일처럼 느껴졌습니다.

라이다가 제 코드와 통신하도록 만드는 데만 약 2주간의 디버깅이 걸렸습니다. 전체 코드는 C++ 또는 파이썬으로 작성되었고, 주로 파이썬이었습니다. 그래서 이 작업에 사용된 제 코드는 그냥 파이썬이었습니다. 그것이 작동하자 저는 캠퍼스에서 찾은 임의의 식물 구역들을 사용해 로직을 테스트하기 시작했습니다. 저는 라이다를 올려놓은 스탠드를 그 식물들 앞을 지나가게 하고, 코드가 우리가 끝지점에 도달했는지를 알아낼 수 있는지 확인했습니다. 많은 시간과 디버깅 끝에, 저는 결국 적어도 제 테스트 환경에서는 모든 것이 작동하게 만들었습니다. 하지만 모든 것을 합쳐서 테스트했을 때는 또 다른 이야기였습니다.

제 시간의 대부분은 하드웨어와 소프트웨어가 서로 통신하도록 만드는 데 쓰였습니다. 줄 끝을 감지하는 실제 로직은 그 다음이었습니다. 하지만 그것은 훌륭한 학습 경험이었습니다. 저는 ROS를 거의 이해하지 못하는 수준에서 시작해, Jetson 보드에서 실시간 라이다 데이터를 다루며 노드를 작성하고 디버깅하는 수준까지 발전했습니다. 또한 이 시기에 저는 프로그래밍 언어로 자바를 주로 기본값처럼 사용하던 것에서 파이썬을 기본값으로 삼는 쪽으로 바뀌었습니다. 그리고 2025년 현재까지도 저는 제 프로젝트나 업무 관련 코드베이스에서 자바를 실제로 사용한 적이 거의 없습니다.

팀과 기술 스택

우리는 Nvidia Jetson TX2에서 Ubuntu 16.04, ROS Kinetic, Python 2.7을 사용했고, 이 시스템은 Hokuyo URG 04LX UG01 라이다와 연동되었습니다. 초음파 거리 센서 같은 입력을 위해 Arduino가 있었습니다. 우리의 코드는 인식, 내비게이션, 제어, 그리고 분사를 처리했습니다. 저장소는 여기에서 볼 수 있습니다: GitHub 저장소. 제가 작성한 특정 코드는 end_detector.py에서 찾을 수 있습니다. 다음은 로봇을 구성하던 주요 부품들의 목록입니다:

  • Ubuntu 16.04 Xenial
  • ROS Kinetic Kame
  • Python 2.7
  • Nvidia Jetson TX2
  • Hokuyo URG-04LX-UG01 라이다
  • Arduino Uno & Mega
  • DC 모터, 엔코더, 모터 컨트롤러, 배터리 등

우리 팀은 아주 크지는 않았지만, 몇몇 이름은 특히 기억에 남습니다:

Tyler는 동아리의 리더이자 창립자였습니다. 저는 그때도 그를 많이 존경했지만 지금도 여전히 존경합니다. Zachary는 동아리의 소프트웨어 개발 책임자였고, 소프트웨어 개발과 ROS에 대해 저에게 많은 것을 가르쳐 주었습니다. 그 점에 대해 지금도 감사하게 생각합니다.

다른 멤버들도 있었습니다. 예를 들면 Kevin Barnard와 Amit Rotem이 있었습니다. 하지만 안타깝게도 동아리가 끝난 지 벌써 5년이 넘었기 때문에, 저는 초창기 멤버 전원의 이름과 연락처를 모두 기억하지는 못합니다.

로봇 개발의 대부분은 주말과 수업이 모두 끝난 뒤 늦은 밤에 이루어졌습니다. 공학 학위 과정과 AgBot을 병행하는 일은 매우 힘들었지만, 우리는 끝까지 버텼습니다.

여행과 혼돈

이 전체 경험에서 제가 절대 잊지 못할 한 가지는 바로 그 여정 자체였습니다. 대회는 퍼듀 대학교 캠퍼스 근처 인디애나주 웨스트 라파예트에서 열렸습니다. 그리고 대회 전체는 Mines의 기말고사가 끝난 직후에 진행되었기 때문에, 우리는 그 지옥 같았던 시험 주간에서 회복할 시간조차 없었습니다.

우리는 Tyler의 트럭을 이용해 콜로라도 골든에서 인디애나까지 운전했으며, 로봇과 모든 공구도 함께 실어 나랴 했습니다. 그런데 재미있는 점은, 우리가 실제로 출발한 시점이 문자 그대로 대회 주간을 딱 하루 앞둔 날이었다는 것입니다. 우리는 가지고 있던 모든 것, 즉 로봇, 공구, 배터리, 컴퓨터, 전부를 챙겨서 콜로라도 골든에서 인디애나주 웨스트 라파예트까지 운전했습니다. 지도상으로는 18시간 거리였습니다. 하지만 주유와 화장실 휴식을 포함하면 거의 20시간에서 22시간이 걸렸습니다.

Tyler는 Coffee Monster 음료만 마시며 내내 운전했습니다. 다른 팀원 한 명이, 이름은 기억나지 않지만 사진에는 나오는 그녀가, 때때로 운전을 대신해 주었습니다. 가는 도중 비가 억수같이 쏟아지기 시작했습니다. 우리는 아무렇게나 닫혀 있는 주유소에 차를 세우고 로봇을 보호할 방수포를 구해야 했습니다. 엉성했고, 혼돈 그 자체였고, 대학 로보틱스였죠. 그런데도 어떻게든 우리는 해냈습니다.

도착했을 때, 우리는 필드에 캐노피를 설치하고 모든 공구를 세팅했습니다. 저는 코드를 마무리하고 실행되게 만드는 데 집중했습니다. 대회 대부분의 시간 동안 우리는 주로 로봇을 디버깅하고 잘 작동하게 만드는 작업을 했고, 동시에 다른 팀들의 멋진 로봇 제작물들도 구경했습니다.

그래서 우리는 이겼을까?

아니요

돌이켜보면, 우리는 모두 경험 수준을 훨씬 뛰어넘는 무언가를 만들려고 애쓰던 그저 한 무리의 학생들이었습니다. 다른 팀들은 완전히 다른 수준에 있었습니다. 어떤 팀은 스타트업 출신이었고, 어떤 팀은 연구실 출신이었고, 어떤 팀은 아예 완전한 학문적 지원을 받고 있었습니다. 우리는 파이썬이 라이다 데이터를 유용한 무언가로 바꿔 주길 바라며 밤새워 작업하던 소수의 학부생들이었습니다.

우리 로봇은 결함이 많았습니다. 엉성했습니다. 솔직히 말해, 대회에 도착했을 때는 거의 제대로 작동하지도 않았습니다. 마감 시간 안에 끝내지 못할지도 모른다고 깨닫자 팀원들 중 많은 이들이 중도에 빠지기 시작했습니다. 아예 나타나지 않는 사람도 있었습니다. 기말고사는 끝났고, 로봇은 준비되지 않았으며, 사기는 꽤 낮았습니다.

하지만 몇몇은 끝까지 버텼습니다.

저는 포기하지 않았습니다… Tyler도 포기하지 않았습니다… 그리고 사진 속 그 사람들도 역시 포기하지 않았습니다!

우리가 우승하지도 못했고, 심지어 완전히 기능하는 로봇조차 갖추지 못했지만, 저는 그 경험을 무엇과도 바꾸고 싶지 않습니다. 저는 ROS, 하드웨어 디버깅, 압박 속에서 시스템을 구축하는 법을 배웠고, 충성심에 대해서도 배웠습니다. 끝까지 해내는 것의 중요성을 깨달았습니다.

회고, 2025년 현재

2019 시즌 이후 AgBot은 문을 닫았습니다. 이는 주로 약 1년 뒤에 COVID가 시작되면서 Mines의 모든 동아리가 1~2년 동안 문을 닫게 되었고, 세상이 다시 “정상"으로 돌아가기 시작했을 무렵 저는 졸업했기 때문입니다.

이제 2025년이 되었고, AgBot을 돌아보면 저는 그것을 제 모든 것의 시작으로 봅니다. AgBot은 저에게 로보틱스와의 첫 실제 경험을 안겨주었고, 기술 팀과 협업하는 법을 가르쳐 주었습니다. 그것은 저를 놀라운 기회들로 이어지는 길 위에 올려놓았습니다.

그 이후로 저는 eBay에서 백엔드 엔지니어로 일하며 데이터 센터 전반에서 수백만 개의 메트릭을 수집하는 서비스를 배포했습니다. AI 기반 자동 사이버 보안 침투 테스트 구축에 집중한 저의 첫 스타트업을 창업했습니다. 수만 명의 방문자를 기록한 Notify Cyber를 출시했습니다. 저는 Docker, Kubernetes, Postgres, 그리고 고급 AI 인프라를 위한 소프트웨어를 작성해 왔습니다.

하지만 AgBot은 여전히 제 인생 최고의 경험 중 하나로 돋보입니다. 혼란스럽고, 스트레스가 심했고, 때로는 불가능하게 느껴지기도 했지만, 그 어떤 수업이나 튜토리얼보다도 저에게 더 많은 것을 가르쳐 주었습니다. 저는 완벽한 계획이 없거나, 충분한 자금이 없거나, 최고의 하드웨어가 없더라도, 여전히 무언가를 만들고, 엄청나게 많은 것을 배우고, 그 과정에서 놀라운 사람들을 만날 수 있다는 것을 배웠습니다.

2019년 AgBot 팀의 모든 분들께 감사드립니다. 그 2019년의 도로 여행과, 문을 닫은 주유소에서 집어 들었던 방수포, 그리고 잠 못 이루던 밤들에도 감사드립니다. 여러분은 얼마나 불가능해 보이든 큰 프로젝트를 자신 있게 추구할 수 있는 배짱을 저에게 주었습니다.

자료와 링크

사진 갤러리

우리, Mine의 AgBot 팀

GetStoredImage-1.jpeg GetStoredImage.jpeg IMG_9005.jpeg IMG_9006.jpeg
IMG_9663.jpeg IMG_9684.jpeg IMG_9685.jpeg IMG_9686.jpeg
IMG_9687.jpeg IMG_9688.jpeg IMG_9691.jpeg

우리의 AgBot 로봇

IMG_8854.jpeg IMG_8855.jpeg IMG_8856.jpeg IMG_8867.jpeg
IMG_8976.jpeg IMG_8977.jpeg IMG_9007.jpeg IMG_9008.jpeg
IMG_9037.jpeg IMG_9038.jpeg IMG_9039.jpeg IMG_9040.jpeg
IMG_9695.jpeg r1.jpeg r3.jpeg r5.jpeg
r6.jpeg r7.jpeg r9.jpeg

비디오/GIF

대회의 필드

IMG_8848.jpeg IMG_8849.jpeg IMG_8850.jpeg IMG_8851.jpeg
IMG_9042.jpeg IMG_9666.jpeg IMG_9668.jpg land.jpeg

대회에서의 다른 팀들

IMG_8827.jpeg IMG_8828.jpeg IMG_8857.jpeg IMG_8858.jpeg
IMG_8880.jpeg IMG_9651.jpeg IMG_9669.jpeg IMG_9671.jpeg
IMG_9672.jpeg IMG_9673.jpeg IMG_9674.jpeg IMG_9675.jpeg
IMG_9677.jpeg IMG_9678.jpeg IMG_9679.jpeg IMG_9696.jpeg
IMG_9697.jpeg gpage_2019.jpeg robot.jpeg

FRC 1339 (2014-2017)

IMG_9629.jpeg IMG_9630.jpeg

기타 무작위 이미지

IMG_8825.jpeg IMG_8826.jpeg IMG_8852.jpeg IMG_8853.jpeg
IMG_8980.jpeg IMG_8981.jpeg IMG_9002.jpeg IMG_9003.jpeg
IMG_9043.jpeg mines_logo.png