8: Conduciendo nuestro robot
3 de febrero de 2023
Durante estas últimas semanas hemos aprendido a conducir nuestro robot, tanto basándonos en distancias y giros como haciendo uso del sensor de distancia. A continuación, os vamos a detallar cómo desarrollar cada uno de los programas que hemos realizado.
Misión 1: Dibujar un cuadrado
En esta misión, hemos partido de la "Base de conducción 1", que se puede encontrar en las instrucciones de construcción de la aplicación Lego Spike 3 (siempre que nos hayamos descargado la unidad "Listo para competir"). La base de conducción, una vez construida, tiene este aspecto:
El objetivo es mover el robot para que su movimiento describa un cuadrado, tal que así:
En el mundo de la programación y la robótica existen multitud de soluciones para un mismo problema. En este caso, una sencilla solución es la siguiente:
Mediante la primera secuencia de programación, lo que hacemos es establecer los parámetros del robot, es decir, enseñarle ciertas cosas para que después el robot sepa moverse. Lo mínimo que tenemos que decirle es:
Cuáles son los motores que controlan sus ruedas. En nuestro caso, los motores los tenemos conectados en la salida C y D del Hub.
A qué velocidad queremos que se desplace. Para tener un control más preciso del robot, una buena velocidad es el 25%.
Cuánto avanza el robot con cada rotación del motor. Cada vez que el motor complete una rotación, su movimiento se habrá transmitido a las ruedas. Por tanto, lo que tenemos que decirle al robot es que una rotación de su motor equivale a la longitud de la circunferencia de la rueda. Es muy importante decirle esto, porque el robot sólo sabe de rotaciones. Si no sabe cuánto mide sus ruedas, ¿cómo va a saber después cómo avanzar una determinada distancia? ¿A que una bicicleta de niños avanza menos que una bicicleta de adultos cuando sus ruedas completan un giro? Por eso es tan importante decir este valor. En nuestro caso, las ruedas utilizadas en nuestra construcción miden 17,5 centímetros.
En cuanto a la segunda secuencia de programación, que bien podría estar a continuación de la primera, pero quizás quede más claro en una secuencia distinta, lo que hacemos es lo siguiente:
Esperar un segundo, para asegurarnos de que la primera secuencia ha finalizado y que los parámetros del robot estén correctamente establecidos.
Repetir 4 veces lo siguiente:
Mover hacia delante 20 centímetros, por ejemplo.
Mover media rotación del motor girando completamente a la izquierda. Este tipo de bloque (con el parámetro derecha o izquierda a 100 o -100, respectivamente) lo que realmente provoca es un giro de una rueda hacia delante y la otra rueda hacia detrás (o viceversa, dependiendo de si se gira a la izquierda o a la derecha). Al mover las ruedas de esta forma, el robot girará sobre sí mismo. ¿Y por qué media rotación? Porque si giráramos una rotación completa provocaríamos un giro de 180 grados del motor, es decir, haríamos que el robot pasara de mirar hacia delante a mirar hacia atrás.
¿Y por qué pusimos un bucle de repetir 4 veces? Pues porque el cuadrado tiene 4 lados, así de simple ;-).
Misión 2: Recoger bloques por el camino
En esta otra misión, hemos partido de la "Base de conducción 2", que se puede encontrar en la misma ubicación que la base utilizada en la anterior misión. Una vez construida, la base presenta este aspecto:
El objetivo es mover el robot para que vaya a por cada bloque que se encuentre, estando situados los bloques de la siguiente forma (por ejemplo, cada uno de ellos a 5 centímetros entre sí y la vertical del poste a 10 centímetros del primer bloque):
Partiendo del escenario actual, y con las distancias comentadas en el ejemplo, una posible solución podría ser ésta:
Mediante la primera secuencia de programación, lo que hacemos es establecer los parámetros del robot (como en la misión 1) y, además, colocar el motor para que la pala del robot quede en una posición que no obstaculice al sensor de distancia, así como fijar la velocidad del motor que mueve la pala al 10%, de modo que los movimientos no sean muy bruscos. Una posibilidad es poner el motor correspondiente (en nuestro ejemplo, el E) en la posición 0, colocar la pala ajustando las ruedas dentales que la mueven para que quede totalmente vertical, y, de esta forma, cuando inicie el programa con la secuencia de programación anterior, la pala se moverá a la posición 20 (es decir, el motor girará 20 grados, de los 360 que tienen una vuelta completa), con lo que la pala bajará un poquito y no estorbará para medir distancias.
En cuanto a la segunda secuencia de programación, es un poquito más compleja, aunque hemos hecho en el pasado cosas mucho más difíciles en Scratch, así que no os asustéis. Vayamos por pasos:
Lo primero que hacemos es esperar 2 segundos, para que estemos seguros de que la primera secuencia se ha ejecutado completamente (es decir, la pala ya está completamente colocada).
A continuación, inicializamos el valor de una variable que utilizaremos para saber a cuánta distancia nos tenemos que parar del poste negro (que se veía en la imagen de la misión). Puesto que cada vez nos vamos a querer ir acercando un poquito más, tenemos que usar una variable cuyo valor iremos cambiando. En un primer momento, establecemos la distancia a 25 centímetros (distancia que habría que comprobar con un metro, para ver si realmente la posición de los objetos es esa).
Una vez inicializada la variable, entramos en un bucle que se repetirá tantas veces como bloques queramos recoger (en nuestro caso, cuatro). En cada repetición, se realizará lo siguiente:
Empezar a mover el robot hacia delante.
Esperar a que el robot, haciendo uso de su sensor de distancia (si se siguieron las instrucciones, enchufado a la entrada F), detecte que está más próximo al poste de la distancia almacenada en la variable.
Una vez detectada la distancia correcta, es muy importante parar el movimiento, o de lo contrario el robot no parará de andar.
Bajar la pala unos 70 grados, para que seamos capaces de arrastrar el objeto. Para ello, hay que mover el motor correspondiente (el E, si se siguieron las instrucciones de montaje al dedillo) en sentido antihorario (aunque lo mejor es probar, pues es un poco lío al principio saber el sentido en el que hay que hacerlo ;-) ).
Esperar un segundo para que el movimiento no sea tan brusco. Este tipo de esperas adicionales hará que tengamos más precisión a la hora de colocar el robot o la pala, pues de lo contrario, al ejecutar las instrucciones tan rápido (¡el robot ejecuta cada bloque a toda pastilla!), el robot será más impreciso.
Mover el robot unos 20 centímetros (o la distancia que cada uno crea conveniente, en función de la mesa donde esté trabajando, para que no se nos caiga al suelo, principalmente :-) ) hacia atrás.
Levantar la pala 70 grados, justo moviendo el motor de la pala en el sentido inverso al del punto 4.
Esperar dos segundos, para que nos dé tiempo a quitar el bloque con nuestras manos (con mucho cuidado, sin tocar el robot).
Sumar a la variable que usábamos al principio el valor -5, para que en la próxima ejecución del bucle el robot se quede 5 centímetros más cerca del poste.
Y con esto ya estaría. Quizás tengáis que ajustar un poco las distancias o la colocación de las piezas, pues al final estamos hablando de juguetes que no son precisos al 100% (tampoco lo son los robots de la vida real, pues siempre hay un margen de error).
¡Esperamos que os hayáis divertido con las misiones y en el futuro habrá muchas más y muy divertidas!