9 ejercicios corregidos de Lego Mindstorms

Esta serie de ejercicios corregidos sobre Lego Mindstorms te permite familiarizarte con el software de programación y robótica.

Tormentas mentales de Lego

Ejercicio 1

En este ejercicio, aprenderá a programar el robot para que realice movimientos sencillos. Entender cómo hacer que tu robot realice sus movimientos es fundamental porque necesitará realizarlos constantemente en los siguientes ejercicios.

Utilizando la guía de programación que se le proporcionó, programe su robot
para que realice las siguientes acciones:

avanzar durante un período de 3 segundos,

retroceder por un período de 3 segundos,

girar a la izquierda y luego a la derecha.

Este ejercicio pretende explicar de forma sencilla cómo programar el robot utilizando el software LEGO. Hay dos formas de abordar estos problemas:

ya sea usando el bloque Move (que le permite controlar ambos motores a la vez), o usando dos bloques Motor (uno para cada motor, que le permite controlar cada motor de forma independiente).

La segunda forma utiliza bucles, por lo que es mejor abordarla si los estudiantes se sienten cómodos con esta noción (lo cual se verá en el segundo ejercicio).

– avance durante 3 segundos, coloque un bloque de movimiento, verifique los motores B y C e ingrese 3 segundos como duración.

– retroceder durante 3 segundos, igual que para el ejercicio anterior excepto que debes seleccionar la dirección “Hacia atrás”.

– activar los ángulos hacia la izquierda y luego hacia la derecha. Coloque el cursor "Directo" completamente hacia la derecha o completamente hacia la izquierda.

Ejercicio 2

En algoritmos y programación, un bucle es una estructura de control que permite repetir una serie de instrucciones siempre que una condición sea verdadera o no se respete (según el tipo de bucle utilizado). Hay varios tipos como por ejemplo While (condición) do. Un bucle también puede ser infinito, es decir que su bloque de instrucciones se repetirá indefinidamente (más concretamente: hasta que se detenga). manual  del programa).

El robot está equipado con varios sensores (en la guía proporcionada se proporciona una descripción más precisa de cada uno). Estos sensores permiten medir diferentes parámetros del entorno en el que opera el robot. Es posible utilizar estas medidas como condición para detener los bucles y esto es lo que nos interesará más adelante.

Por lo tanto, un bucle infinito nos permite hacer que el robot realice una acción (o una secuencia de acciones) sin ninguna condición de parada particular.

  1. Haz que tu robot realice una trayectoria ilimitada en forma de círculo
  2. Avanza y retrocede (solo una distancia corta) ilimitadamente
  3. Bucle con condición de parada

Un bucle se usa generalmente con una condición de detención, es decir, todas las instrucciones en el cuerpo del bucle solo se ejecutarán mientras la condición especificada sea verdadera (desde un punto de vista lógico). En pseudocódigo, un bucle se escribe de la siguiente manera:

Tanto que (condición) hacer

     instrucciones

terminar mientras

Luego se le pedirá que piense en los algoritmos de sus programas y los escriba en forma de pseudocódigo. El pseudocódigo es un idioma  casi natural, es decir, al escribir el algoritmo no es necesario pensar en la implementación (cómo traducirlo al lenguaje de programación).

En el caso de nuestro robot podemos poner como condiciones operaciones lógicas, un contador o sensores y esto es lo que veremos aquí. Por ejemplo, digamos que nuestro robot tiene un sensor de detección de ruido (en la realidad no es así) y queremos que avance hasta que detecte un ruido, un algoritmo en pseudocódigo sería:

Mientras (ruido no detectado)

      Avanzar()

terminar mientras

Cuando detecte el ruido dejará de repetir su bloque de instrucciones.

Para cada una de las siguientes acciones y utilizando un sensor independiente, escriba un pequeño algoritmo en pseudocódigo y luego prográmelo:

  1. Mueva el robot hacia adelante y luego deténgase a 20 cm de un obstáculo.
  2. Haga que el robot avance y luego se detenga cuando entre en contacto con un obstáculo,
  3. Haz que el robot avance y luego se detenga cuando vea un color en el suelo.

