> Categoria: Robótica Competitiva
Proyecto AT0M
Diario de desarrollo de un robot sumo autónomo de alta competencia.
// Modelo Histórico: AT0M V2
01. Origen
AT0M nació como un robot sumo de competencia pensado para rebelarse contra los diseños típicos. Empezó siendo un robot lento hecho con componentes que tenía en mi casa. Hoy, está enfocado en maximizar la tracción y el tiempo de respuesta.
El diseño original fue pensado para optimizar el espacio y el ensamblaje del mismo, pudiendo dividirse en dos partes para acceder más fácil al interior. En la versión anterior (V2), el enfoque estaba puesto en validar la lógica de combate y la distribución de peso.
Aunque este acercamiento al objetivo cumplía su función, todavía le faltaba fuerza y velocidad, y una estructura más robusta que le permitiera ganar. Para cumplir el nuevo objetivo de este robot y ganar fuerza, estaba limitado por mi driver de motores (L298, como se ve en la PCB), pero todo lo que encontraba comercialmente para reemplazarlo o era muy grande, o caro, o no se conseguía en Argentina.
De acá, nació la idea que al final dió lugar al TitanCore-7960.
02. Hardware y Desarrollo
Todo el diseño y desarrollo del hardware fue desde cero y completamente hecho y pensado por mi, claramente pensando tambien en ciertas limitaciones de presupuesto.
Fue por esto y un par de razones más, como por ejemplo que comercialmente no se conseguían otras opciones en Argentina, que me terminé decantando por el L298 como mi driver de motores.
// PCB: AT0M V2
Arrastrá para rotar • Scroll para hacer zoom
Por otro lado, este robot utilizaba sensores ultrasónicos (HC-SR04), que por más queridos que sean por la comunidad, nunca me resultaron tan confiables ni rápidos. Por alguna razón, siempre algún sensor se me jodía.
A partir de ahí, decidí que también iba a buscar otro enfoque para sensar al contrincante.
03. Software y Estrategias
Así como el hardware, todo el software fue desarrollado por mi, basado en C++ y utilizando la extensión PlatformIO en VSCode.
Creo que lo que más tengo para destacar del software es: el seteo de una dirección de arranque y el uso de estrategias. Me resulta extraño lo poco que veo en las competencias robots que configuren una dirección de arranque.
¿A que me refiero con esto? La dirección de arranque es el ángulo al cual va a girar tu robot apenas pasen los 5 segundos.
¿De que sirve? Esto te permite que tu robot no pierda tiempo buscando al otro porque arrancó mirando para cualquier lado, y realmente el tiempo es oro en cada round.
Por acá va un ejemplo muy recortado de mi código:
#define GIRO_IZQ_45 50 // Definimos el tiempo en millis que nuestro robot tarda en girar esos grados
.
.
.
.
switch (direccion)
{
case IZQ_45:
if (!en_ejecucion) {
en_ejecucion = true;
tiempo_inicio = ahora;
movimiento(IZQUIERDA, 255, 255);
}
if (ahora - tiempo_inicio >= GIRO_IZQ_45)
{
en_ejecucion = false;
flag_iniciar_direccion = false;
flag_iniciar_strat = true;
tiempo_inicio = 0;
}
break;
.
.
.
}04. El Futuro - AT0M V3
// En desarrollo: AT0M V3
Arrastrá para rotar • Scroll para hacer zoom
Gracias a los aprendizajes y conclusiones que fuimos apreciando en la versión anterior es que hoy llegué a este diseño con estas características.
El diseño 3D es más robusto, gracias a que es de solo una pieza, y aprovecha más el espacio sin perder ángulo de levante en la pala del frente gracias a la curvatura de sus rampas.
La PCB está basada en mi propio driver de motores, el TitanCore-7960, lo que me permite llevar al limite a mis motores con 24v, ganando fuerza y velocidad.
Utilizo dos tipos de sensores infrarrojos distintos, que me dan mayor velocidad. Al estar en desarrollo, todavía no pude poner a prueba su eficiencia y confiabilidad.
Y por el lado de la programación, esta vez voy a utilizar un enfoque un poco distinto: voy a evaluar el uso de algoritmos de control, tal como el PID (Proporcional Integral y Derivativo) para sumo.