2019 AgBot Challenge

Liceum East High School

Podczas mojego pobytu w East High School w Denver, w stanie Kolorado (2014–2018), byłem mocno zaangażowany w zajęcia pozalekcyjne, a najbardziej wpływowym z nich był klub robotyki, AngelBotics. Dopiero w drugiej klasie do niego dołączyłem, ponieważ na początku skupiałem się na piłce nożnej. Klub głównie brał udział w FIRST Robotics Competition (FRC), co pozwoliło mi zgłębiać inżynierię mechaniczną i elektryczną, a także programowanie. Dzięki AngelBotics nauczyłem się korzystać z narzędzi CAD, drukarek 3D i innego sprzętu inżynieryjnego, zdobywając kontakt z koncepcjami STEM zazwyczaj zarezerwowanymi dla studentów. Początkowo aspirowałem do bycia fizykiem kwantowym, lecz moje doświadczenia z AP Physics i robotyką pokazały mi, że nie jestem zbyt dobry z fizyki, i w rezultacie odciągnęły mnie od ścieżki inżynierii mechanicznej.

Zamiast tego odnalazłem swoją niszę w programowaniu, co zaczęło się od pisania przeze mnie kodu w Pythonie na mojego pierwszego Raspberry Pi i zostało ugruntowane przez projekty w Javie na AP Computer Science. Pomimo trudności z egzaminami, mój nauczyciel, pan Nagel, zachęcał mnie do podążania za tworzeniem oprogramowania, podkreślając wartość projektów ponad wyniki testów. To skłoniło mnie do skupienia się na informatyce jako kierunku studiów na uczelni, z marzeniem o zostaniu inżynierem oprogramowania, a ostatecznie założycielem, jako mojej ścieżki kariery.

Chociaż nie byłem zbyt mocno zaangażowany w AngelBotics z powodu wymagających zajęć i stromej krzywej uczenia się, klub i tak rozpalił we mnie życiową pasję do robotyki. Kiedy więc zacząłem studia, byłem zdeterminowany, aby dołączyć do uczelnianego klubu robotyki i pewnego dnia zbudować firmę, która rozwiązuje rzeczywiste problemy za pomocą robotyki.

School of Mines

Po ukończeniu East High School rozpocząłem studia licencjackie z informatyki na Colorado School of Mines (2018–2022). W trakcie mojego pierwszego semestru sprawdziłem kluby robotyki Mines i odkryłem zupełnie nową grupę robotyczną o nazwie AgBot.

AgBot był nowym klubem robotyki utworzonym z celem zbudowania robota do rywalizacji w 2019 agBots Weed and Feed Competition. Ten konkurs miał dwa główne wyzwania:

  1. Identyfikacja i eliminacja szkodników oraz chwastów
  2. Tworzenie nowych metod zbiorów poprzez robotykę

Nasz zespół zdecydował się skupić na pierwszym wyzwaniu. Był to pierwszy udział Mines w konkursie agBot i pierwszy raz, kiedy klub robotyki Mines pracował nad czymś związanym z rolnictwem. To sprawiło, że całe przedsięwzięcie było świeże.

Od razu przyciągnął mnie ten projekt. Moja rodzina przez pokolenia była rolnikami w Turcji, aż do pokolenia mojego taty. Dlatego AgBot wydawał się bliski mojemu sercu, jednocześnie łącząc moją pasję do robotyki i programowania. Pomysł zbudowania robota, który mógłby pomóc rolnikom takim jak moi dziadkowie, był naprawdę ekscytujący.

Rozwój

Bycie częścią zespołu AgBot to jedno z moich najbardziej niezapomnianych doświadczeń ze studiów. Było to także jedno z najtrudniejszych rzeczy, nad którymi pracowałem do tamtego momentu. Ten projekt był pierwszym razem, kiedy naprawdę zagłębiłem się w Pythona, Ubuntu i ROS. W FRC wszystko było w Javie, więc to wszystko było dla mnie nowym terenem. W przeszłości używałem Pythona i Ubuntu, ale nigdy wcześniej nie miałem do czynienia z ROS. Nauka działania ROS była walką pod górę. Nawet nie wiedziałem wtedy, czym jest środowisko Pythona.

Większość czasu spędziłem, próbując sprawić, by Lidar wysyłał użyteczne dane do węzła ROS, który pisałem. Moim zadaniem było zaimplementowanie węzła ROS o nazwie end_detector, który mógł wykrywać, kiedy robot dotarł do końca rzędu upraw, używając danych z Lidara. Teraz brzmi to prosto, ale wtedy wydawało się ogromne.