Bucle infinito

  1. Haz que tu robot realice una trayectoria ilimitada en forma de círculo 

Para hacer esto, debes usar dos bloques. motores  y colóquelos en un bucle “ilimitado”. Para realizar la trayectoria en círculo, un motor debe girar más rápido que el otro (juegue con el parámetro "Potencia"), como B a 75 y C a 40.

  1. Avanza y retrocede (solo una distancia corta) ilimitadamente

Se deben poner dos unidades motoras para avanzar (misma potencia, misma dirección, misma duración) en un bucle infinito, luego poner dos unidades motoras atrás para avanzar hacia atrás (se debe invertir el sentido con relación a la acción de avanzar).

Tenga en cuenta que para que los dos motores estén activos en paralelo, la duración debe ser en grados (por ejemplo, 500) o rotaciones y el primero de los dos bloques de motores (para cada acción) debe tener la opción "Esperar al final" desmarcada. .

tormentas mentales lego

Bucles con condiciones de parada.

  1. Mueva el robot hacia adelante y luego deténgase a 5 cm de un obstáculo,

Mientras (distancia() 5)

     hacer avanzar()

terminar mientras

Los bucles utilizados por el software de programación LEGO no son Mientras, es decir, la condición del bucle es la condición de salida bucle y no la condición de validez.

Por lo tanto, aquí el bucle debe tener el sensor ultrasónico como parámetro de “Control” y como condición “Hasta”. < 5 centímetros”. Este bucle debe contener dos bloques. motores para motores B y C de la misma potencia y el mismo sentido y cuya duración es “ilimitada”.

tormentas mentales lego

  1. Haga que el robot avance y luego se detenga cuando entre en contacto con un obstáculo,

Mientras (TouchSensor no presionado) haga

     Avanzar()

terminar mientras

El bucle debe contener dos bloques. motores  para motores B y C (misma potencia, mismo sentido, duración ilimitada) y tener como control uno de los sensores táctiles con la condición “Acción: presionado”.

tormentas mentales lego

Atención: esta versión es sencilla pero el robot sólo se detiene cuando entra en contacto con un único sensor. Sin embargo, es posible utilizar una ecuación lógica para poner en juego los dos sensores (el robot se detiene al contacto de uno de los dos sensores). Para hacer esto, debe usar dos bloques de “Sensor táctil” y construir la siguiente ecuación lógica (que ingresa como una condición en un bucle con “Lógica” como control):

mi = 1 + 2

tormentas mentales lego

  1. Haz que el robot avance y luego se detenga cuando vea un color en el suelo.

El color elegido realmente no importa, pero el negro es una opción práctica porque se puede medir con el sensor de color o brillo.

Mientras (color() /= negro) hacer

     Avanzar()

terminar mientras

El bucle debe contener dos bloques. motores  para motores B y C (misma potencia, misma dirección, duración ilimitada) y tienen como control el sensor de color en modo “Color” con la condición “Hasta el rango” y los cursores enmarcando en negro.

tormentas mentales lego

El sensor de color se puede utilizar en modo “Fotosensible” para este ejercicio si el color de parada es negro. Para hacer esto, en el modo "Fotosensible" establezca la condición "Hasta que < X" O  X es un límite superior de negro que se determinará mediante medición en el soporte utilizado como pista de prueba.

Ejercicio 3

Tendrás que programar tu robot para que cuente los colores. Debe poder avanzar a lo largo de un área compuesta por una sucesión de áreas coloreadas, aunque el final de esta área esté marcado por una banda negra. Por lo tanto, debe contar el número de veces que aparece una franja de color mientras avanza la pantalla. Al finalizar el curso, mostrará el número de zonas de color en la pantalla.

  1. Escriba un algoritmo correspondiente a este problema en pseudocódigo
  2. Implementa tu algoritmo en tu robot

