2019 AgBot 챌린지

이스트 하이 스쿨

덴버, 콜로라도에 있는 East High School에 다니던 기간(2014-2018) 동안, 저는 방과후 활동에 깊이 관여했으며 그중 가장 영향력이 컸던 것은 로봇 동아리인 AngelBotics였습니다. 2학년이 될 때까지 축구에 주로 집중해서 가입을 늦췄습니다. 동아리는 주로 FIRST Robotics Competition (FRC)에 참가했고, 덕분에 저는 기계·전기공학뿐만 아니라 프로그래밍도 탐구할 수 있었습니다. AngelBotics를 통해 CAD 도구, 3D 프린터, 기타 공학 장비를 사용하는 법을 배워 대학생들에게나 접할 수 있는 STEM 개념들을 접할 수 있었습니다. 처음에는 양자 물리학자가 되고자 했지만, AP 물리와 로봇 경험을 통해 제가 물리에는 그리 소질이 없다는 것을 깨달았고 결국 기계공학 진로에서 벗어나게 되었습니다.

대신 저는 프로그래밍에서 제 적성을 찾았습니다. 처음 Raspberry Pi로 Python 코드를 작성하면서 시작했고, AP 컴퓨터 과학에서의 Java 프로젝트를 통해 확고해졌습니다. 시험에서 고전했음에도 불구하고 저의 선생님인 Nagel 선생님은 시험 점수보다 프로젝트의 가치를 강조하며 소프트웨어 개발을 추구하라고 격려해 주셨습니다. 이로 인해 저는 대학에서 컴퓨터 과학을 전공으로 삼아 소프트웨어 엔지니어가 되고 언젠가 창업자가 되겠다는 꿈을 갖게 되었습니다.

많은 수업과 가파른 학습 곡선 때문에 AngelBotics에 깊게 참여하지는 못했지만, 그 경험은 평생 지속될 로봇 공학에 대한 열정을 불러일으켰습니다. 그래서 대학에 입학했을 때 저는 대학 로봇 동아리에 가입하고 언젠가 로봇으로 현실 문제를 해결하는 회사를 세우겠다고 결심했습니다.

마인즈 공과대학

East High School을 졸업한 후, 저는 Colorado School of Mines에서 컴퓨터 과학 학사 과정을 시작했습니다(2018-2022). 첫 학기 때 저는 Mines robotics clubs을 둘러보다가 AgBot이라는 새 로봇 동아리를 발견했습니다.

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

  1. 해충 및 잡초 식별과 제거
  2. 로봇을 통한 새로운 수확 방법 창출

우리 팀은 첫 번째 과제에 집중하기로 했습니다. 마인즈가 agBot 대회에 참가한 것은 이번이 처음이었고, 마인즈의 로봇 동아리가 농업 관련 작업을 한 것도 처음이었습니다. 그래서 모든 것이 새롭게 느껴졌습니다.

저는 이 프로젝트에 즉시 끌렸습니다. 제 가족은 제 아버지 세대까지 터키에서 대대로 농사를 지어왔습니다. 그래서 AgBot은 로봇 공학과 프로그래밍에 대한 제 열정을 가족사와 연결해 주는 느낌이었습니다. 조부모님 같은 농부들을 도울 수 있는 로봇을 만든다는 생각은 정말 흥미로웠습니다.

개발

AgBot 팀의 일원이 된 것은 제 대학 시절 가장 기억에 남는 경험 중 하나입니다. 그전까지 제가 해본 일 중 가장 힘들었던 일 중 하나이기도 했습니다. 이 프로젝트는 제가 본격적으로 Python, Ubuntu, 그리고 ROS를 깊게 파고든 첫 경험이었습니다. FRC에서는 모든 것이 Java였기 때문에 이 모든 것이 저에겐 새로운 영역이었습니다. 과거에 Python과 Ubuntu를 사용해 본 적은 있었지만, ROS는 한 번도 손대본 적이 없었습니다. ROS가 어떻게 작동하는지 배우는 것은 매우 힘든 일이었습니다. 그때는 파이썬 환경이 무엇인지조차 몰랐습니다.

