jueves, 24 de febrero de 2011

Practica 2 - Obteniendo información sensorial

Aquí estamos de nuevo con un nueva práctica. Para esta práctica hemos incorporado al robot todos lo sensores, aunque el de sensor de luz simplemente lo utilizamos para obtener información en el ejercicio 1.

Obteniendo información:


En este ejercicio nos resulto sencillo obtener la información de los sensores,ya que disponíamos de todos los métodos, sin embargo para obtener el nombre y la memoria tuvimos que buscar bastante en la API de Lejos. Para el nombre: NXTCommDevice.getName(), para la batería nos costo un poco entender el método ya que primero había que llamar al método estatico getRuntime() que es una instancia de sí mismo.


Control del robot por sonido:

Para este ejercicio el mayor problema fue la calibración previa del sensor de sonido. En un principio lo hicimos realizando 100 medidas y quedándonos con el valor más alto, para estimar el valor de referencia del sonido. Pero este valor nos salía siempre demasiado alto incluso en habitaciones sin apenas sonido. Así decidimos realizar una media con estos valores y sumarle un valor fijo. Por lo demás el ejercicio no nos dio muchos problemas, salvo porque tuvimos ponerle un tiempo de espera tras coger la medida del sonido, para que no lo cogiera dos veces.



Bump & Go! usando sensores de contacto:

El único problema que tuvimos fue entender el método Math.random(), en el que teníamos que fijar el valor máximo, y el valor desde el que queríamos que empezaran los números, pusimos un margen de [45º,315º], es decir, Math.random()*316+45.



Bump & Go! usando sensores de ultrasonido:

En este caso, superando el obstáculo anterior del método Math.random(), tuvimos problemas con la primera medida que nos daba el sensor de ultrasonido, que siempre era 255. Pensamos que esto era debido a que el sensor al principio tardaba en reaccionar, miramos la API y con el método getMode()  y comprobamos que al principio nos daba -1. Lo solucionamos poniendo un while que actúa como barrera hasta que el modo del sensor es distinto de -1.



Comportamiento sigue-pared para salir de un laberinto:


En primer lugar, tuvimos que añadirle al robot base giratoria para poder mover la cabeza del robot. Esto era necesario para poder poner el sensor de ultrasonido a unos 45º para que pudiera localizar las esquinas con antelación y así poder girar antes de chocarse. Planteamos el ejercicio, poniendo un rango de error al robot y que cuando superara este error girara a la izquierda o a la derecha según la medición obtenida. Para ello pensamos en el método forward() para que el robot avanzara y el método steer(float turnRate, float angle)  poniendo el valor de turnRate a 100 para que la rueda interior se pare y la exterior gire completamente, este valor lo pusimos en negativo para que girase a la izquierda y positivo para la derecha. El valor de angle lo fijamos en 2 para que realizase pequeños giros. Pero con este método y aun no tenemos explicación tras realizar un giro el código se bloqueaba y o no ejecutaba el método forward o se bloqueaba antes. Esto lo solucionamos cambiando este método por el mismo pero tan sólo con el parámetro turnRate, de esta forma el código no se bloqueaba pero el robot giraba muy bruscamente, así que antes de realizar un giro redujimos la velocidad del motor.



Calibración del sensor de ultrasonidos:







Calibración del sensor de ultrasonidos

No hay comentarios:

Publicar un comentario