2019 AgBot Challenge

Восточная средняя школа

Во время моего обучения в East High School в Денвере, штат Колорадо (2014–2018), я был очень активно вовлечён во внеклассную деятельность, и самым значимым для меня был робототехнический клуб AngelBotics. Я присоединился к нему только на втором курсе, поскольку сначала сосредоточился на футболе. Клуб в основном участвовал в FIRST Robotics Competition (FRC), что позволило мне познакомиться с механической и электротехнической инженерией, а также с программированием. Через AngelBotics я научился пользоваться CAD-инструментами, 3D-принтерами и другим инженерным оборудованием, получив доступ к STEM-концепциям, которые обычно доступны студентам колледжей. Сначала я мечтал стать квантовым физиком, но опыт на AP Physics и в робототехнике показал мне, что физика у меня получается не очень хорошо, и в итоге отвёл меня от пути к механической инженерии.

Вместо этого я нашёл своё призвание в программировании, которое началось с того, что я писал код на Python для своего первого Raspberry Pi, и укрепилось благодаря проектам на Java в AP Computer Science. Несмотря на трудности с экзаменами, мой учитель, мистер Nagel, побуждал меня заниматься разработкой программного обеспечения, подчёркивая ценность проектов важнее баллов за тесты. Это подтолкнуло меня сосредоточиться на информатике как на моей специальности в колледже с мечтой о том, чтобы стать инженером-программистом и в конечном итоге основателем компании.

Хотя я не был особенно вовлечён в AngelBotics из-за тяжёлой учебной нагрузки и крутого пути обучения, клуб всё же зажёг во мне пожизненную страсть к робототехнике. Поэтому, когда я поступил в колледж, я был полон решимости вступить в университетский робототехнический клуб и однажды создать компанию, которая решает реальные проблемы с помощью робототехники.

Школа рудников

После окончания East High School я начал обучение на бакалавриате по информатике в Colorado School of Mines (2018–2022). Уже в свой самый первый семестр я познакомился с робототехническими клубами Mines и обнаружил совершенно новую робототехническую группу под названием AgBot.

AgBot был новым робототехническим клубом, созданным с целью построить робота для участия в конкурсе 2019 agBots Weed and Feed Competition. В этом соревновании было две основные задачи:

  1. Идентификация и уничтожение вредителей и сорняков
  2. Создание новых методов сбора урожая с помощью робототехники

Наша команда решила сосредоточиться на первой задаче. Для Mines это было первое участие в конкурсе agBot, и это был первый случай, когда робототехнический клуб Mines работал над чем-то, связанным с сельским хозяйством. Из-за этого всё казалось особенно свежим.

Проект сразу же меня увлёк. Моя семья на протяжении поколений, вплоть до поколения моего отца, была фермерами в Турции. Поэтому AgBot ощущался как нечто близкое мне, одновременно соединяя мою страсть к робототехнике и программированию. Идея построить робота, который мог бы помогать фермерам вроде моих бабушки и дедушки, была по-настоящему захватывающей.

Разработка

Участие в команде AgBot — один из самых памятных моментов моего обучения в колледже. Это также было одним из самых тяжёлых дел, над которыми я работал до того момента. Этот проект был первым случаем, когда я по-настоящему углубился в Python, Ubuntu и ROS. В FRC всё было на Java, так что для меня это была совершенно новая территория. Раньше я уже использовал Python и Ubuntu, но никогда не работал с ROS. Понять, как работает ROS, было непростой задачей. В то время я даже не знал, что такое Python-окружение.

Большую часть времени я потратил на то, чтобы заставить Lidar передавать пригодные данные в узел ROS, который я писал. Моей задачей было реализовать узел ROS под названием end_detector, который мог бы определять, когда робот достиг конца ряда культур, используя данные Lidar. Сейчас это звучит просто, но тогда это казалось чем-то огромным.

У меня ушло около двух недель отладки, чтобы заставить Lidar «заговорить» с моим кодом. Весь код был написан либо на C++, либо на Python, в основном на Python. Поэтому для этой задачи мой код был просто на Python. Когда это заработало, я начал тестировать логику, используя случайные участки растений, которые находил на территории кампуса. Я катил стойку с установленным Lidar мимо них и смотрел, сможет ли код определить момент, когда мы достигали конца. После многих часов и отладки мне в конце концов удалось заставить всё работать — по крайней мере, в моей тестовой среде. Когда мы попытались объединить всё вместе, история оказалась уже другой.

В основном я тратил время на то, чтобы заставить аппаратную и программную части общаться друг с другом. Сама логика определения конца ряда шла уже потом. Но это был отличный опыт обучения. Я прошёл путь от едва понимания ROS до написания и отладки узлов на плате Jetson с живыми данными Lidar. Именно в это время я также перешёл от того, чтобы в основном по умолчанию использовать Java как основной язык программирования, к тому, чтобы по умолчанию использовать Python. И по состоянию на 2025 год я ещё так и не использовал Java по-настоящему ни для одного из моих проектов или рабочих кодовых баз.

Команда и стек технологий

Мы использовали Ubuntu 16.04 с ROS Kinetic и Python 2.7 на Nvidia Jetson TX2, который был подключён к Lidar Hokuyo URG 04LX UG01. У нас были Arduino для сенсорных входов, таких как ультразвуковые дальномеры. Наш код отвечал за восприятие, навигацию, управление и опрыскивание. Репозиторий можно увидеть здесь: GitHub Repo. Конкретный код, который я написал, можно найти в 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, etc.

