Desafío AgBot 2019

Escuela Secundaria East

Durante mi tiempo en la Escuela Secundaria East en Denver, Colorado (2014-2018), estuve muy involucrado en actividades extracurriculares, siendo la más impactante el club de robótica, AngelBotics. No fue hasta mi segundo año que me uní, debido a un enfoque inicial en el fútbol. El club participaba principalmente en la Competencia de Robótica FIRST (FRC), permitiéndome explorar ingeniería mecánica y eléctrica, así como programación. A través de AngelBotics, aprendí a usar herramientas CAD, impresoras 3D y otros equipos de ingeniería, obteniendo exposición a conceptos STEM generalmente reservados para estudiantes universitarios. Inicialmente aspiraba a ser Físico Cuántico, pero mis experiencias en Física AP y robótica me mostraron que no era tan bueno en física y, a su vez, me alejaron de una trayectoria en ingeniería mecánica.

En cambio, encontré mi nicho en la programación, que comenzó escribiendo código Python para mi primera Raspberry Pi y se consolidó a través de proyectos en Java en AP Computer Science. A pesar de tener dificultades con los exámenes, mi profesor, el Sr. Nagel, me animó a perseguir el desarrollo de software, enfatizando el valor de los proyectos por encima de las calificaciones en los exámenes. Esto me llevó a centrarme en ciencias de la computación como mi carrera en la universidad con el sueño de convertirme en ingeniero de software y eventualmente en fundador para mi carrera.

Aunque no estuve tan involucrado en AngelBotics debido a mi exigente carga académica y a la pronunciada curva de aprendizaje, aun así despertó en mí una pasión de por vida por la robótica. Así que cuando empecé la universidad, estaba decidido a unirme a un club de robótica universitario y algún día construir una empresa que resuelva problemas del mundo real con robótica.

Escuela de Minas

Después de graduarme de la Escuela Secundaria East, comencé mi licenciatura en Ciencias de la Computación en la Colorado School of Mines (2018-2022). Durante mi primer semestre, revisé los clubes de robótica de Mines y descubrí un grupo de robótica completamente nuevo llamado AgBot.

AgBot era un nuevo club de robótica formado con el objetivo de construir un robot para competir en la Competencia agBots Weed and Feed 2019. Esta competencia tenía dos desafíos principales:

  1. Identificación y erradicación de plagas y malezas
  2. Creación de nuevos métodos de cosecha mediante robótica

Nuestro equipo decidió enfocarse en el primer desafío. Era la primera vez que Mines participaba en la competencia agBot, y era la primera vez que un club de robótica de Mines trabajaba en algo relacionado con la agricultura. Eso hizo que todo se sintiera novedoso.

Me atrajo inmediatamente el proyecto. Mi familia fue agricultora en Turquía durante generaciones, hasta la generación de mi padre. Así que AgBot se sintió cercano a casa, al mismo tiempo que unía mi pasión por la robótica y la programación. La idea de construir un robot que pudiera ayudar a agricultores como mis abuelos era realmente emocionante.

Desarrollo

Ser parte del equipo de AgBot es una de mis experiencias universitarias más memorables. También fue una de las cosas más difíciles en las que había trabajado hasta ese momento. Este proyecto fue la primera vez que realmente me adentré en Python, Ubuntu y ROS. En FRC, todo estaba en Java, así que esto era territorio completamente nuevo para mí. Había usado Python y Ubuntu antes, pero nunca había tocado ROS. Aprender cómo funcionaba ROS fue una batalla cuesta arriba. Ni siquiera sabía qué era un entorno de Python en ese entonces.

Pasé la mayor parte de mi tiempo tratando de lograr que un Lidar enviara datos utilizables a un nodo de ROS que estaba escribiendo. Mi tarea era implementar un Nodo ROS llamado end_detector que pudiera detectar cuándo el robot llegaba al final de una hilera de cultivo usando datos de Lidar. Ahora suena simple, pero en ese momento me parecía enorme.

