24.2.11

Prática 2 - Obteniendo información sensorial

24.2.11
Presentamos el nuevo modelo de RJV11



Obteniendo información:

En este vídeo se ve como se va actualizando la información referente al ultrasonidos, sensor de luz, tensión de la batería y memoria libre.
Mostramos el nombre del robot, el valor recogido por el ultrasonidos medido en milímetros, el valor crudo y porcentaje de la luz medida por el sensor de luz, la tensión de la batería y la memoria libre.



Control del robot por sonido:

RJV11 gira para calibrar el sensor de sonido con el ruido de las ruedas en movimiento, al dar una palmada, si esta estático, inicia el movimiento hacia adelante, si esta en movimiento, se para.



Bump & Go! usando sensores de contacto:

En este vídeo podemos comprobar como el robot, al chocar contra un ostaculo, y por lo tanto presionar el sensor de contacto, se detiene, retrocede y gira un angulo aleatorio.



Bump & Go! usando sensores de ultrasonido:

En este vídeo podemos comprobar como el robot, al detectar un obstaculo cerca, se detiene, retrocede y gira un ángulo aleatorio.



Comportamiento sigue-pared para salir de un laberinto:

Hemos programado el robot con un controlador de tipo P para que de potencia a las ruedas según el error de la distancia a la que esta de la que debería estar, de este modo conseguimos que el robot gire a la izquierda cuando esta muy cerca de la pared, o a la derecha cuando se aleja, y si el error es 0 avance hacia adelante.



En una primera aproximación para resolver el problema de seguir la pared, se nos ocurrió hacerlo con un control reactivo por casos, según unos rangos de error. Este método resulto ser demasiado brusco.

En una segunda aproximación hicimos un control reactivo P proporcional al error. No funciono del todo mal, pero aun seguía siendo bastante brusco.

Como solución final seguimos usando un control reactivo P proporcional al error, pero en lugar de usar la ecuación de una recta, nos decidimos por usar la ecuación del cubo del error. De esta manera si el error es pequeño corregirá más suavemente, y según el error sea más grande la velocidad de las ruedas aumente/disminuya más rápidamente. Con este sistema probamos diferentes combinaciones y al final nos quedamos con el correspondiente a la gráfica azul.

Aquí podemos ver algunas de las formulas que seguimos para la velocidad de los motores:


Calibración del sensor de ultrasonidos:

1. ¿Cuál es la distancia real máxima y mínima que puede medir el sensor?

Distancia mínima : 40 mm
Distancia máxima : 2070 mm aunque hay casos en los que nos llegaba a detectar hasta 2520 mm

2. ¿Cual es el máximo ángulo con respecto a la pared para los que los valores son válidos?

El ángulo máximo que llega a medir son 50º, a partir de este ángulo ya no llega a medir distancia.

3. ¿Tiene el sensor un error sistemático, es decir, la media de su error no es
cero?

Desde la distancia de 200 mm hasta 1000 mm, el error es siempre 0, por lo tanto no tiene error sistemático.

4.
-1- Error sistemático

Medida real Valor medio
20 cm 21 cm
30 cm 30 cm
40 cm 40 cm
50 cm 50 cm
60 cm 60 cm
70 cm 70 cm
80 cm 80,4 cm
90 cm 91,1 cm
100 cm 101,5 cm
110 cm 111 cm
120 cm 127,7 cm

-2- Cono de apertura

Medida en x Medida en y
10 cm 9 cm
20 cm 13 cm
30 cm 13,5 cm
40 cm 11,5 cm
50 cm 18,5 cm
60 cm 20 cm
70 cm 24 cm
80 cm 16 cm
90 cm 21 cm
100 cm 20,5 cm
110 cm 20 cm
120 cm 7,5 cm

-3- Matriz de covarianza
[4.415833 , 4.5333333 ]
[ 4.5333333 , 56.32639 ]

10.2.11

Práctica 1 - Primeros pasos con el API e instalación eclipse

10.2.11
Control básico del motor:

- BasicMotor1: en este ejercicio hicimos uso de los métodos forward() y stop() del motor, y del método waitForPress() de los botones. No hubo mayor complicación para realizarlo, y el resultado se puede ver en el siguiente vídeo.


- BasicMotor2: para este ejercicio usamos el método rotate() del motor y seguimos usando el método waitForPress() de los bonotes para controlar la siguiente rotación de motor, de la misma manera que en el ejercicio anterior. El resultado en el siguiente vídeo.


- BasicMotor3: en este caso al usar el método rotateTo() del motor conseguimos que el motor se desplace para orientarse según su odometría interna. Sucesivas llamadas a rotateTo() con el mismo argumento no tienen efecto, puesto que el motor ya esta orientado a los grados indicados, como puede verse en el siguiente vídeo.


Para obtener el mismo resultado que en el apartado anterior, es necesario que la odometría interna del motor sea puesta a cero antes de efectuar la rotación, con la ayuda del método resetTachoCount(). De esta manera conseguimos que el motor rote 45º respecto de donde se encuentra. El resultado de este ejercicio es el mismo que el del apartado anterior.

Visualización de la odometría del motor:

