Robot Autónomo
Robótica · Computer Vision · Deep Learning · Machine Learning
Proyectos universitarios de robótica, en plural. Durante dos años construí varias iteraciones de robots autónomos, cada una añadiendo capacidades. Empecé con sensores y seguimiento de línea en Arduino. Añadí una Raspberry Pi y cámaras. Eventualmente me adentré en machine learning y deep learning para reconocimiento de imágenes. Al final, el robot podía reconocer señales de tráfico y responder a ellas. Todo con hardware de presupuesto de estudiante.
Primera versión: solo sensores
El primer robot era Arduino puro. Sensores ultrasónicos para detección de obstáculos. Sensores IR para seguimiento de línea. Máquina de estados simple: si ves una línea, síguela. Si ves un obstáculo, para o gira.
Suena trivial pero conseguir que fuera fiable no lo era. Los sensores son ruidosos. Las lecturas IR saltaban dependiendo del color de la superficie y la luz ambiental. Los ultrasónicos tenían puntos ciegos. Aprendí a filtrar lecturas, promediar en el tiempo y construir redundancia. Si un sensor decía para y otro decía avanza, ¿qué haces?
El control PID hizo los movimientos suaves. Antes de ajustar las ganancias, el robot se movía a tirones intentando seguir una línea. Después, se deslizaba. Horas ajustando parámetros en diferentes superficies. Alfombra vs baldosa vs madera. Cada una necesitaba constantes diferentes.
Añadiendo visión
La Raspberry Pi abrió las puertas a las cámaras. De repente el robot podía ver, no solo detectar proximidad. Pero convertir píxeles en información útil es más difícil que leer un valor de sensor.
El seguimiento de línea mejoró con visión por computadora. En lugar de sensores IR que solo ven directamente debajo, la cámara podía ver adelante. Detección de bordes Canny, transformadas de Hough, corrección de perspectiva. El robot podía anticipar curvas en lugar de reaccionar a ellas.
La CV clásica tiene límites. Funciona hasta que no funciona. Cambia la iluminación, cambia el color de la línea, añade sombras, y de repente tus umbrales cuidadosamente ajustados fallan. Pasé semanas haciéndolo robusto a condiciones que parecían menores pero lo rompían todo.
Machine learning para reconocimiento
La iteración final añadió redes neuronales para reconocimiento de señales de tráfico. Señales de stop, indicadores de giro, límites de velocidad. El robot necesitaba ver una señal, clasificarla y responder apropiadamente.
Los datos de entrenamiento fueron el primer desafío. Fotografié señales desde cada ángulo, en diferente iluminación, a varias distancias. Aumenté el dataset con rotaciones, recortes, cambios de brillo. Unos pocos cientos de imágenes reales se convirtieron en miles de muestras de entrenamiento.
El modelo tenía que correr en una Raspberry Pi. Sin GPU, memoria limitada. Aprendí a construir redes pequeñas que aún funcionaran. Menos capas, menos parámetros, trucos de cuantización. El equilibrio entre precisión y velocidad se volvió concreto cuando estás mirando tiempos de inferencia.
Conseguir reconocimiento fiable llevó iteración. Los primeros modelos funcionaban en el laboratorio y fallaban en diferentes entornos. Más datos de entrenamiento, mejor augmentación, validación cuidadosa. Eventualmente reconocía señales lo suficientemente consistente como para confiar.
Juntando todo
El robot final combinaba todo. Arduino manejaba motores y sensores de bajo nivel. Raspberry Pi ejecutaba el procesamiento de cámara e inferencia ML. Se comunicaban por serial. La Pi decidía qué hacer, el Arduino lo hacía realidad.
Una máquina de estados coordinaba el comportamiento. Sigue la línea hasta que veas una señal. Reconoce la señal. Ejecuta la respuesta apropiada. Vuelve al seguimiento de línea. Lógica simple, pero cada pieza tenía que funcionar de forma fiable o todo se venía abajo.
La fusión de sensores también importaba aquí. La cámara dice una cosa, los ultrasónicos dicen otra. Aprendí a ponderar fuentes por fiabilidad. Confía en la visión para reconocimiento de señales. Confía en los ultrasónicos para obstáculos cercanos. Usa ambos para navegación.
Lo que aprendí
Construir iterativamente me enseñó más que construir una sola vez. Cada versión revelaba lo que no entendía. El robot de solo sensores me mostró filtrado y control. La versión con cámara me enseñó fundamentos de CV. La versión ML me obligó a aprender entrenamiento, despliegue y la brecha entre precisión de laboratorio y rendimiento en el mundo real.
El hardware limitado es un buen maestro. Cuando no puedes lanzar potencia de cómputo a los problemas, tienes que entenderlos de verdad. Cada milisegundo de tiempo de inferencia, cada byte de memoria, cada vatio de potencia importa en una Raspberry Pi. Esa disciplina se transfiere a sistemas más grandes.
Los algoritmos clásicos y ML se complementan. El seguimiento de línea funcionaba mejor con CV tradicional. El reconocimiento de señales necesitaba redes neuronales. Saber cuándo usar cuál viene de probar ambos.
Estos fueron proyectos académicos sin ambición comercial. Pero los fundamentos se transfieren. Fusión de sensores, control en tiempo real, ML en el edge, desarrollo iterativo. Los mismos principios aparecen en drones, vehículos autónomos, automatización industrial. Todavía uso lo que aprendí aquí.