Robot Autónomo
Robótica · Computer Vision · Deep Learning · Machine Learning
Proyectos universitarios de robótica, en plural. A lo largo de dos años construí varias iteraciones de robots autónomos, cada una sumando capacidades. Empecé con sensores y seguimiento de línea en Arduino. Le añadí Raspberry Pi y cámaras. Con el tiempo entré en machine learning y deep learning para reconocimiento de imágenes. Al final, el robot reconocía señales de tráfico y respondía a ellas. Todo con hardware de presupuesto universitario.
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 lograr que fuese fiable no lo era. Los sensores meten ruido. Las lecturas IR saltaban según el color de la superficie y la luz ambiental. Los ultrasónicos tenían puntos ciegos. Aprendí a filtrar lecturas, promediar en el tiempo y meter redundancia. Si un sensor dice para y otro dice avanza, ¿qué haces?
El control PID suavizó los movimientos. Antes de ajustar las ganancias, el robot iba a tirones siguiendo la línea. Después, se deslizaba. Horas ajustando parámetros en distintas superficies. Alfombra, baldosa, madera. Cada una necesitaba constantes diferentes.
Añadiendo visión
La Raspberry Pi abrió la puerta a las cámaras. De repente el robot podía ver, no solo detectar proximidad. Pero convertir píxeles en información útil es bastante más difícil que leer el valor de un sensor.
El seguimiento de línea mejoró con computer vision. En lugar de sensores IR que solo ven justo debajo, la cámara podía ver hacia delante. Detección de bordes Canny, transformadas de Hough, corrección de perspectiva. El robot anticipaba curvas en vez de reaccionar a ellas.
La CV clásica tiene límites. Funciona hasta que deja de funcionar. Cambias la iluminación, cambias el color de la línea, añades sombras, y de repente los umbrales que habías ajustado con cuidado se van al traste. Pasé semanas haciéndolo robusto ante condiciones que parecían menores pero lo rompían todo.
Machine learning para reconocimiento
La última iteración añadió redes neuronales para reconocer señales de tráfico. Señales de stop, indicadores de giro, límites de velocidad. El robot tenía que ver una señal, clasificarla y responder en consecuencia.
Los datos de entrenamiento fueron el primer reto. Fotografié señales desde todos los ángulos, con distinta iluminación, a varias distancias. Amplié el dataset con rotaciones, recortes, cambios de brillo. Unos cientos de imágenes reales se convirtieron en miles de muestras de entrenamiento.
El modelo tenía que funcionar en una Raspberry Pi. Sin GPU, con memoria limitada. Aprendí a diseñar redes pequeñas que siguieran dando resultados. Menos capas, menos parámetros, trucos de cuantización. El equilibrio entre precisión y velocidad se vuelve muy tangible cuando miras tiempos de inferencia.
Lograr un reconocimiento fiable requirió iteración. Los primeros modelos funcionaban en el laboratorio y fallaban en otros entornos. Más datos de entrenamiento, mejor data augmentation, validación rigurosa. Al final reconocía señales con la consistencia necesaria para fiarnos.
Juntando todo
El robot final combinaba todo. Arduino manejaba motores y sensores de bajo nivel. La Raspberry Pi se encargaba del procesamiento de cámara y la inferencia ML. Se comunicaban por serial. La Pi decidía qué hacer; el Arduino lo ejecutaba.
Una máquina de estados coordinaba el comportamiento. Sigue la línea hasta que veas una señal. Reconócela. Ejecuta la respuesta correspondiente. Vuelve al seguimiento de línea. Lógica simple, pero cada pieza tenía que ser fiable o todo se venía abajo.
La fusión de sensores también era clave aquí. La cámara dice una cosa, los ultrasónicos otra. Aprendí a ponderar fuentes según fiabilidad. Para reconocer señales, confía en la visión. Para obstáculos cercanos, en los ultrasónicos. Para navegar, en ambos.
Lo que aprendí
Construir de forma iterativa me enseñó más que construir de una sola vez. Cada versión revelaba lo que no entendía. El robot con solo sensores me enseñó filtrado y control. La versión con cámara, fundamentos de CV. La versión ML me obligó a aprender entrenamiento, deploy y la brecha entre precisión de laboratorio y rendimiento en el mundo real.
El hardware limitado es un gran maestro. Cuando no puedes tirar de potencia bruta, tienes que entender los problemas de verdad. Cada milisegundo de inferencia, cada byte de memoria, cada vatio cuenta en una Raspberry Pi. Esa disciplina se traslada a sistemas más grandes.
Los algoritmos clásicos y el 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 cada uno solo se aprende probando ambos.
Fueron proyectos académicos sin ambición comercial. Pero los fundamentos sí se trasladan. 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. Sigo aplicando lo que aprendí aquí.