Zajęło mi około dwóch tygodni debugowania, aby Lidar zaczął komunikować się z moim kodem. Cały kod był napisany albo w C++, albo w Pythonie, głównie w Pythonie. Tak więc mój kod do tego zadania był po prostu w Pythonie. Gdy to zadziałało, zacząłem testować logikę, używając losowych kęp roślin, które znajdowałem na kampusie. Przejeżdżałem stojakiem trzymającym Lidar obok nich i sprawdzałem, czy kod potrafi stwierdzić, kiedy dotarliśmy do końca. Po wielu godzinach i debugowaniu ostatecznie udało mi się sprawić, że wszystko działało przynajmniej w moim środowisku testowym. Gdy próbowaliśmy połączyć wszystko razem, sytuacja wyglądała już inaczej.

Najwięcej czasu spędziłem na sprawianiu, by sprzęt i oprogramowanie ze sobą współpracowały. Sama logika wykrywania końców rzędów była drugorzędna. Ale było to świetne doświadczenie edukacyjne. Przeszedłem drogę od ledwo rozumiejącego ROS do pisania i debugowania węzłów na płycie Jetson z danymi z Lidara na żywo. W tym okresie zacząłem też przechodzić od głównie domyślnego używania Javy jako języka programowania do domyślnego używania Pythona. I według stanu na 2025 rok, jeszcze nie użyłem naprawdę Javy w żadnym z moich projektów ani w kodzie związanym z pracą.

Zespół i stos technologiczny

Używaliśmy Ubuntu 16.04 z ROS Kinetic i Pythonem 2.7 na Nvidia Jetson TX2, który współpracował z Hokuyo URG 04LX UG01 Lidar. Mieliśmy Arduino do wejść z czujników, takich jak ultradźwiękowe czujniki odległości. Nasz kod obsługiwał percepcję, nawigację, sterowanie i opryskiwanie. Repozytorium można zobaczyć tutaj: GitHub Repo. Konkretne napisałem kod można znaleźć w end_detector.py. Oto lista większości komponentów, z których składał się robot:

  • Ubuntu 16.04 Xenial
  • ROS Kinetic Kame
  • Python 2.7
  • Nvidia Jetson TX2
  • Hokuyo URG-04LX-UG01 Lidar
  • Arduino Uno & Mega
  • Silniki prądu stałego, enkodery, kontrolery silników, akumulator itp.

Nie mieliśmy ogromnego zespołu, ale kilka nazwisk się wyróżnia:

Tyler był liderem i założycielem klubu. Szanuję go bardzo wtedy i nadal robię to dziś. Zachary był liderem rozwoju oprogramowania dla klubu i pomógł mi nauczyć się bardzo wiele o tworzeniu oprogramowania i ROS, za co jestem wdzięczny do dziś.

Byli też inni członkowie, jak Kevin Barnard i Amit Rotem. Ale niestety nie pamiętam nazwisk i kontaktów wszystkich pierwotnych członków, bo minęło już ponad 5 lat od zakończenia działalności klubu.

Większość prac nad robotem odbywała się w weekendy i do późna w nocy, po tym jak większość naszych zajęć się kończyła. Praca nad dyplomem inżynierskim i AgBot była bardzo wyczerpująca, ale daliśmy radę.

Podróż i chaos

Jedną z części całego tego doświadczenia, której nigdy nie zapomnę, była sama podróż. Konkurs odbywał się w West Lafayette w stanie Indiana, niedaleko kampusu Purdue University. A cały konkurs odbywał się zaraz po zakończeniu tygodnia egzaminów końcowych na Mines, więc nie mieliśmy czasu, by dojść do siebie po tym piekielnym tygodniu.

Pojechaliśmy z Golden w Kolorado do Indiany ciężarówką Tylera, aby jednocześnie przewieźć robota i wszystkie nasze narzędzia. Śmieszne jest jednak to, że ruszyliśmy dosłownie dzień przed tygodniem konkursowym. Spakowaliśmy wszystko, co mieliśmy: robota, narzędzia, baterie, komputery, wszystko, i pojechaliśmy z Golden w Kolorado do West Lafayette w Indianie. Na papierze to 18-godzinna jazda. Z postojami na paliwo i do toalety zajęło nam bliżej 20 albo 22 godzin.

Tyler prowadził przez cały czas, żyjąc napojami Coffee Monster. Inny członek zespołu, przepraszam, zapomniałem jej imienia, ale jest na zdjęciach, czasami go zastępował. Po drodze zaczęło lać jak z cebra. Musieliśmy zjechać na losową zamkniętą stację benzynową i wziąć plandekę, żeby chronić robota. To było prowizoryczne, to był chaos, to była studencka robotyka. Jakimś cudem dotarliśmy.

Kiedy przyjechaliśmy, rozstawiliśmy nasz namiot na polu i rozłożyliśmy wszystkie narzędzia. Skupiłem się na dopracowaniu kodu i uruchomieniu go. Przez większość konkursu głównie debugowaliśmy naszego robota i staraliśmy się, by dobrze działał, a także oglądaliśmy fajne konstrukcje robotów innych drużyn.

Czy więc wygraliśmy?

Nie

Patrząc wstecz, byliśmy po prostu grupą dzieciaków próbujących zbudować coś, co znacznie wykraczało poza nasz poziom doświadczenia. Inne zespoły były na zupełnie innym poziomie. Niektóre pochodziły ze startupów. Niektóre z laboratoriów badawczych. Niektóre miały pełne wsparcie akademickie. My byliśmy małą grupą studentów pracujących po nocach, mających nadzieję, że Python zamieni dane z Lidara w coś użytecznego.

Nasz robot był wadliwy. Był prowizoryczny. I szczerze mówiąc, ledwo działał, gdy dotarliśmy na konkurs. Wielu ludzi w zespole zaczęło się wycofywać, gdy zorientowali się, że możemy nie zdążyć na czas. Niektórzy nawet się nie pojawili. Egzaminy się skończyły, robot nie był gotowy, a morale było dość niskie.

Ale kilku z nas wytrwało

Ja się nie poddałem… Tyler się nie poddał… I ludzie na zdjęciu też się nie poddali!

Chociaż nie wygraliśmy ani nawet nie mieliśmy w pełni funkcjonalnego robota, nie zamieniłbym tego doświadczenia na nic innego. Nauczyłem się o ROS, debugowaniu sprzętu, budowaniu systemów pod presją i nauczyłem się o lojalności. Zrozumiałem, jak ważne jest doprowadzanie spraw do końca.

Refleksja na rok 2025

Po sezonie 2019 AgBot zakończył działalność. Wynikało to głównie z tego, że COVID pojawił się niemal rok później, powodując, że wszystkie kluby na Mines zostały zamknięte na 1–2 lata, a do czasu, gdy świat zaczął wracać do „normalności”, ukończyłem studia.

To jest teraz rok 2025 i patrząc wstecz na AgBota, widzę go jako początek wszystkiego dla mnie. Dał mi moje pierwsze prawdziwe doświadczenie z robotyką i nauczył mnie, jak współpracować z zespołem technicznym. Postawił mnie na ścieżce, która doprowadziła mnie do niesamowitych możliwości.

Od tamtej pory pracowałem jako inżynier backendu w eBay, wdrażając usługi, które przetwarzają miliony metryk w różnych centrach danych. Założyłem mój pierwszy startup, który skupiał się na budowaniu automatycznego testowania penetracyjnego cyberbezpieczeństwa z wykorzystaniem AI. Uruchomiłem Notify Cyber, które osiągnęło dziesiątki tysięcy odwiedzających. Pisałem oprogramowanie dla Docker, Kubernetes, Postgres i zaawansowanej infrastruktury AI.

Ale AgBot nadal wyróżnia się jako jedno z najlepszych doświadczeń w moim życiu. Było chaotycznie, stresująco i czasami wydawało się niemożliwe, ale nauczyło mnie więcej niż kiedykolwiek mogłyby nauczyć jakiekolwiek zajęcia czy samouczek. Nauczyłem się, że nawet jeśli nie masz idealnego planu, wystarczającego finansowania ani najlepszego sprzętu, nadal możesz coś zbudować, nauczyć się mnóstwa rzeczy i po drodze poznać niesamowitych ludzi.

Wszystkim z zespołu AgBot z 2019 roku dziękuję. Za tę podróż samochodową w 2019 roku, za plandekę, którą zabraliśmy z zamkniętej stacji benzynowej, i za nieprzespane noce — dziękuję. Daliście mi hart ducha, by z pewnością siebie realizować duże projekty, bez względu na to, jak niemożliwe się wydają.

Zasoby i linki

Galeria zdjęć

Zespół AgBota z Mine, my

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

Nasz robot 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

Wideo/GIF-y

Pola konkurencji

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

Inne zespoły na zawodach

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

Inne losowe obrazy

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