Me tomó alrededor de dos semanas de depuración lograr que el Lidar hablara con mi código. Todo el código estaba escrito ya sea en C++ o en Python, principalmente en Python. Así que mi código para este trabajo era solo Python. Una vez que eso funcionó, comencé a probar la lógica usando parches aleatorios de plantas que encontré en el campus. Haría pasar el soporte que sostenía el Lidar frente a ellos y vería si el código podía decir cuándo llegábamos al final. Después de muchas horas y depuración, eventualmente logré que todo funcionara al menos en mi entorno de prueba. Era otra historia cuando intentamos combinar todo.

La mayor parte de mi tiempo se dedicó a lograr que el hardware y el software se comunicaran entre sí. La lógica real para detectar los finales de hilera vino después. Pero fue una gran experiencia de aprendizaje. Pasé de entender apenas ROS a escribir y depurar nodos en una placa Jetson con datos de Lidar en vivo. También fue durante este tiempo que cambié de usar principalmente Java como mi lenguaje de programación a usar Python por defecto. Y, a partir de 2025, todavía no he usado realmente Java para ninguno de mis proyectos o bases de código relacionadas con el trabajo.

Equipo y pila tecnológica

Ejecutábamos Ubuntu 16.04 con ROS Kinetic y Python 2.7 en una Nvidia Jetson TX2 que se interfaciaba con un Lidar Hokuyo URG 04LX UG01. Teníamos Arduino(s) para entradas de sensores como los medidores de distancia ultrasónicos. Nuestro código manejaba percepción, navegación, control y rociado. Puedes ver el repositorio aquí: Repositorio de GitHub. El código específico que escribí se puede encontrar en end_detector.py. Aquí está la lista de la mayoría de los componentes que conformaban el robot:

  • Ubuntu 16.04 Xenial
  • ROS Kinetic Kame
  • Python 2.7
  • Nvidia Jetson TX2
  • Lidar Hokuyo URG-04LX-UG01
  • Arduino Uno y Mega
  • Motores de CC, codificadores, controladores de motor, batería, etc.

No teníamos un equipo enorme, pero destacan algunos nombres:

Tyler fue el líder y fundador del club. Lo respetaba mucho entonces y todavía lo hago hoy. Zachary fue el responsable del desarrollo de software del club y me ayudó a aprender mucho sobre desarrollo de software y ROS, por lo cual le estoy agradecido hasta el día de hoy.

También había otros miembros, como Kevin Barnard y Amit Rotem. Pero lamentablemente no recuerdo los nombres ni los contactos de todos los miembros originales, ya que han pasado más de 5 años desde que el club terminó.

La mayor parte del desarrollo del robot ocurrió durante los fines de semana y hasta altas horas de la noche después de que terminaban la mayoría de nuestras clases. Trabajar en una carrera de ingeniería y en AgBot fue muy exigente, pero perseveramos.

El viaje y el caos

Una parte de toda esta experiencia que nunca olvidaré fue el viaje en sí. La competencia se llevó a cabo en West Lafayette, Indiana, cerca del campus de la Universidad Purdue. Y toda la competencia tuvo lugar justo después de que terminara la semana de finales en Mines, así que no tuvimos tiempo de recuperarnos de esa semana infernal.

Manejamos desde Golden, Colorado, hasta Indiana usando la camioneta de Tyler para también transportar el robot y todas nuestras herramientas. Lo gracioso es que comenzamos el viaje literalmente un día antes de la semana de la competencia. Empacamos todo lo que teníamos, el robot, las herramientas, las baterías, las computadoras, todo, y manejamos desde Golden, Colorado, hasta West Lafayette, Indiana. Eso son 18 horas de viaje sobre el papel. Nos tomó más bien 20 o 22 horas con paradas para gasolina y baño.

