miércoles, 24 de noviembre de 2010

Práctica 3

No tenemos un buen recuerdo en nuestro paso por esta práctica. Decidimos utilizar la clase Behavior para programar los diferentes comportamientos de HAL 9000.
El caso es que cuando metíamos nuestro código en java en la CPU, el robot no realizaba los objetivos que queríamos que hiciera.

  • Comportamiento de evitación de obstáculos usando sensores de contacto: en este caso, el robot tenía que avanzar todo recto hasta que encuentre un obstáculo. En ese momento utilizamos otro comportamiento HitObject, en el que retrocedía y giraba un angulo con el método rotate para esquivarlo. En la práctica, el robot cuando chocaba, retrocedía y giraba. Queríamos que cuando girase detectase mientras si se choca con otro objeto también ejecute el comportamiento HitObject, pero no lo hicimos por falta de tiempo. 
  • Comportamiento de evitación de obstáculos usando sensores de ultrasonidos: El robot tenía que hacer lo mismo que la práctica anterior pero usando el sensor de ultrasonidos del nxt en vez del de contacto. Para ello además utilizamos vectores para posicionar el objetivo y el obstáculo para poder esquivarlo y llegar a un punto determinado. En la práctica,  el robot no realizaba lo que queríamos. Resulta que el robot tras detectar el obstáculo por el sensor de ultrasonidos, realizaba comportamientos extraños como darse la vuelta (aunque el objetivo estaba delante).
  • Comportamiento ir hacia la luz: El robot debía seguir la luz de una linterna y si desviaba la luz el robot tenía que seguirla. En la práctica, no realizaba este comportamiento, iba hacia delante pasará lo que pasará. El problema es que el estado del robot se quedaba dentro de un búcle y no salia de él aunque la diferencia de luminosidad con respecto a los dos sensores (derecho y izquierdo) cambiará. 
  • Comportamiento ir hacia la luz evitando obstáculos: como no pudimos realizar el anterior hito, pues tampoco se pudimos hacer este. 

martes, 9 de noviembre de 2010

Práctica 2

En esta práctica, utilizamos los sensores que vienen incluidos en legos nxt mindstorm. Los sensores que utilizamos son: el sensor de sonido o micrófono, el de ultrasonidos, el sensor de luz y el de contacto.
Tras conocer todos estos sensores y probar unos cuantos programas de prueba con cada uno, empezamos a hacer la práctica.

  •  En Obtener información, utilizamos los sensores de ultrasonidos y el de luz. En el programa debía especificar el nombre del robot, la distancia media en mm por el sensor de ultrasonidos (que nos daba 255 cm, ya que nunca le daba tiempo a recibir un eco), la luminosidad captada por el sensor de luz ( tanto el valor sin procesar como el porcentaje entre dos valores elegidos como máximo y mínimo), la duración de la batería en mv y la memoria libre en la CPU. En esta práctica no tuvimos mucha complicación ya que utilizamos el metodo LCD.DrawString para imprimir los datos. El problema más llamativo fue el de imprimir la memoria libre. Tras consultar en la API de lejos y un ejemplo en la subdirectorio samples de lejos_nxt, hallamos la forma de hacerlo. 

    
  • En Control de robot con sonido, utilizamos el sensor de sonido o micrófono para hacer que el robot ande mientras no le des una palmada. Tras dar la palmada o que suba el nivel de ruido por encima de unos decibelios, el robot se para. Para que se vuelva a mover es necesario otra palmada. Realiza esto cíclicamente, ya que utilizamos un bucle while. En esta práctica no tuvimos muchos problemas para que funcionase. Medimos el nivel de ruido que detecta el micrófono al dar una palmada y pusimos las condiciones en el bucle. 




  • En Bump & Go! usando sensores de contacto, utilizamos el sensor de contacto situado en la parte de atrás del robot, para que el robot vaya hacia atrás hasta que encuentre un obstáculo. Cuando lo detecta, se mueve unos cm hacia delante y gira un ángulo aleatorio mediante la función Random().



  • En Bump & Go! usando sensores de ultrasonido, el robot se mueve hacia delante hasta que los ecos que le llegan al sensor de ultrasonido al revotar en un obstáculo, le indican que se encuentra a una distancia de 20 cm o menos. En ese momento con navigator.backward() vamos hacia atrás unos cm y giramos un ángulo aleatorio como en el ejercicio anterior.