저는 대부분의 시간을 Lidar를 제가 작성하던 ROS 노드로부터 사용할 수 있는 데이터로 전송되게 만드는 데 썼습니다. 제 임무는 Lidar 데이터를 사용해 로봇이 작물 줄의 끝에 도달했을 때를 감지할 수 있는 ROS Nodeend_detector를 구현하는 것이었습니다. 지금 생각하면 간단하게 들리지만, 당시에는 엄청난 일처럼 느껴졌습니다.

Lidar가 제 코드와 통신하게 만드는 데 디버깅으로 약 2주 정도 걸렸습니다. 전체 코드는 C++ 또는 Python으로 작성되었고 주로 Python이었습니다. 그래서 이 작업에서 제 코드는 전적으로 Python이었습니다. 그게 작동하자 저는 캠퍼스에서 찾은 임의의 식물 무더기를 사용해 로직을 테스트하기 시작했습니다. 라이다를 고정한 스탠드를 그 식물들 옆으로 굴려서 코드가 우리가 끝에 도달했는지 판단할 수 있는지 확인했습니다. 수많은 시간과 디버깅 끝에 적어도 제 테스트 환경에서는 모든 것을 작동시키는 데 성공했습니다. 하지만 모든 것을 결합하려 했을 때는 상황이 달랐습니다.

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

팀 및 기술 스택

우리는 Ubuntu 16.04에서 ROS Kinetic과 Python 2.7을 실행했으며, Nvidia Jetson TX2에 연결된 Hokuyo URG 04LX UG01 Lidar를 사용했습니다. 초음파 거리 센서 같은 센서 입력을 위해 Arduino(들)를 사용했습니다. 우리의 코드는 인식, 내비게이션, 제어 및 분사(spraying)를 처리했습니다. 저장소는 여기에서 볼 수 있습니다: GitHub 저장소. 제가 작성한 특정 코드는 end_detector.py에서 확인할 수 있습니다. 로봇을 구성한 주요 구성 요소 목록은 다음과 같습니다:

  • Ubuntu 16.04 Xenial
  • ROS Kinetic Kame
  • Python 2.7
  • Nvidia Jetson TX2
  • Hokuyo URG-04LX-UG01 Lidar
  • Arduino Uno & Mega
  • DC Motors, Encoders, Motor Controllers, Battery, 등

우리는 큰 팀은 아니었지만 몇몇 이름은 눈에 띕니다:

Tyler는 클럽의 리더이자 창립자였습니다. 저는 그를 그때도 많이 존경했고 지금도 존경합니다. Zachary는 클럽 소프트웨어 개발의 책임자였고 저에게 소프트웨어 개발과 ROS에 대해 많은 것을 가르쳐 주었으며 저는 그에게 지금도 감사하고 있습니다.

다른 멤버들로는 Kevin Barnard와 Amit Rotem 같은 사람들이 있었습니다. 하지만 안타깝게도 클럽이 끝난 지 5년이 넘어서 모든 원래 멤버들의 이름과 연락처를 기억하지는 못합니다.

로봇 개발의 대부분은 주말과 수업이 끝난 늦은 밤에 이루어졌습니다. 공학 학위를 밟으면서 AgBot을 병행하는 일은 매우 고된 일이었지만 우리는 어떻게든 해냈습니다.

여행과 혼란

이 경험 중 결코 잊지 못할 한 부분은 바로 그 여행 자체였습니다. 대회는 퍼듀 대학교(Purdue University) 캠퍼스 근처인 웨스트 라파예트, 인디애나에서 열렸습니다. 대회는 마인즈의 기말고사가 끝난 직후에 열려 우리는 그 지옥 같은 한 주에서 회복할 시간도 없었습니다.

