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 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.
Matriz de covarianza: