3. Robots Autonomos 3
Introducción
• Proyecto Java en Eclipse
• es.usal.ra.sumo Contiene
las clases necesarias para la
implementación de la practica
de RoombaSumo
• es.usal.ra.odometria
Contiene las clases que
implementan la practica de
odometría.
5. Computación Neuro-borrosa 5
RoombaSumo
• Algoritmo sencillo
while( true ) {
Si detectamos colisión en el bumper izquierdo
Girar a la izquierda
Continuar hacia adelante
Fin si
Si detectamos colisión en el bumper derecho
Girar a la derecha
Continuar hacia adelante
Fin si
Si encontramos una pared virtual
giramos
continuamos hacia adelante
Fin si
Continuamos hacia adelante
Actualizamos la información de los sensores
}
• Adicionalmente se ha incorporado una funcionalidad que permite conocer cuando se ha
encontrado una pared virtual mediante el cambio de color en el indicador de status.
• Principal problema encontrado el sensor de bumper se quedaba pulsado.
7. Computación Neuro-borrosa 7
Roomba: Odometría
• En este caso se ha desarrollado una interfaz para controlar el robot
roomba y visualizar los resultados de la odometría.
• Las clases utilizadas son las siguientes:
• IRoomba: Interfaz con las operaciones que se pueden
hacer con el robot
• Roomba: Clase mapea al Roomba
• RoombaSim: Clase que simula un Roomba
• DatosDebugRoomba: Frame que muestra una consola
con los datos que genera el uso del robot
• VisualizarRuta: Frame que dibuja gráficamente la ruta
que ha seguido el robot
• Principal: Frame principal
11. Computación Neuro-borrosa 11
Roomba: Odometría IV
• El algoritmo es mas complejo que RoombaSumo
1. Mientras este accionado un mando se ejecuta la operación
2. Cuando se levanta la pulsación se realizan los cálculos de la
nueva posición a partir de la posición anterior, la distancia y el
ángulo.
3. Se almacenan los datos del nuevo punto y se genera las
coordenadas para pintarlas en la grafica.
• El punto importante es el punto 2.
12. Computación Neuro-borrosa 12
Roomba: Odometría V
• Para el calculo de posiciones se tienen en cuenta las siguientes premisas
No se puede realizar dos operaciones al mismo tiempo (e.j. girar y andar)
Si la distancia recorrida es prácticamente nula, se considera que la operación realizada es un giro.
Solo se calcula el nuevo punto si hay distancia recorrida, si giramos únicamente estamos cambiando el
ángulo.
Se han redondeado a números enteros las distancias para su representación grafica.
Para el calculo de la nueva posición se realizan las siguientes operaciones:
• dya = (float) (distance * Math.sin(Math.toRadians(anguloTotalGirado)));
• dxa = (float) (distance * Math.cos(Math.toRadians(anguloTotalGirado)));
• x = ultimoPunto.x + (int) dxa;
• y = ultimoPunto.y - (int) dya;
El punto (x,y) indica donde se va a colocar en la gráficamente, para el calculo de la posición solo hay que multiplicar
por -1 el valor de y.
Nueva posición de Roomba: (x, -y)
16. Computación Neuro-borrosa 16
Conclusiones
• Trabajar con rumba es complicado:
• Los sensores no son muy fiables
• Los bumpers se quedaban pulsados
• Gran retardo al iniciar la comunicación con Roomba.
• El calculo odométrico no es bueno.
• Realizamos una prueba donde se realiza un spin(360) y se median los
ángulos y no coincidían Creación de un parámetro ajusteAngulo
para multiplicar a las medidas de los ángulos dados.
• Como mejoras y posibles desarrollos:
• Estudiar los motivos de que el ángulo no sea el esperado.
• Mejoras en la interfaz.
• Añadir nuevas características (Velocidad, luces, otros sensores…)
• “Vuelve a casa por navidad” Crear el camino inverso al recorrido
17. Computación Neuro-borrosa 17
¿Dudas?
Robots autónomos
Master en Sistemas Inteligentes
Universidad de Salamanca
Arturo San Feliciano Martín
asanfeliciano@usal.es