El objetivo de este ejercicio es reutilizar lo visto hasta ahora (bucles, sensor) introduciendo al mismo tiempo la noción de variable (desde un punto de vista algorítmico y a nivel del software de programación del robot).

  1. Escriba un algoritmo correspondiente a este problema en pseudocódigo

ColorAnterior color() NbRojo 0

NbAmarillo 0

NbAzul 0

Mientras (ReadColor() =/    NEGRO) hacer

     Mientras (color() = ColorAnterior)

          Avanzar()

     terminar mientras

     Si (color() = ROJO) entonces NbRed = NbRed + 1

     Si (color() = AMARILLO) entonces NbAmarillo = NbAmarillo + 1

     Si (color() = AZUL) entonces NbBlue = NbBlue + 1

     Terminara si

     ColorAnterior color()

terminar mientras

color() es una función que devuelve el valor numérico del color leído por el sensor de color.

Este algoritmo funciona de la siguiente manera: el robot avanza mientras esté todavía en la misma zona de color y, en cuanto cambia de zona, incrementa la variable asociada a este color. Termina actualizando la variable PreviousColor para detectar el cambio de zona en el siguiente bucle. Todo está en un bucle de detección de negro que detendrá el robot tan pronto como lea negro.

  1. Implementa tu algoritmo en tu robot

Para programarlo primero debemos crear las variables que se utilizarán posteriormente (Color Anterior, Rojo, Azul, Amarillo); son de tipo digital y se inicializan desde el inicio del programa.

Luego colocamos un bucle principal con el control “Sensor de color” y la acción “Hasta el rango de negros”. Dentro de este bucle volvemos a colocar un bucle que contiene dos bloques motores para mover el robot hacia adelante (duración establecida en "Ilimitada"). El control de este bucle debe colocarse en “Lógica” con como entrada una operación de comparación entre la variable “Color Anterior” y el sensor de color:

tormenta mental lego

Luego de este bucle, colocamos tres bloques de interruptores (uno para cada color) en los que ejecutamos la operación de incrementar la variable de color asociada. Aquí por ejemplo está el rojo:

tormentas mentales lego

Luego, después de estos tres cambios, no nos olvidamos de actualizar la variable “Color anterior” con el sensor de color (como durante la inicialización).

Después del bucle  principal, mostramos el contenido de las variables de color en pantalla o con sonidos.

Ejercicio 4

El robot debe seguir un camino negro en el suelo, siendo el suelo blanco.

  1. Escriba un algoritmo correspondiente a este problema en pseudocódigo
  2. Implementa tu algoritmo en tu robot.

Pregunta adicional: ¿puede su programa seguir todo tipo de rutas?

  1. Escribe en pseudocódigo un algoritmo correspondiente a este problema.

Mientras (verdadero) lo hagas

     Mientras que (color() = NEGRO) hacer

          MayúsIzquierda()

     terminar mientras

     Mientras que (color() = BLANCO) hacer

          Desviarse a la derecha()

     terminar mientras

terminar mientras    

color() es una función que devuelve el valor numérico del color leído por el sensor de color.

DeviateLeft() y DeviateRight() son funciones que mueven el robot hacia adelante desviándose hacia la izquierda o hacia la derecha.

Un seguidor de línea en realidad no sigue la línea sino el borde de la línea (el límite entre el blanco y el negro). El algoritmo presentado aquí es muy simple. Dentro de un bucle infinito, colocamos dos bucles: uno para el negro y otro para el blanco. El bucle negro desvía al robot hacia la izquierda siempre que indique negro, y el bucle blanco desvía al robot hacia la derecha siempre que indique blanco. Así, el robot alterna movimientos hacia la izquierda y hacia la derecha.

Nota: este algoritmo corresponde a un “seguidor izquierdo”, es decir en el caso en que el blanco está a la izquierda del negro. Podemos crear un “seguidor correcto” invirtiendo la dirección de la desviación.

  1. Implementa tu algoritmo en tu robot

