Défi AgBot 2019

Lycée East

Pendant mon temps au East High School à Denver, Colorado (2014-2018), j’étais très impliqué dans les activités extrascolaires, la plus marquante étant le club de robotique, AngelBotics. Ce n’est qu’en deuxième année que je l’ai rejoint, en raison d’un premier intérêt pour le football. Le club participait principalement à la FIRST Robotics Competition (FRC), ce qui m’a permis d’explorer le génie mécanique et électrique, ainsi que la programmation. Grâce à AngelBotics, j’ai appris à utiliser des outils de CAO, des imprimantes 3D et d’autres équipements d’ingénierie, découvrant ainsi des notions STEM généralement réservées aux étudiants universitaires. Aspirant initialement à devenir physicien quantique, mes expériences en physique AP et en robotique m’ont montré que je n’étais pas très bon en physique et m’ont par conséquent éloigné d’une voie en génie mécanique.

À la place, j’ai trouvé ma voie dans la programmation, qui a commencé avec l’écriture de code Python pour mon premier Raspberry Pi et s’est consolidée à travers des projets Java en AP Computer Science. Malgré mes difficultés aux examens, mon professeur, M. Nagel, m’a encouragé à poursuivre le développement logiciel, en soulignant la valeur des projets plutôt que celle des notes aux tests. Cela m’a amené à me concentrer sur l’informatique comme diplôme à l’université, avec le rêve de devenir ingénieur logiciel et, éventuellement, fondateur, pour ma carrière.

Bien que je n’aie pas été très impliqué dans AngelBotics en raison de mon programme scolaire exigeant et de la courbe d’apprentissage abrupte, cela a tout de même éveillé en moi une passion durable pour la robotique. Ainsi, lorsque j’ai commencé l’université, j’étais déterminé à rejoindre un club de robotique universitaire et à construire un jour une entreprise qui résout des problèmes du monde réel grâce à la robotique.

École des Mines

Après avoir obtenu mon diplôme du East High School, j’ai commencé mon bachelor en informatique à la Colorado School of Mines (2018-2022). Dès mon tout premier semestre, j’ai découvert les clubs de robotique de Mines et j’ai trouvé un tout nouveau groupe de robotique appelé AgBot.

AgBot était un nouveau club de robotique formé dans le but de construire un robot pour participer à la compétition 2019 agBots Weed and Feed. Cette compétition comportait deux grands défis :

  1. Identification et élimination des ravageurs et des mauvaises herbes
  2. Création de nouvelles méthodes de récolte grâce à la robotique

Notre équipe a choisi de se concentrer sur le premier défi. C’était la première participation de Mines à la compétition agBot, et c’était la première fois qu’un club de robotique de Mines travaillait sur quelque chose lié à l’agriculture. Cela donnait à l’ensemble une impression de nouveauté.

Le projet m’a immédiatement attiré. Ma famille était agricultrice en Turquie depuis des générations, jusqu’à la génération de mon père. AgBot me semblait donc très proche de moi, tout en s’inscrivant dans ma passion pour la robotique et la programmation. L’idée de construire un robot qui pourrait aider des agriculteurs comme mes grands-parents était vraiment passionnante.

Développement

Faire partie de l’équipe AgBot est l’une de mes expériences universitaires les plus mémorables. C’était aussi l’une des choses les plus difficiles sur lesquelles j’ai travaillé jusque-là. Ce projet a été la première fois où je me suis vraiment plongé dans Python, Ubuntu et ROS. En FRC, tout était en Java, donc c’était un territoire entièrement nouveau pour moi. J’avais déjà utilisé Python et Ubuntu dans le passé, mais je n’avais jamais touché à ROS. Apprendre le fonctionnement de ROS a été un véritable combat. Je ne savais même pas ce qu’était un environnement Python à l’époque.

J’ai passé la majeure partie de mon temps à essayer de faire en sorte qu’un Lidar envoie des données utilisables à un nœud ROS que j’écrivais. Ma tâche consistait à implémenter un nœud ROS appelé end_detector, capable de détecter quand le robot atteignait la fin d’un rang de culture à l’aide des données du Lidar. Cela semble simple aujourd’hui, mais à l’époque cela paraissait énorme.