Tyler manejó todo el tiempo, sobreviviendo con bebidas Coffee Monster. Otra compañera de equipo, perdón, olvidé su nombre pero está en las fotos, lo reemplazó a veces. En el camino, empezó a llover a cántaros. Tuvimos que orillarnos en una estación de servicio cerrada al azar y agarrar una lona para proteger el robot. Fue improvisado, fue caos, fue robótica universitaria. De alguna manera, llegamos.

Cuando llegamos, instalamos nuestra carpa en el campo y colocamos todas nuestras herramientas. Yo me enfoqué en terminar el código y hacerlo funcionar. Durante la mayor parte de la competencia, principalmente trabajamos en depurar nuestro robot y lograr que funcionara bien, además de revisar los robots geniales de los otros equipos.

¿Entonces ganamos?

No

Mirándolo en retrospectiva, éramos solo un grupo de jóvenes tratando de construir algo que estaba muy por encima de nuestro nivel de experiencia. Los otros equipos estaban en un nivel completamente diferente. Algunos venían de startups. Algunos de laboratorios de investigación. Algunos tenían apoyo académico completo. Éramos un grupo pequeño de estudiantes universitarios pasando noches en vela, con la esperanza de que Python convirtiera los datos de Lidar en algo útil.

Nuestro robot tenía fallas. Era improvisado. Y, honestamente, apenas funcionaba cuando llegamos a la competencia. Muchas personas del equipo comenzaron a abandonar cuando se dieron cuenta de que tal vez no terminaríamos a tiempo. Algunos ni siquiera aparecieron. Los finales habían terminado, el robot no estaba listo y la moral era bastante baja.

Pero algunos nos mantuvimos firmes

No me rendí… Tyler no se rindió… ¡Y la gente de la foto tampoco se rindió!

Aunque no ganamos ni siquiera tuvimos un robot completamente funcional, no cambiaría esa experiencia por nada. Aprendí sobre ROS, depuración de hardware, construcción de sistemas bajo presión, y aprendí sobre lealtad. Me di cuenta de lo importante que es llevar las cosas hasta el final.

Reflexión, a partir de 2025

Después de la temporada 2019, AgBot cerró sus operaciones. Esto se debió principalmente a que la COVID llegó casi un año después, lo que hizo que todos los clubes de Mines se cerraran durante 1-2 años y, para cuando el mundo empezó a volver a la “normalidad”, yo me gradué.

Ahora es 2025, y al mirar atrás a AgBot, lo veo como el comienzo de todo para mí. Me dio mi primera experiencia real con la robótica y me enseñó cómo colaborar con un equipo técnico. Me puso en un camino que me ha llevado a oportunidades increíbles.

Desde entonces, he trabajado como ingeniero de backend en eBay, implementando servicios que ingieren millones de métricas en todos los centros de datos. Fundé mi primera startup, que se centró en construir pruebas de penetración de ciberseguridad automatizadas por IA. Lancé Notify Cyber, que alcanzó decenas de miles de visitantes. He escrito software para Docker, Kubernetes, Postgres e infraestructura avanzada de IA.

Pero AgBot sigue destacando como una de las mejores experiencias de mi vida. Fue caótico, estresante y a veces parecía imposible, pero me enseñó más que cualquier clase o tutorial jamás podría. Aprendí que incluso si no tienes el plan perfecto, ni suficiente financiación, ni el mejor hardware, aun así puedes construir algo, aprender muchísimo y conocer a personas increíbles en el camino.

A todos los del equipo de AgBot de 2019, gracias. A ese viaje por carretera de 2019, a la lona que tomamos en una gasolinera cerrada y a las noches sin dormir, gracias. Me dieron la fortaleza para perseguir proyectos grandes con confianza, sin importar lo imposibles que parezcan.

Recursos y Enlaces

Galería de Fotos

Equipo de AgBot de Mine, Nosotros

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

Nuestro 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

Videos/GIFs

Campos de la competencia

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

Otros equipos en las competencias

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

Otras imágenes aleatorias

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