Para implementarlo en el robot, primero colocamos un bloque “loop” con “Forever” como control.

En este bloque colocamos luego otro bucle pero esta vez con el control “Sensor de color” en modo “Fotosensible” y con la acción “Hasta < 35” (35 es un valor del límite superior de brillo negro, este valor debe determinarse midiendo durante la sesión porque puede variar según la iluminación o la pista de prueba utilizada).

Dentro de este bucle, coloque dos bloques de “Motor” para cada uno de los dos motores, uno de los cuales tiene menor potencia que el otro (para desviarse hacia la izquierda, el motor C debe ir más lento que el B). Haga un bucle similar para el blanco con esta acción de tiempo colocada en "Hasta  > 35” y las potencias del motor invertidas.

La diferencia entre las respectivas potencias de los motores afectará tanto a la velocidad general del robot (el tiempo que tardará en dar un giro completo) como a su capacidad para seguir un camino más o menos retorcido. Para ello, no dudes en hacer varias pruebas con diferentes valores para encontrar un buen compromiso (los valores correctos son, por ejemplo, 75 y 10).

tormentas mentales lego

Pregunta adicional: ¿puede su programa seguir todo tipo de rutas?

Normalmente este programa no te permite seguir todo tipo de pistas. De hecho, tan pronto como la ruta se vuelve demasiado compleja, el robot ya no debería poder seguirla (a menos que uno de los dos motores esté casi parado, lo que la hará muy lenta). No puede seguir un giro interior o demasiado cerrado, ni un giro en ángulo recto. Para convencerse, no dude en realizarlo en los circuitos de bonificación.

Ejercicio 5

Al realizar determinadas tareas, su robot a menudo tiene que repetir varias veces acciones estándar, como girar 90° hacia la derecha o avanzar 10 cm. Para'aliviar  En tu programa es posible crear bloques personalizados que posteriormente se utilizan como los bloques predeterminados (de esta manera, en lugar de tener varios bloques que gestionan los cálculos de ángulos y la activación de los motores, solo usamos uno varias veces) . Este principio es similar a las funciones (o procedimientos) en algorítmica.

Recordemos que en algorítmica una función es una secuencia de instrucciones relativamente independiente del programa principal y que se repite varias veces. Esta secuencia de instrucciones luego se agrupa en un solo bloque de instrucciones que es la función.

Utilizando la guía de programación (y más concretamente la sección de creación de bloques), así como el apéndice sobre cálculos de distancia y rotación, cree los siguientes bloques personalizados:

  • Avanzar: mueve el robot hacia adelante según la distancia dada como entrada (esta distancia estará en centímetros),
  • Retroceder: mueve el robot hacia atrás según la distancia indicada en la entrada (esta distancia estará en centímetros),
  • TurnRight: gira el robot en un ángulo de entrada determinado hacia la derecha,
  • TurnLeft: gira el robot en un ángulo de entrada determinado hacia la izquierda,
  • RotateRight: gira el robot en un ángulo de entrada determinado hacia la derecha,
  • RotateLeft: gira el robot en un ángulo de entrada determinado hacia la izquierda

Ahora, usando los bloques que acaba de crear, cree un programa que permita a su robot realizar esta trayectoria:

tormentas mentales lego

Por lo tanto, debes utilizar la guía de programación así como el apéndice sobre distancias y rotaciones para crear los bloques e implementar las fórmulas utilizando los bloques de operaciones matemáticas.

– Avanzar: mueve el robot hacia adelante según la distancia dada como entrada (esta distancia estará en centímetros),

Por tanto, es necesario codificar la fórmula distancia*360/13,5 utilizando constantes para 360 y 13,5 y una variable en modo lectura para la distancia; luego proporcione el resultado como el valor de entrada de un bloque Mover establezca una duración en “Grados”. Para crear el bloque, simplemente seleccione todos estos bloques excepto el bloque variable para la distancia, luego vaya a Editar → Crear nuevo bloque Mi bloque :