Lo primero que se hizo en este apartado fue resetear la odometría del motor para ajustarla a la posición del brazo acoplado a él, para tener una mejor visualización de la coordenadas. Gracias al método getTachoCount() obtenemos en cada momento la odometría del brazo según lo vamos moviendo. El último punto que se trato fue conseguir que la visualización de la odometría en el LCD trabajara en un rango de [0º,360º), para ello hubo que hacer ciertas conversiones de módulo a la odometría obtenida en cada momento. En el siguiente vídeo se muestra el valor de la odometría según se varía el ángulo del brazo.



Cuadrado de calibración de movimiento:

La realización del recorrido para hacer un cuadrado es algo sencillo, 4 rectas y 4 giros. Lo interesante de este ejercicio fue comprobar que a pesar de alinear a RJV11 en el punto de salida con la mayor precisión posible, el punto final del movimiento varía en cada una de las repeticiones del experimento, como se puede apreciar en la siguientes fotos.

Alineando lo mejor posible a RJV11

El punto 0 representa donde debería haber acabado el robot. Del 1 al 7 representan el punto donde acabó RJV11 en cada una de las siguiente 7 repeticiones del ejercicio.

Por otra parte, el cuadrado descrito por RJV11 dista mucho de ser perfecto.



Esto es debido en parte a que a pesar de introducir las medidas del diámetro y separación de ruedas correctamente, estas se ven alteradas por el peso del robot y por las sacudidas de su estructura debido al movimiento. Para intentar minimizar este efecto, a la hora de hacer el montaje de RJV11 intentamos seguir ciertas directrices: minimizar el peso del montaje, concentrar la mayor parte del peso sobre las ruedas tractoras, conseguir una estructura estable. También a la hora de efectuar los movimiento se tuvo en cuenta dejar cierto tiempo de margen para que la estructura del robot quedase en equilibrio antes de efectuar otro movimiento.

También las irregularidades, desniveles y distintos materiales del terreno tienen efecto sobre la trayectoria de RJV11, por ello se decidió utilizar una velocidad prudente para la realización del ejercicio.

Por otra parte también hay que tener en cuenta el error sitemático de los encoders de los motores.

Visualización de la trayectoria:

Usamos como base el programa del cuadrado para este apartado. No fue especialmente dificultoso una vez nos dimos cuenta de que hay que pasar los grados a radianes. Al igual que en el ejercicio de visualizar la odometría, trabajamos en un rango de [0º,360º). A continuación se puede ver un video del LCD mientras se hace el recorrido.


Una de las cosas que nos dimos cuenta en este punto, es que la odometría interna de los motores tampoco es perfecta, puesto que en condiciones iguales, la ejecución del mismo programa nos proporciona salidas distintas por el LCD. a continuación se pueden ver cuatro capturas de cuatro ejecuciones distintas del mismo programa con salidas distintas.


Cálculo de la matriz de covarianza:

Para el cálculo de la matriz se repitió 10 veces desde el mismo punto, dirección y sentido, un movimiento de 1 metro. Marcando en cada una de las repeticiones donde acabó el movimiento, y comprobando al igual que en el ejercicio del cuadrado, que difícilmente el movimiento acaba donde esta previsto, ni en el mismo sitio. A continuación una imagen donde se puede apreciar donde debería haber acabado el movimiento teóricamente, y donde lo hizo en realidad.

El teórico punto final es el centro de coordenadas. Y cada uno de los números se corresponde con cada una de las repeticiones del movimiento.

Para calcular la matriz de covarianza, medimos cada uno de los puntos respecto del origen punto de inicio del movimiento, y con ayuda de un programa en java especificamente diseñado para ello, la obtenemos. Los valores resultantes son los siguientes:

[0.006025 , 0.033375]
[0.033375 , 1.136125]


Próxima entrega: Práctica 2 - Obteniendo información sensorial

Niños que pueden "asistir a clase" gracias a robots

Buenas a todos, esta mañana he visto una noticia en la tv y me a resultado interesante, por eso la comparto con los blogueros, asi podemos comentarla cada uno aver que les parece.

Lyndon Baty, es un estudiante de secundaria en Estados Unidos, quien no puede asistir a la escuela debido a que su sistema inmune es casi inexistente, producto de una enfermedad que afecta su riñón, utiliza un avatar robot va a clases por el para seguir aprendiendo y no perder su vida social.

El avatar robótico que tiene una altura de 1.20 metros, está equipado con una pantalla, micrófon, parlantes y una cámara.

Baty se conecta al dispositivo desde su casa por medio de una computadora, se traslada de salón como cualquier otro alumno y también puede seguir en contacto con sus compañeros.

El costo del robot es de US$ 4800 más US$ 1200 del servicio anual, tiene compatibilidad con red WiFi, calidad de imagen similar a la del Skype, baterías con una duración de 6-12 horas.

Lydnon no sólo va a clases, también va a la cafetería y platica con sus amigos en el patio de la escuela.

La madre de Lyndon dice que el avatar ha cambiado su vida, haciendo que el adolescente tenga un motivo por que vivir.

 
◄Design by Pocket, BlogBulk Blogger TemplatesThe Blog Full of Games;