У нас не было огромной команды, но несколько имён особенно выделяются:

Tyler был лидером и основателем клуба. Я очень уважал его тогда и уважаю до сих пор. Zachary был руководителем разработки программного обеспечения клуба и помог мне многому научиться о разработке ПО и ROS, за что я благодарен ему до сих пор.

Были и другие участники, например Kevin Barnard и Amit Rotem. Но, к сожалению, я не помню имена и контакты всех первых участников, потому что с момента завершения работы клуба прошло уже более 5 лет.

Большая часть разработки робота происходила по выходным и допоздна ночью после того, как заканчивались занятия. Учиться на инженерной специальности и одновременно заниматься AgBot было очень тяжело, но мы всё же выдержали.

Поездка и хаос

Одна часть всего этого опыта, которую я никогда не забуду, — это сама поездка. Соревнование проходило в West Lafayette, Indiana, рядом с кампусом Purdue University’s. И всё соревнование началось сразу после завершения экзаменационной недели в Mines, так что у нас не было времени прийти в себя после той адской недели.

Мы ехали из Golden, Colorado в Indiana на грузовике Tyler, который также использовался для перевозки робота и всех наших инструментов. Забавный момент в том, что мы выехали буквально за день до недели соревнований. Мы собрали всё, что у нас было — робота, инструменты, аккумуляторы, компьютеры, всё — и поехали из Golden, Colorado в West Lafayette, Indiana. По плану это 18-часовая поездка. На деле с остановками на бензин и туалет она заняла ближе к 20 или 22 часам.

Tyler вёл всё время, живя на напитках Coffee Monster. Другой товарищ по команде, извините, я забыл её имя, но она есть на фотографиях, иногда подменяла его за рулём. По дороге начался сильный ливень. Нам пришлось остановиться у случайной закрытой заправки и взять брезент, чтобы защитить робота. Это было кустарно, это был хаос, это была студенческая робототехника. Но каким-то образом мы добрались.

Когда мы приехали, мы установили наш навес на поле и разложили все наши инструменты. Я сосредоточился на завершении кода и запуске его в работу. Большую часть соревнований мы в основном занимались отладкой робота и попытками заставить его работать, а также смотрели на крутые конструкции роботов других команд.

Так мы выиграли?

Нет

Оглядываясь назад, мы были просто кучкой ребят, пытавшихся построить нечто, что было намного выше нашего уровня опыта. У других команд уровень был совершенно другой. Некоторые были из стартапов. Некоторые — из исследовательских лабораторий. У некоторых была полноценная академическая поддержка. Мы же были небольшой группой студентов, работавших ночами напролёт, надеясь, что Python превратит данные Lidar во что-то полезное.

Наш робот был несовершенным. Он был кустарным. И, честно говоря, к моменту нашего приезда на соревнование он едва работал. Многие люди в команде начали сходить с дистанции, когда поняли, что мы можем не успеть вовремя закончить. Некоторые даже не приехали. Экзамены закончились, робот был не готов, и моральный дух был довольно низким.

Но несколько из нас всё же не сдались

Я не сдался… Tyler не сдался… И люди на фотографии тоже не сдались!

Хотя мы не выиграли и даже не имели полностью функционального робота, я бы ни на что не променял этот опыт. Я узнал о ROS, отладке аппаратного обеспечения, создании систем под давлением, и я узнал о верности. Я понял, насколько важно доводить начатое до конца.

Размышления по состоянию на 2025 год

После сезона 2019 года AgBot закрылся. В основном это было связано с началом COVID почти годом позже, из-за чего все клубы в Mines закрылись на 1–2 года, и к тому времени, когда мир начал возвращаться к «нормальности», я уже выпустился.

Сейчас 2025 год, и, оглядываясь назад на AgBot, я вижу в нём начало всего для себя. Он дал мне мой первый настоящий опыт в робототехнике и научил меня сотрудничать с технической командой. Он поставил меня на путь, который привёл меня к удивительным возможностям.

С тех пор я работал backend-инженером в eBay, разворачивая сервисы, которые обрабатывают миллионы метрик в разных дата-центрах. Основал свой первый стартап, который был сосредоточен на создании автоматизированного ИИ для тестирования на проникновение в сфере кибербезопасности. Запустил Notify Cyber, который достиг десятков тысяч посетителей. Я писал программное обеспечение для Docker, Kubernetes, Postgres и продвинутой ИИ-инфраструктуры.

Но AgBot по-прежнему выделяется как один из лучших опытов в моей жизни. Это было хаотично, стрессово и иногда казалось невозможным, но это научило меня большему, чем когда-либо смог бы любой курс или туториал. Я понял, что даже если у вас нет идеального плана, достаточного финансирования или лучшего оборудования, вы всё равно можете что-то создать, многому научиться и встретить по пути невероятных людей.

Всем из команды AgBot 2019 года — спасибо. Той поездке 2019 года, брезенту, который мы схватили на закрытой заправке, и бессонным ночам — спасибо. Вы дали мне стойкость, чтобы с уверенностью браться за большие проекты, какими бы невозможными они ни казались.

Ресурсы и ссылки

Фотогалерея

Команда AgBot в Mines, мы

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