우리는 Tyler의 트럭을 이용해 골든, 콜로라도에서 인디애나까지 운전해 로봇과 모든 도구를 실었습니다. 웃긴 건 우리가 대회 주 바로 하루 전에 출발했다는 점입니다. 우리는 로봇, 도구, 배터리, 컴퓨터, 모든 것을 싸서 골든 콜로라도에서 웨스트 라파예트 인디애나까지 운전했습니다. 지도상으로는 18시간 거리였습니다. 하지만 주유와 화장실 휴식 때문에 실제로는 20~22시간 가까이 걸렸습니다.

Tyler가 내내 운전했고, Coffee Monster 음료로 버티며 갔습니다. 다른 팀원이 때때로 그를 대신해 운전했는데, 사진에 있는 그녀의 이름은 기억나지 않습니다. 가는 도중에 비가 억수같이 쏟아지기 시작했습니다. 우리는 아무 가게가 문을 닫은 주유소에 차를 세우고 로봇을 보호하기 위해 방수포를 급히 샀습니다. 모든 것이 엉성했고, 혼란스러웠고, 전형적인 대학 로봇 활동이었습니다. 어떻게든 우리는 도착했습니다.

도착했을 때 우리는 경기장에 캐노피를 설치하고 모든 도구를 정리했습니다. 저는 코드를 마무리하고 실행되게 하는 데 집중했습니다. 대회 대부분 동안 우리는 주로 로봇을 디버깅하고 잘 작동하게 만드는 일에 몰두했고, 다른 팀들의 멋진 로봇들도 구경했습니다.

그래서 우리가 이겼나요?

아니요

돌이켜보면, 우리는 단지 우리 경험 수준을 훨씬 초과하는 무언가를 만들려고 애쓰던 아이들이었습니다. 다른 팀들은 완전히 다른 수준에 있었습니다. 어떤 팀은 스타트업 소속이었고, 어떤 팀은 연구실 소속이었으며, 어떤 팀은 학술적 지원을 완전히 받는 팀들이었습니다. 우리는 밤샘 작업을 하는 소규모 학부생 그룹이었고, 파이썬이 라이다 데이터를 유용한 것으로 바꿔주길 바랐습니다.

우리 로봇은 결함이 있었습니다. 엉성했습니다. 솔직히 말해, 대회장에 도착했을 때 겨우 작동하는 수준이었습니다. 많은 팀원들이 우리가 제때 끝내지 못할지도 모른다는 사실을 깨닫고 탈퇴하기 시작했습니다. 어떤 사람들은 아예 나타나지도 않았습니다. 기말고사는 끝났고, 로봇은 준비되지 않았으며, 사기도 많이 떨어져 있었습니다.

하지만 우리 중 몇 명은 버텼습니다

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

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

회고, 2025년 기준

2019 시즌 이후 AgBot은 문을 닫았습니다. 이는 주로 거의 1년 후에 시작된 COVID로 인해 마인즈의 모든 동아리가 1~2년 동안 활동을 중단했고, 세상이 “정상"으로 돌아오기 시작했을 때 저는 이미 졸업했기 때문입니다.

이제 2025년이고, AgBot을 되돌아보면 제게 모든 것의 시작으로 느껴집니다. 그것은 저에게 로봇공학에 대한 첫 번째 실제 경험을 주었고 기술팀과 협업하는 법을 가르쳐주었습니다. 그것은 저를 놀라운 기회들로 이끈 길로 놓아주었습니다.

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

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

2019 AgBot 팀의 모든 분들께 감사합니다. 2019년 그 로드트립과, 폐쇄된 주유소에서 집어온 방수포, 그리고 잠 못 이루던 밤들, 감사합니다. 여러분은 제가 아무리 불가능해 보여도 자신감을 가지고 큰 프로젝트에 도전할 수 있는 투지를 주셨습니다.

자료 및 링크

사진 갤러리

마인스의 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_6724.gif NEHE1091.gif demo.gif random_demo.gif
rogo_hardware.gif

대회 경기장

IMG_8848.jpeg IMG_8849.jpeg IMG_8850.jpeg IMG_8851.jpeg
IMG_9042.jpeg IMG_9666.jpeg IMG_9668.png 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