Para utilizarlos usaremos la clase Behavior, que será un array en el que estarán los distintos comportamientos.
Los comportamientos funcionan con tres métodos:
- boolean takeControl(); Devolverá True si cumple la condición para que el comportamiento tome el control del robot.
- void action(); Es el código del comportamiento
- void supress(); Es lo último que hará el comportamiento cuando tenga que dejar el control del robot a otro.
En el primer apartado Emilio debe de chocar contra un obstáculo y posteriormente esquivarlo.
Para la realización de toda la práctica hemos utilizado distintos comportamientos:
- Avanzar: Toma el control siempre que acaban los otros comportamientos y únicamente va hacia delante y cuando termina se para.
- Esquivar: Tomará el control cuando el sensor de contacto se active por chocar contra un obstáculo, el cuál esquivará por un lado haciendo una curva.
- Sensor: Toma el control cuando el sensor de ultrasonidos detecta un obstáculo a menos de 30 cm. El motor del sensor empieza a actuar y toma medidas para no chocar contra el obstáculo. Para ello calcula un vector que será su trayectoria. Para calcular el vector tomaremos medidas haciendo un barrido gracias al motor en el que está puesto el sensor, cogeremos la distancia menor y el ángulo que forma con esta. Pasaremos estas medidas a cartesianas. Calcularemos las coordenadas de donde tendrá que ir el robot, y posteriormente las pasaremos a polares, obteniendo de esta manera la distancia y el ángulo que debe recorrer el robot.
- OrientarLuz: Toma el control del robot cuando algún sensor de luz detecta un valor mayor al del ambiente. Dependiendo del sensor que lo detecte girará hacia un lado u otro.
Para el primer apartado hemos utilizado los comportamientos de Avanzar y Esquivar, en este vídeo se muestra el resultado:
En el segundo apartado Emilio deberá de utilizar los comportamientos de Avanzar y Sensor, con lo que tendrá que esquivar un obstáculo cuando lo detecte y calcular su dirección, aquí el video:
Para el tercer apartado usaremos los sensores de luz que hemos puesto a ambos lados de Emilio. Se encargará de seguir la luz. Hacemos uso de la clase RCXLightSensor. Los comportamientos que utilizará serán el de Avanzar y OrientarLuz.
Por ultimo, combinamos todas las armas que montamos al principio para que Emilio siga la luz evitando obstaculos.
En la primera parte utilizaremos Avanzar, OrientarLuz y Esquivar, con lo que será una mezcla del apartado 1 y 3.
En la primera parte utilizaremos Avanzar, OrientarLuz y Esquivar, con lo que será una mezcla del apartado 1 y 3.
En la segunda parte utilizará Avanzar, OrientarLuz y Sensor, conjuntando el apartado 2 y 3, como se muestra en el video.
Lo más dificil de esta práctica ha sido el apartado 2, ya que en un principio, debido a nuestra carencia de física, no sabiamos muy bien como obtener todos los datos que necesitabamos