miércoles, 23 de abril de 2008

Calibración de giro

Dados los problemas que tuvimos en el giro del robot, decidimos caracterizar el error producido por el giro de los motores para realizar la consecuente corrección en el movimiento para posteriores programas.

Tomamos varias medidas en diferentes ángulos.

- Ángulo de 90º




- Ángulo de 180º




- Ángulo de 270º



- Ángulo de 360º




- Ángulo de -90º




- Ángulo de -180º




- Ángulo de -270º




- Ángulo de -360º




Hemos realizado la toma de medidas cuatro veces para cada ángulo, teniendo en cuenta que los positivos son giros en sentido a las agujas del reloj y los negativos son en sentido inverso a las agujas del reloj.

Grados de giroMediaDesviación típica
90º1.8º0.03
180º3.8º0.62
270º7,4º1.1
360º9,1º1.81

Navegación con fuerzas virtuales

La idea en este caso es que dadas n medidas tomadas por el radar veremos si hay obstáculo o no, en caso de que lo haya este generara una fuerza virtual que será un vector con origen el obstaculo y con la direccion de la recta que une el obstaculo con el robot. Su modulo se calcula como inversamente proporcional a la distancia entre el robot y el obstaculo.

Con esto tenemos un vector resultante "negativo" es decir que apunta hacia atras segun la perspectiva de nuestro robot, para evitar esto le sumamos un vector en direccion al destino que queremos alcanzar. Si seguimos este vector con el robot el comportamiento sera tal que vamos hacia nuestro destino evitando los obstaculos que nos encontramos en el camino.


En la figura se ven en rojo los obstáculos, en verde el vector que apunta al destino actual, el vector rojo es el resultante de sumar las fuerzas repulsivas de los obstáculos y el vector amarillo es el resultante de la suma de los últimos dos, el robot seguiría finalmente la dirección en la que apunta el vector amarillo.

Una consideración que hay que tener es que mientras que las mediciones que obtenemos con el radar los vectores resultantes se obtienen en cartesianas, una vez obtenidos nuestros vectores tenemos que darle a los motores angulo y desplazamiento, es decir coordenadas polares de nuevo.

Para pasar de cartesianas a polares utilizamos:




Esto nos devuelve angulos en el rango , por lo que para convertirlos a ángulos de motor hay que restarle 90 grados.



El Código del Radar

El Código del Navegador

sábado, 19 de abril de 2008

Practica 2 (El Radar)

Enunciado

En esta práctica haremos un radar usando el ultrasonido, la idea es conseguir que el robot obtenga un mapa del entorno de modo que su información del entorno aumente y le permita navegar de forma autónoma esquivando los obstáculos por ejemplo.

(1) Montaje del robot con el ultrasonido sobre un motor para que sea capaz de moverse, hemos conseguido poner el ultrasonido mirando hacia adelante y hemos cambiado el diseño del robot para que sea mas estable.




(2) Creación del radar, el ultrasonido esta sobre un motor y gira con este mientras toma medidas de la distancia a la que estan los obstaculos. Tambien hay que dibujar en pantalla alguna representacion de lo anterior.

Como la información que nos devuelve el radar es la distancia del objeto y el ángulo en que se tomo la medida tenemos que convertir estas coordenadas polares en cartesianas para pintarlas:




Además hay que trasladar estas coordenadas a coordenadas de pantalla y normalizarlas para que se ajusten al tamaño de la pantalla.

(3) Navegación usando el radar

Dado el vector de distancias buscamos la medida mas alta, y seguimos su dirección. Esto nos garantiza que no iremos a parar contra un obstaculo cercano




El Código del Radar


El Código del Navegador

martes, 1 de abril de 2008

Práctica 1



Enunciado

En esta práctica tomamos contacto con el robot, la idea es imprimir en pantalla ciertos valores obtenidos de los sensores o del propio robot que son:

  1. Nombre del robot, le hemos llamado "Fermín"

  2. Valor del sensor de ultrasonidos en mm. hay que tener en cuenta que el sensor de ultrasonidos devuelve el valor en cm así que hay que multiplicarlo por 10.

  3. Valor del sensor de luz, al usar el metodo readNormalizedValue el sensor nos devuelve un valor entre 0 y 1023 correspondiente a la entrada en bruto del sensor, al llamar a readValue el sensor nos devuelve una entrada en porcentaje entre el valor mínimo y máximo usados al calibrar.

  4. Tensión de la batería expresada en milivoltios.

  5. Memoria libre expresada en bytes, para encontrar esto tenemos que buscar en el api de LejOS hasta encontrarnos con lo siguiente

    Runtime.getRuntime().freeMemory()