tormentas mentales lego

  • Retroceder: mueve el robot hacia atrás según la distancia indicada en la entrada (esta distancia estará en centímetros),

Debes codificar la misma fórmula que para el bloque. Avanzar pero esta vez el bloque Mover debe configurarse para girar los motores en la otra dirección.

  • TurnRight: gira el robot en un ángulo de entrada determinado hacia la derecha,

Esta vez, es la fórmula ángulo*2pi*15.5/13.5 y ponemos el resultado en la entrada del motor C (el motor B debe estar desactivado).

tormentas mentales lego

  • TurnLeft: gira el robot en un ángulo de entrada determinado hacia la izquierda,

La fórmula sigue siendo la misma que antes, pero esta vez es el motor B el que se activa y el motor C el que se desactiva.

  • RotateRight: gira el robot en un ángulo de entrada determinado hacia la derecha,

La fórmula es casi la misma que antes excepto que eliminamos el coeficiente 2 (el círculo descrito es la mitad de grande). Además, esta vez el resultado del cálculo se proporciona como entrada a los motores B y C; el motor C avanza y el motor B retrocede.

tormentas mentales lego

  • RotateLeft: gira el robot en un ángulo de entrada determinado hacia la izquierda. Misma fórmula que para el bloque anterior excepto que se invierten las direcciones de los motores.

Los archivos deben colocarse en la carpeta Bloques/Mis bloques de la carpeta del perfil: Forward.rbt, Backward.rbt, RotateLeft.rbt, RotateRight.rbt, PivoterLeft.rbt, PivoterDroite.rbt

La trayectoria que luego realizará el robot es bastante sencilla con los bloques. Por tanto, es necesario colocar los bloques sucesivamente. Avanzar, Gira a la derecha, Avanzar, Girar a la izquierda, Avanzar, Gira a la derecha, Avanzar, BalancearseDerecha, Avanzar, Gira a la derecha con distancias y ángulos asociados. Sin embargo, tenga cuidado de tomar el valor del ángulo correcto para los pivotes (debe tomar el valor del ángulo adicional).

tormentas mentales lego

Ejercicio 6

Usando un gráfico de estado (autómata de estados finitos), proporcione al programa las siguientes acciones.

  1. Deténgase en el lugar correcto

El estado inicial considera el robot en blanco, esto le permite iniciar el robot desde cualquier lugar (es decir, blanco o negro). Cada vez que cambie de color (blanco o negro), pasará al siguiente estado. Cada estado tiene la acción asociada de avanzar excepto el estado que sigue a la tercera transición. negro (que corresponde por tanto a la tercera vez que el robot encuentra una zona negra) donde el robot se detiene.

tormentas mentales lego

 2. Detección de obstáculos, el robot se mueve hacia adelante y luego retrocede si choca contra un obstáculo.

tormentas mentales lego

3. El robot avanza recto y luego gira a la derecha (o a la izquierda) si encuentra un obstáculo a la izquierda (o a la derecha) o gira si el obstáculo está delante.

tormentas mentales lego

1.

Para programar este gráfico de estado, primero debes crear una variable de tipo numérico estado que contendrá el estado actual. Se inicializará a 0 al inicio del programa. Agregamos dentro de un bucle para que la condición sea hasta estado = 5, un primer cambio en el valor de la variable estado lo que permitirá cambiar el valor del estado actual según las acciones detectadas (lectura blanca o negra) seguido de un segundo cambio también sobre el valor de la variable estado las cuales determinarán las acciones a realizar en cada estado:

tormentas mentales lego

2.

Debes proceder de la misma forma que para el programa anterior: dos interruptores; uno para transiciones y otro para acciones. Sin embargo, en el archivo proporcionado como corrección agrupamos estos dos interruptores en uno para mostrar que esto también era posible. Cambiando la variable estado por lo tanto, se realiza al final del ciclo de acción. De esta manera es más compacto pero un poco menos claro y organizado pero sigue siendo posible y funcional.

