Juego sobre el tablero de fútbol
Introducción¶
IMPORTANTE
Toda la información acerca de este apartado se fundamenta en la creada por Kathy Giori y el ejemplo que se desarrolla está basado en el creado por ella misma de nombre football-teardown-f.ubp.
El ejercicio consiste en crear un programa capaz de detectar la posición del balón, soltar a CoCube en cualquier otra posición del CoMap "Football Challenge" y hacer que este se dirija a la posición inicial del balón y lo recoja con la pinza. Una vez recogido el balón lo mueve hasta la posición de lanzamiento y efectúa el mismo.
El juego trata de registrar la posición del balón en el campo de fútbol pulsando el botón A, para luego colocar al jugador donde queramos, pulsaremos el botón B y le diremos que busque el balón y lo meta en la portería.
Dependencias y Bloques principales¶
El programa utiliza, bien directamente o bien por dependecias, las siguientes bibliotecas:
- CoCube: para controlar el robot (motores, sensores, lectura de tarjetas RFID). Esta tiene como dependencias las bibliotecas Tone, Display (Pantalla LED), TFT y PID.
- CoCube Module: para poder manejar el módulo externo del servomotor con pinza. Esta tiene como dependencias, de interés para este caso, las bibliotecas Servo y CoCube.
- Color: para operaciones de color, trabaja con tono, saturación y brillo (HSV, iniciales de Hue, Saturation y Brightness).
- PID: para bucle de control PID.
- Servomotores: para control de servos tanto posicionales (ángulo) como rotativos.
- TFT: para mostrar información en la pantalla de CoCube.
Inicio y botones¶
‣ Bloque al empezar
- Este bloque se ejecuta automáticamente al iniciar el programa.
- Limpia la pantalla TFT.
- Llama a la función
balon, que dibuja el balón y muestra el texto “Hora de jugar futbol”. - Abre la pinza o gripper del módulo con servomotor acoplado al robot (la pinza) para asegurarse de que está preparado.
‣ Botón A
- Al presionar A, se limpia la pantalla.
-
Si el CoCube está correctamente ubicado sobre el tapete de juego ("sobre la alfombra"):
- Guarda la posición inicial del robot (x_ini, Y_ini) y su dirección (dir).
- Muestra esos valores en pantalla con la función muestra-x_ini-y_ini.
-
Si no está sobre el tapete, muestra un mensaje de error en color rojo.
‣ Botón B
Al presionar B, el robot:
- Guarda su posición actual (x1, y1) y dirección (dir1).
- Muestra esos valores en pantalla con
muestra-x1-y1. - Llama a la función
ir a chutar, que hace que el robot se desplace y patee. - Luego muestra el texto "Anotaste?" y vuelve a dibujar el balón.
‣ Botón A+B
Al presionar A+B simultáneamente:
- Cierra la pinza del robot.
- Detiene todas las ruedas y la ejecución general del programa.
- Limpia la pantalla TFT.
Deja al robot listo para comenzar de nuevo.
Funciones¶
‣ Función balon
- Elige un tono gris aleatorio para el texto.
- Muestra el mensaje "Hora de jugar futbol" en tres líneas.
- Llama a dibujar_balon para representar gráficamente un balón.
‣ Función dibujar_balon
- Dibuja un balón en pantalla combinando círculos (blanco y rojo) y triángulos para simular los paneles del balón.
- Usa coordenadas fijas para formar la figura.
‣ Función ir a chutar
Simula que el robot va a chutar un balón:
- Cierra la pinza como medida para evitar que el balón se mueva antes de tiempo.
- Se mueve hasta alcanzar una posición objetivo. El robot se mueve hacia atrás hasta que su posición en el eje X esté 20 unidades por detrás de donde comenzó (
x_ini). - Se orienta hacia un punto de referencia con velocidad de giro 30. Se mueve hacia atrás a velocidad 40 durante 1 segundo (1000 ms). Luego actualiza su posición x1 con su valor actual.
- Si el robot se ha movido demasiado hacia arriba o abajo (diferencia mayor a 20 en el eje Y), corrige su posición. Apunta hacia su coordenada Y inicial (Y_ini) y se desplaza hasta alinearse con esa posición.
- El CoCube ahora vuelve a su punto inicial, el lugar donde estaba al principio. Se reorienta hacia (x_ini, Y_ini) y se mueve a esa posición a velocidad 40.
- Se orienta hacia la portería (en este caso, el punto (0, 100)). El número 15 indica una velocidad de giro más lenta y controlada, para apuntar con precisión.
- Si el punto inicial (x_ini) es mayor que 150, significa que el robot está lejos del campo de tiro. Entonces avanza poco a poco hacia adelante, corrigiendo su dirección hacia (0, 100) hasta llegar a la posición X = 150 o menos.
- Finalmente avanza y “patea”. El CoCube apunta nuevamente hacia la portería (0,100). Se mueve hacia adelante a velocidad 15 durante 700 ms, lo que simula el avance para chutar.
- En el momento del “impacto”: Cierra la pinza (como si empujara el balón), espera 1 segundo y la abre, soltando el balón tras el golpe.
En resumen:
| Etapa | Acción | Propósito |
|---|---|---|
| 1 | Cierra pinza | Prepararse para sujetar balón |
| 2 | Retrocede hasta 20 unidades | Crear espacio para impulso |
| 3 | Abre pinza | Soltar el balón |
| 4 | Corrige eje Y | Alinear posición lateral |
| 5 | Regresa al punto inicial | Recolocarse antes del disparo |
| 6 | Apunta a (0,100) | Alinear hacia portería |
| 7 | Avanza si está muy lejos | Colocarse a distancia adecuada |
| 8 | Avanza, cierra, suelta | Simular el disparo (chute) |
‣ Función muestra-x_ini-y_ini
- Muestra en pantalla TFT el texto “Posición del balón” y los valores de las coordenadas iniciales (x_ini, Y_ini) y la dirección (dir)
- Usa colores diferentes para distinguir cada dato.
‣ Función muestra-x1-y1
Similar a la anterior, pero muestra la posición y dirección actuales del CoCube (después del movimiento).
A continuación se muestra un resumen general del programa:
| Sección | Propósito principal |
|---|---|
| al comenzar | Prepara el entorno y muestra el balón inicial. |
| Botón A | Guarda y muestra la posición inicial del robot. |
| Botón B | Ejecuta el movimiento de “chutar” y muestra la nueva posición. |
| Botón A+B | Detiene todo y limpia la pantalla. |
| Función balon | Dibuja el texto “Hora de jugar futbol” y el balón. |
| Función dibujar_balon | Dibuja el balón en pantalla con formas geométricas. |
| Función ir a chutar | Controla los movimientos del robot para simular un disparo. |
| Función muestra-x_ini-y_ini / muestra-x1-y1 | Muestran en pantalla las coordenadas guardadas. |
Programa¶
Aviso
Para que el programa funcione correctamente hay que añadir las bibliotecas PID y servomotor si no están ya agregadas
En el video siguiente podemos observar el funcionamiento del programa anterior con un pequeño error de posicionamiento a la hora de recoger el balón.







