2019 AgBot Challenge

Східна старша школа

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

Натомість я знайшов свою нішу в програмуванні, що почалося з того, що я писав Python-код для свого першого Raspberry Pi, і закріпилося через проєкти на Java в AP Computer Science. Попри труднощі з іспитами, мій учитель, містер Нагел, заохочував мене обрати розробку програмного забезпечення, наголошуючи на цінності проєктів, а не балів за тести. Це спонукало мене зосередитися на комп’ютерних науках як на спеціальності в коледжі з мрією стати інженером-програмістом і зрештою засновником компанії як моєї кар’єри.

Хоча я не був надто залучений в AngelBotics через моє напружене навчальне навантаження та круту криву навчання, це все ж запалило в мені пожиттєву пристрасть до робототехніки. Тож коли я вступив до коледжу, я був налаштований приєднатися до коледжного робототехнічного клубу й одного дня створити компанію, яка розв’язує реальні проблеми за допомогою робототехніки.

Школа шахт

Після закінчення Східної старшої школи я розпочав навчання на бакалавраті з комп’ютерних наук у Колорадській школі шахт (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, який взаємодіяв із Hokuyo URG 04LX UG01 Lidar. У нас були 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
  • Двигуни постійного струму, енкодери, контролери двигунів, акумулятор тощо.

У нас не була велика команда, але кілька імен виділяються особливо:

Тайлер був лідером і засновником клубу. Я дуже поважав його тоді й поважаю досі. Захарі був керівником програмної розробки клубу й допоміг мені багато чого навчитися про розробку програмного забезпечення та ROS, за що я вдячний і донині.

Були й інші учасники, наприклад Kevin Barnard і Amit Rotem. Але, на жаль, я не пам’ятаю імен та контактів усіх початкових учасників, оскільки з моменту завершення діяльності клубу минуло понад 5 років.

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

Поїздка і хаос

Одна частина всього цього досвіду, яку я ніколи не забуду, — це сама поїздка. Змагання проходили у Вест-Лафаєтті, Індіана, неподалік від кампусу Університету Пердью. І все змагання відбувалося одразу після того, як у Mines завершився тиждень іспитів, тож у нас не було часу оговтатися від цього пекельного тижня.

Ми їхали з Голдена, Колорадо, до Індіани на пікапі Тайлера, щоб також перевезти робота й усі наші інструменти. Але кумедно те, що ми вирушили буквально за один день до тижня змагань. Ми запакували все, що мали: робота, інструменти, батареї, комп’ютери, усе — і поїхали з Голдена, Колорадо, до Вест-Лафаєтта, Індіана. За документами це 18-годинна поїздка. Насправді вона зайняла ближче до 20 або 22 годин з урахуванням зупинок на пальне та вбиральню.

Тайлер керував увесь час, живлячись напоями Coffee Monster. Інша товаришка по команді, вибачте, я забув її ім’я, але вона є на фото, іноді його підміняла. Дорогою почалася сильна злива. Нам довелося з’їхати на узбіччя біля випадкової закритої заправки й узяти брезент, щоб захистити робота. Це було незграбно, це був хаос, це була студентська робототехніка. Якимось чином ми таки дісталися.

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

То чи виграли ми?

Ні

Озираючись назад, ми були просто купкою дітей, які намагалися створити щось, що було далеко за межами нашого рівня досвіду. Інші команди були на зовсім іншому рівні. Деякі були зі стартапів. Деякі — з дослідницьких лабораторій. Деякі мали повну академічну підтримку. Ми були невеликою групою студентів, які не спали ночами, сподіваючись, що Python перетворить дані Lidar на щось корисне.

Наш робот мав недоліки. Він був незграбний. І, чесно кажучи, він ледь працював на момент, коли ми дісталися до змагання. Багато людей у команді почали відмовлятися від участі, коли зрозуміли, що ми можемо не встигнути завершити все вчасно. Деякі навіть не з’явилися. Іспити закінчилися, робот був не готовий, а моральний стан був досить низьким.

Але кілька з нас залишилися до кінця

Я не здався… Тайлер не здався… І люди на фото теж не здалися!

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

Роздуми станом на 2025 рік

Після сезону 2019 року AgBot припинив свою діяльність. Це було здебільшого через те, що COVID почався майже через рік потому, що спричинило закриття всіх клубів у Mines на 1-2 роки, і до того часу, коли світ почав повертатися до «нормальності», я вже закінчив навчання.

Нині 2025 рік, і, озираючись назад на AgBot, я бачу в ньому початок усього для себе. Він дав мені перший справжній досвід у робототехніці та навчив мене, як співпрацювати з технічною командою. Він поставив мене на шлях, який привів мене до неймовірних можливостей.

Відтоді я працював бекенд-інженером в eBay, розгортаючи сервіси, що обробляють мільйони метрик у різних дата-центрах. Заснував свій перший стартап, який зосереджувався на створенні автоматизованого AI-пентестингу для кібербезпеки. Запустив Notify Cyber, який набрав десятки тисяч відвідувачів. Я писав програмне забезпечення для Docker, Kubernetes, Postgres і передової AI-інфраструктури.

Але 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