tormentas mentales lego

3.

Por tanto utilizamos la misma estructura de programa que antes pero esta vez diferenciando claramente el contacto de la izquierda o de la derecha.

tormentas mentales lego

Ejercicio 7

Intentaremos programar el robot para que busque un objeto en un espacio delimitado por una línea negra y lo saque de este espacio. Por lo tanto, su programa debe incluir dos fases distintas: una primera de búsqueda del objeto y una segunda de eliminación del objeto de este espacio (eliminará el objeto empujándolo hacia afuera).

 Su programa debe ser  inteligente  : no es necesario programar el robot para que vaya directamente al objeto (este último puede estar ubicado en cualquier lugar del espacio). Además, el robot tendrá que empezar en una posición muy distinta. A continuación se muestra un ejemplo de colocación de objetos:

  1. Describe un algoritmo simple para realizar esta tarea.
  2. Cree un programa que realice estas acciones basándose en el algoritmo.

tormentas mentales lego

1.

tormentas mentales lego

Primero, el robot avanza hasta que encuentra oscuridad o toca un objeto. Si encuentra negro, retrocede y luego gira en un ángulo aleatorio (entre 0 y 180 grados) y luego vuelve a salir. Si entra en contacto con un objeto, continúa avanzando hasta encontrar el negro; entonces habrá sacado el objeto del marco.

2.

Para programar esto, comenzamos colocando un bucle con la condición lógica de que uno de los sensores táctiles esté presionado (así que use los bloques para estos sensores con un bloque lógico O ). Luego colocamos dentro de este bucle un bucle con la condición lógica Negro O (Touch1 O Touch2), paramos los motores a la salida de este bucle para que el robot no se salga del cuadro si el bucle se detuvo porque vio negro:

tormentas mentales lego

Luego colocamos un interruptor para ver si el bucle se interrumpió porque el robot vio negro. En este caso colocamos un bloque. para retroceder – creado en el ejercicio anterior – seguido de un bloque Aleatorio que toma un número entre 0 y 180 y lo da como entrada a un bloque Girar a la izquierda.

tormentas mentales lego

Después del bucle principal, colocamos un bucle haciendo que el robot avance hasta ver negro.

Ejercicio 8

Como en el ejercicio anterior programaremos nuestro robot para que busque un objeto en un espacio. Excepto que en esta versión usaremos el sensor ultrasónico. Se trata por tanto de programar el robot para que primero busque en qué dirección se encuentra el objeto, luego se acerque a él y se detenga a 5 cm de distancia.

  1. Escriba un algoritmo correspondiente a este problema en pseudocódigo
  2. Implementa tu algoritmo en tu robot

1.

tormentas mentales lego

Aquí, en lugar de buscar el objeto a ciegas, el robot buscará en qué dirección se encuentra. Pour cela, le capteur va balayer tout l'espace face au robot (le capteur fera une rotation sur un angle de 180˚) et chercher la plus courte distance à un obstacle (sur le même principe qu'un algorithme de recherche de minimum dans un tablero) ; Memorizará el ángulo para deducir la dirección en la que irá el robot.

2.

Primero giramos el motor A 90˚ hacia la izquierda para orientar el sensor ultrasónico, luego colocamos un bloque de sensor justo después Rotación para restablecer el valor devuelto por este último. Luego almacenamos en una variable. distanciaMin el valor que devuelve el sensor de ultrasonido e inicializamos otra variable esquina a 0. Y finalmente, iniciamos una rotación lenta de A hacia la derecha:

tormentas mentales lego

Colocamos ahora un bucle en el que realizaremos las comparaciones para encontrar el ángulo de la distancia mínima. Este bucle controla el sensor de rotación del motor A y como condición hasta > 180˚. Al comienzo del ciclo, almacenamos en Numero 1 la distancia medida por el sensor ultrasónico y en esquina el valor devuelto por el sensor de rotación de A. Luego se realizan comparaciones y posibles asignaciones con estas variables.

