Introducción a la Robótica
(práctica 3 - Radar)

Página de la documentación de la práctica de Introducción a la robótica

Enlaces

Inicio
Configuración entorno de Trabajo
Práctica 0 (Hello World)
Práctica 1 (Bump & Go!)

Práctica 2 (Sigue lineas)
Práctica 3 (Radar)

ENUNCIADO

(Descargar enunciado)

En esta práctica, se deberá de modificar el diseño del robot para que el sensor de ultrasonidos pueda abarcar un rango de 180º para ir haciendo barridos, así simular el mecanismo de un radar y detectar los posibles objetos que hay en su entorno.

Una vez tengamos la información del radar, el robot deberá navegar sin chocar con ningún objeto, huyendo de los obstáculos.

SOLUCIÓN

La navegación que va a seguir el robot, es la navegación reactiva, utilizando vectores de fuerza.

Esta navegación está compuesto por 4 pasos:

  1. Realizar un barrido con el sensor de ultrasonidos, para averiguar los obstáculos que tenemos en frente: Para ello, giramos el motor del radar, el ángulo de cada medida, obtenemos la distancia y la introducimos en un array.

  2. Calcular la Fuerza repulsiva: Con el array de distancias, para cada valor, se averigua la fuerza repulsiva de cada medida, el módulo de la fuerza repulsiva de cada valor, será el máximo (Distancia que hemos considerado como 35 mm) menos la distancia, así si tenemos valores grandes (no hay obstáculo), el módulo será pequeño, mientras que si el valor es pequeño (hay un obstáculo) ,el módulo será grande. El ángulo, será la posición * (anguloCadaMedida) + 180.

    Se suman todas las fuerzas repulsivas calculadas, dando la fuerza repulsiva total.

  3. Calcular la Fuerza resultante, que será la suma de la Fuerza repulsiva con la Fuerza atractiva, esta fuerza atractiva tendrá como módulo, el máximo que puede detectar el sensor de ultrasonidos (35 mm) y como ángulo de 90º, para que siga recto. Tras varias pruebas, hemos visto que si los obstáculos están muy cerca, el modulo de la fuerza repulsiva es exageradamente grande, por lo que el valor de la fuerza atractiva casi era inapreciable, por lo

  4. Mover el robot según la fuerza resultante: Primero tendremos que averiguar en qué cuadrante está la fuerza total, para calcular el movimiento de las ruedas.
    1er Cuadrante: Tendremos que girar a la derecha, por lo que la velocidad del motor de la izquierda tiene que ser mayor.
    2º Cuadrante: Tendremos que girar a la izquierda, por lo que la velocidad del motor de la derecha tiene que ser mayor.
    3er Cuadrante: Nos tenemos que parar y girar a la izquierda, para ello la velocidad del motor de la izquierda es 0 y nos movemos con el motor de la derecha.
    4º Cuadrante: Nos tenemos que parar y girar a la derecha, para ello la velocidad del motor de la derecha es 0 y nos movemos con el motor de la izquierda.

Para poder implementar todo esto, hemos creado un objeto que se llama Vector que contiene el módulo y el ángulo. Otro objeto que es Radar que realiza las funciones del Radar y mueve al robot según un vector.

Como primera fase, tuvimos que implementar el método "newScan()" que iba haciendo barridos y mostrando por pantalla lo detectado:

Según se ve en el vídeo, la fase se ha conseguido con éxito, recogiendo bien los valores de las distancias y metiendolos en el array

La segunda fase, fue hacer los calculos de los vectores y mover al robot. Al realizar esta fase, cambiamos todo el diseño del robot para que el radar sea más estable.

Para calcular la fueza repulsiva, hemos implementado el metodo "radar.calculaVFF" que devuelve la fuerza repulsiva y para mover el robot "radar.mueveRobot()".

Hemos comprobado, que los calculos de la fuerza repulsiva y la fuerza atractiva son correctos, también los valores que se dan para mover las ruedas, pero tenemos un fallo de diseño en el robot, los problemas que nos encontramos son estos:

  1. El radar, cuando gira a la derecha, gira demasiado, esto es porque el sistema de engranajes no es muy consistente. Lo hemos intentado solventar haciendo que cuando gire a la derecha, no gire tanto como lo hace a la izquierda.
  2. Cuando se dá el valor de la velocidad a las ruedas para que giren, van a trompicones, sin seguir una velocidad constante, no hemos conseguido arreglar este problema.
  3. Como cada barrido tarda un tiempo elevado en realizarse, al robot no le da tiempo a reaccionar ante los obstáculos.

CÓDIGO FUENTE

Vector.java
Radar.java
testRadar.java