Il m’a fallu environ deux semaines de débogage pour faire communiquer le Lidar avec mon code. Tout le code était écrit soit en C++, soit en Python, principalement en Python. Donc, mon code pour cette tâche était simplement en Python. Une fois cela en place, j’ai commencé à tester la logique à l’aide de parcelles aléatoires de plantes que je trouvais sur le campus. Je faisais passer le support portant le Lidar devant elles pour voir si le code pouvait déterminer quand nous atteignions la fin. Après de nombreuses heures et beaucoup de débogage, j’ai finalement réussi à faire fonctionner tout cela au moins dans mon environnement de test. L’histoire était différente quand nous avons essayé de tout combiner.

J’ai passé la plupart de mon temps à faire communiquer le matériel et le logiciel entre eux. La logique réelle pour détecter la fin des rangs est passée au second plan. Mais ce fut une excellente expérience d’apprentissage. Je suis passé de la quasi-incompréhension de ROS à l’écriture et au débogage de nœuds sur une carte Jetson avec des données Lidar en direct. C’est aussi à cette époque que je suis passé d’un usage surtout par défaut de Java comme langage de programmation à un usage par défaut de Python. Et, en 2025, je n’ai toujours pas vraiment utilisé Java pour l’un de mes projets ou bases de code liés au travail.

Équipe et pile technologique

Nous utilisions Ubuntu 16.04 avec ROS Kinetic et Python 2.7 sur un Nvidia Jetson TX2 qui interfaçait avec un Lidar Hokuyo URG 04LX UG01. Nous avions des Arduino(s) pour les entrées des capteurs comme les télémètres ultrasoniques. Notre code gérait la perception, la navigation, le contrôle et la pulvérisation. Vous pouvez voir le dépôt ici : Dépôt GitHub. Le code spécifique que j’ai écrit se trouve dans end_detector.py. Voici la liste de la plupart des composants qui constituaient le robot :

  • Ubuntu 16.04 Xenial
  • ROS Kinetic Kame
  • Python 2.7
  • Nvidia Jetson TX2
  • Lidar Hokuyo URG-04LX-UG01
  • Arduino Uno & Mega
  • Moteurs à courant continu, encodeurs, contrôleurs de moteur, batterie, etc.

Nous n’avions pas une énorme équipe, mais quelques noms ressortent :

Tyler était le leader et le fondateur du club. Je le respectais énormément à l’époque et je le respecte toujours aujourd’hui. Zachary était le responsable du développement logiciel du club et m’a beaucoup aidé à apprendre le développement logiciel et ROS, ce pour quoi je lui suis reconnaissant encore aujourd’hui.

Il y avait aussi d’autres membres, comme Kevin Barnard et Amit Rotem. Mais malheureusement, je ne me souviens pas des noms et des contacts de tous les membres d’origine, puisque cela fait plus de 5 ans depuis la fin du club.

La majeure partie du développement du robot s’est déroulée pendant les week-ends et tard dans la nuit, une fois que la plupart de nos cours étaient terminés. Travailler sur un diplôme d’ingénierie et sur AgBot était très éprouvant, mais nous avons persévéré.

Le voyage et le chaos

Une partie de toute cette expérience que je n’oublierai jamais, c’est le voyage lui-même. La compétition se déroulait à West Lafayette, dans l’Indiana, près du campus de l’Université Purdue. Et toute la compétition a eu lieu juste après la fin de la semaine des examens à Mines, donc nous n’avions aucun temps pour récupérer de cette semaine d’enfer.

Nous avons conduit de Golden, Colorado, jusqu’à l’Indiana en utilisant le camion de Tyler pour transporter également le robot et tous nos outils. Ce qui est drôle, c’est que nous avons commencé le trajet littéralement un jour avant la semaine de la compétition. Nous avons tout emballé, le robot, les outils, les batteries, les ordinateurs, tout, puis nous sommes partis de Golden, Colorado, pour West Lafayette, Indiana. Sur le papier, c’est un trajet de 18 heures. En réalité, il nous a fallu plutôt 20 ou 22 heures avec les arrêts pour l’essence et les toilettes.