tormentas mentales lego

Finalmente, después del bucle, el motor A se detiene y luego se gira 90˚ hacia la izquierda para reenfocar el sensor ultrasónico. Luego rotamos el robot según el valor de esquina luego lo avanzamos hasta 5 cm del objeto:

tormentas mentales lego

OTRO ENFOQUE:

Giramos lentamente el sensor ultrasónico hasta que hay un obstáculo y en ese momento hacemos que el robot se mueva hacia él. Por lo tanto, este enfoque supone que el espacio delante del robot (por lo tanto, en una distancia determinada, por ejemplo 40 cm) solo contiene el objeto deseado, por lo que sigue siendo menos bueno que el anterior pero más sencillo de entender, por lo que se presenta aquí:

tormentas mentales lego

Por tanto, el programa se parece mucho a la versión inicial, excepto que la rotación del motor A se detiene en cuanto detecta un objeto.

tormentas mentales lego

Ejercicio 9

Ahora programaremos el robot para que sea capaz de escapar de un laberinto. sencillo. Ojo, encontrar un camino para cruzar un laberinto es un problema difícil desde el punto de vista informático (hablamos de un problema NP-completo ), es por esto que todos los laberintos propuestos son simples porque no se pide un algoritmo eficiente para todos los laberintos.

A- Laberinto básico

El primer tipo de laberinto se compone únicamente de paredes altas (25 cm). Aquí está su plan:

tormentas mentales lego

Por tanto, tendrás que programar tu robot para que lo atraviese. Para hacer esto, necesitará usar el sensor ultrasónico para determinar qué camino tomar en cada intersección.

  1. Escriba en pseudocódigo un algoritmo ingenuo que permita al robot atravesar dicho laberinto
  2. Implementa tu algoritmo en tu robot

B- Laberinto avanzado

Ahora modificamos el laberinto reemplazando una pared alta por un obstáculo bajo (10 cm).

¿Cómo puedo hacer que el robot pase siempre por el laberinto?

  1. Modifique el algoritmo anterior para tener en cuenta este cambio.
  2. Implemente su algoritmo modificado en su robot

C- Estancamiento

Ahora tomaremos este diseño de laberinto:

tormentas mentales lego

Como puedes ver, este laberinto tiene un callejón sin salida. ¿Qué hacer si tu robot acaba en él?

  1. Modifique el algoritmo anterior para tener en cuenta los puntos muertos
  2. Implemente su algoritmo modificado en su robot
  3. Pregunta adicional: ¿podrá atravesar todos los laberintos?

TIENE-

Este primer tipo de laberinto sólo tiene un camino que conduce directamente a la salida. El objetivo es comprender el comportamiento del robot dentro de este laberinto; es decir avanzar hasta una pared y luego buscar hacia dónde girar. 

Para saber en qué dirección girar, puedes tener varias aproximaciones, como mirar arbitrariamente hacia la izquierda para ver si hay algún obstáculo y, si es necesario, girar a la izquierda si no a la derecha. En el siguiente algoritmo (y por tanto el programa propuesto), en cada intersección el robot gira hacia el lado donde el obstáculo está más alejado. Aquí está el algoritmo:

tormentas mentales lego

El robot avanza hasta 15 cm desde la pared y luego se detiene. Luego mide la distancia que lo separa de la pared de la izquierda y luego de la pared de la derecha. luego gira hacia el lado donde esta distancia es mayor y luego comienza a avanzar nuevamente. Se detiene tan pronto como ve rojo.

Empezamos colocando bloques. Variable en la moda Escribir para inicializar variables distanciaIzquierda y distanciaDerecha a 0. Luego, colocamos un bucle con el sensor de color como control y la condición de parada Todo el camino a la playa roja (Este bucle finalizará el programa cuando el robot esté al final del laberinto).

