¿Qué hay de nuevo?
Hoy es turno de la realización de la practica 3. En este caso vamos a usar programación de comportamientos (behavior). Se trata de definir un mecanismo para ver que comportamiento ha de ser ejecutado en cada momento. Destacar que no es obligatorio su uso, pero nosotros para una mayor comodidad y simplicidad nos decantamos por usarlos. Para organizar los distintos comportamientos usamos una instancia de la clase Arbitrator. Dicha clase se trata de un array de comportamientos cuyo orden es importante ya que el mas prioritario es el que tiene el indice mas elevado del array, es decir, el de la derecha.
Cada clase behavior implementa tres método:
- takeControl, devuelve un boolean. True si se cumple la condición para el comportamiento entre en acción.
- suppress, es lo último que ejecutará el comportamiento.
- action, se desarrollará la actividad del comportamiento.
Una vez entendido el manejo de la clase behavior pasamos a montar los distintos montajes que tenia bracitos para solucionar los apartados propuestos en el guión de la práctica. Mostramos unas imagenes de los diferentes montajes.
Bracitos + 2 sensores de contacto Bracitos + sensor de ultrasonidos
Bracitos + 2 sensores de luz Bracitos + luz + contacto
Bracitos + 2 sensores de contacto Bracitos + sensor de ultrasonidos
Bracitos + 2 sensores de luz Bracitos + luz + contacto
Bracitos + 2 sensores de luz + sensor ultrasonidos
- Comportamiento de evitación de obstáculos usando sensores de contacto
Equipamos a nuestro robot de dos sensores de contacto. Cuando uno de estos sensores sea presionado, se activará el comportamiento Esquivar, por lo que el robot deberá esquivar el obstáculo (una lata de cocacola) rodeándolo. La forma de rodearlo sera retrocediendo unos centímetros y realizar un arco adecuado, terminando exactamente en la posición inicial. Para efectuar el arco usamos "steer". Tras distintas pruebas con determinados números de grados diferentes logramos conseguir el ángulo exacto para que Bracitos bordee el obstáculo de forma correcta. Adjuntamos un video demostración para comprobar el correcto funcionamiento.
- Comportamiento de evitación de obstáculos usando el sensor de ultrasonidos.
En este caso equipamos a Bracitos de un sensor de ultrasonidos orientado hacia delante y montado encima de un motor. Para montar esta parte nos las tuvimos que ingeniar con las piezas dadas y tras varias horas el resultado fué el siguiente:
El sensor girará gracias al motor donde esta situado en un intervalo comprendido entre -60º y 60º. Cuando detecte el obstáculo, a una distancia de 30 cm, se activará el comportamiento. Tomará 6 medidas distintas (una medida por cada 10 º) y tomará el camino adecuado para bordear el obstáculo, terminado orientado en el mismo sentido que la posición inicial.
El sensor girará gracias al motor donde esta situado en un intervalo comprendido entre -60º y 60º. Cuando detecte el obstáculo, a una distancia de 30 cm, se activará el comportamiento. Tomará 6 medidas distintas (una medida por cada 10 º) y tomará el camino adecuado para bordear el obstáculo, terminado orientado en el mismo sentido que la posición inicial.
Sin duda, esta es la parte que mas nos ha costado realizar de todas las que llevamos ya que para su solución se requiere el cálculo de una seria de fuerzas virtuales que han de ser resueltas mediante reglas trigonométricas.
Para su explicación adjuntamos la foto que se encuentra en el guión de la practica:
En la imagen podemos apreciar 3 fuerzas. La flecha azul se corresponde con la flecha de atracción, la flecha roja es la de repulsión y la verde la fuerza resultante de las dos anteriores, siendo esta la que se desea calcular.
Conocemos la distancia al obstáculo (a la que llamamos min) y el grado generado con el eje y, llamado gradoRepulsión, por lo que conocemos la coordenada polar del obstáculo. Del objetivo, conocemos las coordenadas cartesianas, por lo que para hallar el punto destino:
- Pasamos la coordenada polar del obstáculo a cartesiana
- Sumamos la coordenada cartesiana del obstáculo con la del punto destino
- Pasamos la coordenada resultante a polar.
De la coordenada polar resultante, alpha será los grados que debe girar el robot para evitar el obstáculo y el modulo será la distancia que recorrerá antes de retomar la orientación original. Corroboramos el funcionamiento con el siguiente vídeo.
- Comportamiento ir hacia la luz.
Para esta actividad los profesores nos facilitaron dos sensores extras encargados de detectar la luz. Ambos sensores estarán orientados a -45º y 45º con respecto a la parte delantera del robot. Si uno de los sensores recibe una intensidad mayor que el otro,se activa el comportamiento que permite al robot girar hacia el lado donde mas intensidad de luz hay. No es necesario calibrar nada cuando ejecutamos este apartado ya que usamos el método getNormalizedLightValue().
- Comportamiento ir hacia la luz evitando obstáculos.
Este apartado es una combinación de los anteriores ya que debe ir hacia la luz evitando los obstáculos que haya en su camino. Para la evitación de obstáculos se nos da a elegir entre usar el sensor de contacto o el de ultrasonido, pero nosotros hemos realizado una prueba con cada uno de los sensores.
Como dijimos al inicio del blog, en este práctica, aunque no sea obligatorio, se nos recomendaba usar comportamientos. Y ahora, este apartado destaca por su sencillez y gran simplificación ya que es únicamente una combinación del comportamiento SeguirLuz del apartado anterior, Esquivar con el sensor de ultrasonido del segundo apartado y Esquivar con el sensor de contacto. Si no hubiéramos usado la programación de comportamientos nos hubiera llevado el doble de tiempo y esfuerzo.
Luz + sensor de contacto
Luz + sensor de ultrasonidos
Así son las cosas y así se las hemos contado.
0 comentarios:
Publicar un comentario