Práctica 2:

Parte 1:Obteniendo información.
Consistía simplemente en mostrar por el monitor del NXT varios datos provenientes de los sensores. Ninguna dificultad.


Parte 2:Control del robot por sonido.
Esta práctica consistía en que el robot avanzase hasta que sonase una palmada, y volviese a ponerse en marcha al oír otra.
Tuvimos bastantes problemas con la calibración inicial del sensor de sonidos.
En un principio la calibración la realizábamos tomando una muestra de sonido de ambiente al inicio de la ejecución del programa. Esta muestra no era significativa.
Después tomamos una media de mil muestras para realizar la media.
Durante las pruebas pintamos por pantalla el resultado de la calibración, y al principio daba valores demasiado bajos, luego parecía subir junto con la variable que guardaba la "palmada" haciéndose imposible de alcanzar.
Probamos a tomar un número bajo de muestras, y a tomar la mayor de ellas, y en esta ocasión la palmada estaba constituida por cualquier sonido que superase esa toma máxima. Tampoco funcionó.
Finalmente volvimos a hacer una media, esta vez con 10000 muestras.
El problema real de la práctica no era la calibración, era que el sonido de la palmada duraba más de lo que tardaba el robot en detectar un ciclo de parada y uno de puesta en marcha, lo que se arreglo con sendos sleep() antes de cada fase.
El resultado final fue tan bueno que probamos en una habitación con música alta y robot distinguía perfectamente las palmadas.


Partes 3 y 4: Bump & Go!
El robot debía andar en linea recta hasta encontrar un obstáculo en cuyo caso se echaba hacia atrás y giraba un número aleatorio de grados. En la primera de las dos, el obstáculo se detectaba mediante el sensor de contacto, es decir, al chocar con el, y en la segunda mediante el de ultrasonidos, en cuyo caso debía detectar una distancia de 20 cm de cualquier obstáculo. Cambiamos esta distancia a 30 por que la configuración de nuestro robot hacía que los 20 cm quedaran casi a la misma distancia que el sensor de contacto.


Parte 5: Sigue paredes.
Debíamos programar al NXT para que siguiera una pared a cierta distancia prudencial.
En la clase de teoría anterior se nos había hablado de los controladores proporcionales, derivativos e integrales, y en un primer paso pensamos en implementar un sistema de este tipo para mantenernos cerca de la pared.
El robot se quedó dando vueltas.
Ajustar las variables para imitar el comportamiento PID parecía muy difícil, así que inhabilitamos las partes derivativa e integral y lo único que conseguimos fue que el robot continuase dando vueltas.
Finalmente optamos por controlar la rotación del robot en varios if en los que el índice de rotación tomaba solo tres valores diferentes dependiendo de si la distancia era menor a la deseada, mayor, o mucho mayor (a partir del doble).
En una primera prueba, el robot fue capaz de seguir paredes rectas y doblar precariamente en las esquinas aunque esto último no logró hacerlo en clase.
Eso fue a lo máximo que llegamos en esta parte de la práctica.

Parte 6: Calibración del sensor de ultrasonidos.
Esta parte consistía en tomar una serie de medidas sobre el sensor de ultrasonidos, para comprobar el error existente entre las distancias medidas por el sensor y las reales, las distancias laterales a las que el sensor comenzaba a captar un objeto, etc.
  • La distancia real máxima medida por el sensor es de 180 cm.
  • La mínima es de 8.
  • Al colocar el robot a 40 cm de la pared e ir rotándolo, éste daba medidas fiables hasta los +- 60º respecto a la perpendicular.
  • La media del error entre las medidas tomadas por el sensor y las reales es de 0,44 cm.
  • El error aumenta a medida que nos alejamos de la pared. A distancias cortas la medida dada por el sensor es casi exacta.
  • Los objetos son captados por los laterales en un cono de apertura que se cierra a larga distancia.
Cono de apertura de detección lateral de objetos:

Matriz de covarianza:

Practica 1

Practica 1:
Control Básico del motor:
Debíamos hacer rotar un motor por 3 métodos diferentes.
Primero debíamos hacer girar un motor hasta que se pulsara un botón cualquiera. Despues debía girar 45 grados mediante el método rotate(), y por ultimo, lo mismo pero utilizando el método rotateTo()
Los 3 códigos sin problemas, aunque parecía que con 45 grados el motor se movería un poco más.

Visualización de la odometría del motor:
Aqui debíamos mostrar la odometría interna (el ángulo de giro) de un motor que movíamos de forma manual.
En las primeras pruebas mostraba cifras extrañas, por encima del millar, e intentamos arreglarlo con un "% 360" (módulo 360), pero segía mostrando números por encima de 360 grados. Al final resultó que pintaba unos números por encima de otros, y al pasar de uno de 3 cifras a uno de dos, la última cifra se quedaba intacta. Para solucionarlo hicimos que el LCD se limpiara en cada vuelta del bucle, lo que hace que los números se visualicen de forma vibrante y "a trozos".

Cuadrado de calibración de movimiento:
Sobre el papel, dibujamos un cuadrado de 40 por 40 cm. Para realizar las pruebas simplemente colocábamos a Trocolo sobre una de las esquinas.
El robot no se mueve de forma perpendicular al eje de las ruedas, con lo cual la primera fuente de desviación a la hora de dibujar el cuadrado era que la linea de salida ya estaba desviada de la trayectoria ideal.
Además los ángulos no son exactamente de 90, así que la posición final nunca es exáctamente igual a la inicial, aunque si bastante próxima.


Matriz de covarianza:
Para realizar la matriz de covarianza dibujamos una linea recta de un metro sobre cartulina.
Despues hicimos recorrer 10 veces dicha linea al robot, anotando la desviación lateral como variable Y y la longitudinal como X.





Visualización de la trayectoria. La última parte de la práctica consistía en mostrar por la pantalla del NXT los valores de X, de Y y de el ángulo total durante el recorrido del cuadrado.
Hemos tenido que crear dos variables auxiliares X0 e Y0 para que acumulasen los valores de x e y al cambiar de lado.


Práctica 0

En el laboratorio seguimos los pasos para descargar e instalar leJOS, para actualizar el firmware del NXT si fuese necesario, para configurar eclipse y para subir los ejecutables al robot.
Mas tarde, al intentarlo en el portátil, tuvimos algunos problemas compilando leJOS porque, primero, no estaba instalado correctamente JDK, después faltaba la biblioteca usb.h, y por último faltaba también bluetooth.h, de forma que cada vez que ejecutábamos "ant" nos respondía con un nuevo fichero .h faltante.
Una vez resuelto todo esto probamos con éxito la conexión con el robot con algunos de los ejemplos que vienen con el propio leJOS.

Introducción

Este es el blog del grupo de prácticas formado por Cristian Cavero Simarro y Rubén Bautista Reyes para la asignatura Robótica de tercero de ingeniería técnica de informática de sistemas en la URJC.
A lo largo de este y los próximos posts iremos describiendo el progreso de dichas prácticas con el robot lego NXT llamado "Trocolo".

Durante la primera sesión de prácticas se repartió a cada grupo un kit Lego NXT para la realización de las mismas. Había que comprobar la integridad de cada uno de los kits entregados y, si faltaban piezas, apuntarlas para reponerlas al principio de la sesión siguiente.
En nuestro caso faltaba cierta cantidad de piezas pequeñas, un cable y el libro de instrucciones.
El siguiente y último paso era crear este blog y empezar a darle contenido.