Luego colocamos un bucle para mover el robot hacia un obstáculo. Por lo tanto, debe contener dos bloques. Motor para B y C con una duración as Ilimitado

Atención, el robot debe detenerse (y por tanto salir de este bucle) a 15 cm de un obstáculo o cuando vea rojo; Por lo tanto, el control no debe ser el sensor ultrasónico sino una ecuación lógica construida con dos bloques de sensores (sensor ultrasónico configurado en distancia menos de 15 cm y sensor de color configurado en en la playa roja) :

tormentas mentales lego

El resto del programa es el conjunto de instrucciones correspondientes a elegir en qué dirección girará el robot. Esta parte se lleva a cabo dentro de un interruptor con el sensor de color como control y configurado en Fuera de la playa roja ; de hecho, esto permite no buscar obstáculos si el robot se ha detenido. 

Por lo tanto, el primer paso consiste en girar el motor A hacia la izquierda y luego registrar el valor devuelto por el sensor ultrasónico en distanciaIzquierda, luego gire el motor A hacia la derecha y registre el valor devuelto por el sensor ultrasónico en distanciaDerecha. Luego comparamos las dos variables y en un cambio lógica que toma como entrada el resultado de la comparación, utilizamos los bloques Gira a la derecha Dónde Girar a la izquierda creado en un ejercicio anterior (con 90 como valor de ángulo de entrada) para girar hacia el lado correcto:

tormentas mentales lego

B-

Ahora modificamos el laberinto reemplazando una pared alta por un obstáculo bajo (10 cm).

Para tener en cuenta este cambio hay que añadir el uso del sensor táctil. Por tanto haremos que el robot se detenga si choca con un obstáculo que no podría haber visto con el sensor ultrasónico.

tormentas mentales lego

El algoritmo es casi el mismo que el de la pregunta anterior. Solo ha cambiado la condición del bucle para mover el robot hacia adelante: el robot deja de avanzar si está a 15 cm de un obstáculo O si toca un obstáculo. Después de este bucle, añadimos una condición para comprobar si es el segundo caso (sensores táctiles) el que hizo que el robot se detuviera, y si es así, lo hacemos retroceder 15 cm. El resto del algoritmo no cambia.

Entonces todo lo que tienes que hacer es tomar el programa anterior y hacer algunas modificaciones y adiciones. Es necesario modificar elecuación lógica Control de bucle que mueve el robot hacia un obstáculo. El robot ahora debe detenerse si está a 15 cm de un obstáculo o si ve rojo o si entra en contacto con un obstáculo. Por tanto debemos sumar los bloques correspondientes a los sensores táctiles 1 y 2 con un bloque lógico (tipo O ) :

tormentas mentales lego

Tras este bucle, colocamos un interruptor para comprobar si nos hemos salido del bucle gracias a los sensores táctiles y retrocedemos el robot 15 cm si es necesario (para ello podemos utilizar el bloque creado para retroceder):

tormentas mentales lego

VS-

El robot se encuentra en un callejón sin salida si, cuando está parado (por lo tanto bloqueado por una pared frente a él), las paredes de la izquierda y de la derecha están demasiado cerca de él (la distancia medida a la izquierda es menor que una cierta distancia; aquí eligió 20 cm –, lo mismo para la distancia medida a la derecha). Por tanto, debemos modificar la condición para decidir de qué lado girar:

tormentas mentales lego

Por tanto, el algoritmo es muy similar al anterior. Agregamos la condición Si (distanciaIzquierda < 20 Y distanciaDerecha < 20) lo que permite detectar un callejón sin salida y por tanto hace que el robot gire si es así. De lo contrario, la decisión sobre qué lado girar sigue siendo la misma.

Para detectar callejones sin salida, tomamos el programa de laberinto avanzado y colocamos los bloques utilizados para determinar en qué dirección girará el robot en un interruptor que tiene un valor lógico como control: el valor será el resultado de la ecuación distanciaIzquierda < 20 Y distanciaDerecha <20 :

tormentas mentales lego