Tyler a conduit tout le temps, en vivant grâce aux boissons Coffee Monster. Une autre coéquipière, désolé j’ai oublié son nom mais elle est sur les photos, a parfois pris le relais. En chemin, il a commencé à pleuvoir fortement. Nous avons dû nous arrêter à une station-service fermée au hasard et prendre une bâche pour protéger le robot. C’était bricolé, c’était le chaos, c’était de la robotique universitaire. D’une manière ou d’une autre, nous sommes arrivés.

Quand nous sommes arrivés, nous avons installé notre tonnelle sur le terrain et disposé tous nos outils. Je me suis concentré sur la finalisation du code et sur sa mise en fonctionnement. Pendant la majeure partie de la compétition, nous avons surtout travaillé à déboguer notre robot et à le faire bien fonctionner, tout en allant voir les autres robots cools construits par les autres équipes.

Alors, avons-nous gagné ?

Non

Avec le recul, nous n’étions qu’un groupe d’étudiants qui essayaient de construire quelque chose qui dépassait de loin notre niveau d’expérience. Les autres équipes étaient à un tout autre niveau. Certaines venaient de startups. Certaines de laboratoires de recherche. Certaines bénéficiaient d’un soutien académique complet. Nous étions un petit groupe d’étudiants de premier cycle qui faisions des nuits blanches, en espérant que Python transformerait les données du Lidar en quelque chose d’utile.

Notre robot était imparfait. Il était bancal. Et franchement, il fonctionnait à peine quand nous sommes arrivés à la compétition. Beaucoup de personnes de l’équipe ont commencé à abandonner lorsqu’elles ont réalisé que nous risquions de ne pas terminer à temps. Certaines ne sont même pas venues. Les examens finaux étaient terminés, le robot n’était pas prêt, et le moral était assez bas.

Mais quelques-uns d’entre nous ont tenu bon

Je n’ai pas abandonné… Tyler n’a pas abandonné… Et les personnes sur la photo non plus !

Même si nous n’avons pas gagné, ni même eu un robot entièrement fonctionnel, je n’échangerais cette expérience pour rien au monde. J’ai appris ROS, le débogage matériel, la construction de systèmes sous pression, et j’ai appris la loyauté. J’ai compris à quel point il est important d’aller jusqu’au bout.

Réflexion, en 2025

Après la saison 2019, AgBot a fermé boutique. Cela était principalement dû au COVID, arrivé près d’un an plus tard, entraînant la fermeture de tous les clubs à Mines pendant 1 à 2 ans, et au moment où le monde a commencé à revenir à la « normalité », j’avais obtenu mon diplôme.

Nous sommes maintenant en 2025, et avec le recul sur AgBot, je le considère comme le début de tout pour moi. Il m’a offert ma première véritable expérience en robotique et m’a appris à collaborer avec une équipe technique. Il m’a mis sur une voie qui m’a conduit à des opportunités incroyables.

Depuis, j’ai travaillé comme ingénieur backend chez eBay, en déployant des services qui ingèrent des millions de métriques à travers des centres de données. J’ai fondé ma première startup, qui se concentrait sur la construction de tests d’intrusion automatisés de cybersécurité par IA. J’ai lancé Notify Cyber, qui a atteint des dizaines de milliers de visiteurs. J’ai लिखा du logiciel pour Docker, Kubernetes, Postgres et des infrastructures d’IA avancées.

Mais AgBot reste l’une des meilleures expériences de ma vie. C’était chaotique, stressant et parfois semblait impossible, mais cela m’a appris plus que n’importe quel cours ou tutoriel ne l’aurait jamais pu. J’ai appris que même si vous n’avez pas le plan parfait, ni assez de financement, ni le meilleur matériel, vous pouvez quand même construire quelque chose, apprendre énormément et rencontrer des personnes incroyables en chemin.

À tous ceux de l’équipe AgBot de 2019, merci. À ce road trip de 2019, à la bâche que nous avons récupérée dans une station-service fermée, et aux nuits sans sommeil, merci. Vous m’avez donné la ténacité nécessaire pour poursuivre de grands projets avec confiance, peu importe à quel point ils semblent impossibles.

Ressources et liens

Galerie de photos

Équipe AgBot de Mines, nous

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

Notre 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

Vidéos/GIFs

Champs de la compétition

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

Autres équipes aux compétitions

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

Autres images aléatoires

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