Buenas,
Durante estas dos últimas semanas hemos estado elaborando la práctica 1. Se trata de una toma de contacto con el API que proporciona LeJOS, en donde manejaremos el uso básico de los motores y de la pantalla LCD.
Lo primero que hicimos fué configurar el eclipse siguiendo las instrucciones que vienen en la documentación entregada, no nos costo nada puesto que estaba muy bien explicado cada paso.
Los apartados de la práctica son los siguientes:
- BasicMotor1: Debíamos crear un programa que al tocar un botón el motor se moviera hasta que volviéramos a tocar otro botón. Para conseguir este primer objetivo, hemos utilizado las funciones:
Durante estas dos últimas semanas hemos estado elaborando la práctica 1. Se trata de una toma de contacto con el API que proporciona LeJOS, en donde manejaremos el uso básico de los motores y de la pantalla LCD.
Lo primero que hicimos fué configurar el eclipse siguiendo las instrucciones que vienen en la documentación entregada, no nos costo nada puesto que estaba muy bien explicado cada paso.
Los apartados de la práctica son los siguientes:
- BasicMotor1: Debíamos crear un programa que al tocar un botón el motor se moviera hasta que volviéramos a tocar otro botón. Para conseguir este primer objetivo, hemos utilizado las funciones:
- Button.waitForPress(), permite recoger la pulsación de un botón del ladrillo.
- Motor.A.forward(), su funcion es mover hacia alante el motor A.
- Motor.A.stop(), detiene instantáneamente el motor A.
- BasicMotor2: En este segundo apartado, debíamos conseguir que el motor rotase 45º al pulsar un botón. Fue una tarea sencilla y las funciones utilizadas fueron Button.waitForPress() y Motor.A.rotate(45).
- BasicMotor3: Se debe obtener el mismo resultado que en el apartado anterior pero usando el método rotateTo(). El funcionamiento de rotateTo() es similar a rotate(), pero la única diferencia es que hay que reiniciar la odometría del motor para que el motor gire. Esto se consigue con la función Motor.A.resetTachoCount().
- Visualización de la odometría del motor: En este apartado, se nos pedía escribir un programa que mostrara constantemente la posición del motor (grados de giro) en el LCD del ladrillo. El angulo mostrado debia estar en el rango [0.360]. En sí lo sacamos rápido, aunque nos costó un rato mostrar el ángulo correcto y no ángulos negativos o superiores a 360º.
- Cuadrado de calibración de movimiento: Consiste en poner un lápiz próximo al eje de rotación del robot de manera que dibuje su trayectoria en el suelo a medida que se desplaza. Lo lados del cuadrado dibujado deben ser de 40 cm cada uno. El proceso ha de repetirse para 10 iteraciones.
Esta parte se nos atragantó un poco, porque al principio no eramos capaces de meter un bolígrafo en un espacio tan pequeño. Pero tras varias chapuzas, llego la versión final y hemos de decir que nos quedó bastante bien centrado con respecto a los ejes de las ruedas.
Haga click en la imagen para agrandar!! |
Tras ponerle las piezas necesarias, nos pusimos a hacer el programa en sí, el cual no tenía mayor complicación. En el siguiente vídeo os mostramos como funciona:
Como podemos observar en el vídeo, el cuadrado lo hace aparentemente perfecto. Aunque no se aprecia la linea que va haciendo el robot en el vídeo, hemos remarcado cada linea en cada una de las 10 iteraciones para que quedase mas vistoso y este es el resultado.Hay que decir que al ser una cartulina, una mina de lápiz no da para mas...y no pinta como nos gustaría.Por otro lado, lo hemos probado en un folio normal y pinta con normalidad.
Haga click en la imagen para agrandar!! |
En la imagen anterior tenemos donde empezaba y acababa nuestro robot cada vez que iniciábamos el programa. Podemos observar una desviación clara pero esto sucede a esta velocidad, ya que si bajamos la velocidad el programa tendría una precisión de 99.9%. En las aulas de Linux probamos a hacerlo a baja velocidad y el resultado fue un cuadrado perfecto.
- Cálculo de la matriz de covarianza: Se trata de realizar un estudio estadístico para conocer el grado de incertidumbre del movimiento (error cometido) sobre el circuito anterior. A continuación se adjunta una tabla que muestra la desviación, en centímetros, durante diez iteraciones en el eje de las X y de las Y:
- Visualización de la trayectoria: Para solucionar este apartado, modificamos el código del cuadrado y lo actualizamos. Para ello mostramos en el LCD constantemente la posición x, y y los grados del motor sin trampa. Decimos sin trampa, ya que para hallar las nuevas posiciones no lo hicimos sumando 90º grados "a pelo" sino que lo hicimos con la función navigator.getAngle(). Así podemos observar correctamente la desviación del robot al realizar la trayectoria. Por tanto, la matriz de covarianza resultante es la siguiente:
siendo el punto medio: (-0,7 . 1,6).
Cada dato de la matriz se corresponde con la incertidumbre de los cuatros ejes del cuadrado.
Cada dato de la matriz se corresponde con la incertidumbre de los cuatros ejes del cuadrado.
A continuación mostraremos dos videos, uno con velocidad normal y otro con velocidad baja, para que se pueda apreciar que a velocidades bajas no sale un cuadrado perfecto.
Velocidad Normal:
Velocidad Baja:
Ha sido una práctica muy interesante donde nos ha ayudado para familiarizarnos con bracitos, cada vez sabemos indicarle que haga mas cosas, en concreto con el uso de los motores, dentro de nada le tendremos en un gimnasio haciendo pesas porque se masca la tragedia para las proximas prácticas.
Así son las cosas y así se las hemos contado...
0 comentarios:
Publicar un comentario