miércoles, 17 de febrero de 2010

Práctica 1- Primeros Pasos

En esta semana lo más destacable fue, sin duda, el bautizo de nuestro robot con el noble nombre de Cigarro. ¿Cambiaremos su nombre la semana que viene? sólo Dios sabe.

En cuanto a la práctica 1, ésta podría dividirse en dos etapas. La primera correspondiente a la instalacion y uso de eclipse, y la segunda destinada a la creación de pequeñas aplicaciones para el robot.

En lo que se refiere a la parte de uso del eclipse no hay mucho que añadir, unicamente hay que tener cuidado en la configuración de los "external tools" (que nos ayudan a compilar, enlazar y enviar programas al robot desde eclipse). Aseguraos de rellenar bien los campos, y cuidado con VMware, parece que la versión 6.0 tiene algunos problemas a la hora de reconocer el robot.

En cuanto a la descarga de eclipse, solo es necesario acceder a la sección de descargas de la propia página de eclipse para conseguir la ultima versión. (Si introducís eclipse en la shell y lo descargáis del enlace recomendado obtendréis una versión anterior y que no se puede actualizar).

PRÁCTICAS:



CONTROL BÁSICO DEL MOTOR

Lo primero era enseñarle a Cigarro a moverse como Dios manda para lo que tuvimos que aprender a manejar los motores. Esta parte se divide en tres programas:

BASIC MOTOR 1:

Al pulsar el boton el motor conectado al puerto A empieza a girar.
Button.waitForPress();
Motor.A.forward();
Cuando se pulsa el boton de nuevo el motor para.
Button.waitForPress();
Motor.A.stop();





BASIC MOTOR 2:

Al pulsar el botón derecho el motor conectado al puerto A gira 45º a derecha, y viceversa con el botón izquierdo. Para ello hacemos uso de Motor.A.rotate() y Button.waitForPress().





BASIC MOTOR 3:

En este caso hay que obtener el mismo resultado que en el apartado anterior pero
usando la funcion rotateTo(). Hay que tener en cuenta que la función rotateTo() gira hasta que la odometría del robot marca el ángulo pedido, es decir, que si la ejecutamos dos veces seguidas con el mismo ángulo, la segunda no producirá ningún cambio, ya que la odometría ya marca los grados solicitados. Por ello hay que usar la función resetTachoCount() para resetear la odometría.







VISUALIZACIÓN DE LA ODOMETRÍA DEL ROBOT:

En la solución de este problema mostramos por pantalla la odometría del motor B. El giro del motor lo consegimos con la función getTachoCount(). Para que los giros esten siempre comprendidos entre 0 y 360º acotamos el rango de valores haciendo uso de resetTachoCount() cada vez que se exceden estos valores.







CUADRADO DE CALIBRACIÓN DE MOVIMIENTO:



Al ejecutar la aplicación el robot realiza una trayectoria en forma de cuadrado.
Las funciones necesarias para este apartado son navegador.travel() y navegador.steer().
Este apartado esta vinculado con el siguiente. Para poder realizar la matriz de covarianzas pusimos un rotulador al robot para que pintara sus trayectorias. Luego hay que anotar el error cometido en cada vuelta.





Como puede verse el cuadrado no es perfecto, trasteamos con los parámetros del constructor de la clase TachoPilot, variando un poco el ángulo de giro y reduciendo la velocidad pero de ninguna manera esto se solucionaba, no pasa nada, lo importante es tener salud. Como siempre se produce el mismo error, sobre todo en los giros, pensamos que podría fallar la rueda trasera giratoria así que mandamos a Cigarro a boxes para probar con varios tipos de ruedas fijas:





Tampoco sirvió de nada. Acabamos dándonos por vencidos y dejamos la que viene en el manual y es que en cuanto a ruedas al tío Lego no hay quien le tosa.

Por ello podemos concluir que este error en el giro es sistemático, y ante eso poco podemos hacer...



CÁLCULO DE LA MATRIZ DE COVARIANZAS:

Para hallar la matriz de covarianza no hay mas que seguir la fórmula indicada en el enunciado.

Nosotros hemos tomado como origen de coordenadas el punto (0,0). Tras realizar el experimento 10 veces, las coordenadas de llegada obtenidas han sido : (2.6,-3.4),(2.9,-3.1),(2.3,-2.6),(3.0,-2.8),(2.9,-3.6),(2.9,-3.9),(3.1,-3.8),(3.3,-2.8),(3.7,-3.1),(3.1,-3.1), por lo que la matriz de covarianzas ha quedado de la siguiente manera:

[ 1.276 -0.023 ]
[ -0.023 1.756 ]



VISUALIZACIÓN DE LA TRAYECTORIA:
Aquí el reto es que, a medida que el robot se desplaza por el mundo, vaya dibujando su trayectoria en pantalla con escala píxel/cm. Este punto fue el más difícil de implementar ya que este trazado ha de ser en tiempo real.
Al final, superándonos a nosotros mismos, lo hemos conseguido y puede mostrar todo tipo de pirueta que pueda realizar Cigarro. Ved el vídeo en el que traza el cuadrado del punto anterior en pantalla:


Quisimos ir más allá y probamos con una trayectoria curvilínea a ver si funcionaba igual de bien poniendo un humilde menú para elegir entre embos trayectos, el resultado nos dejó con las patas vueltas, véanlo:




(* Para resolver las dudas sobre los comando a utilizar recomendamos mirar el NXJ Tutorial. A nosotros nos ha sido de gran ayuda.)

No hay comentarios:

Publicar un comentario