Navegación visual: mejoras I

Tras trabajar la cabeza y el código, he incluido las siguientes mejoras:

  1. He acotado la visión del robot, dado que a partir de una cierta distancia, las medidas son menos exactas. Con ello generamos menos segmentos imprecisos.
  2. He añadido una navegación sencilla, donde la aceleración (positiva / negativa) es progresiva, con lo que evitamos los movimientos bruscos del robot (y consecuentemente de la cámara) que nos daba coordenas incorrectas de los puntos.
  3. He afinado aún más las constantes de fusión, con lo que se fusionan más segmentos y por tanto se almacenan menos.

Aún cuento con dos problemas que explico en el foro de la asignatura y con la negativa de recordmydesktop para grabar los vídeos…

Una prueba de los resultados:

resultado11

En la imagen se ve al robot después de haber girado hacia el pasillo de la derecha. Se ve claramente el mapa en memoria generado desde su salida hasta que ha alcanzado la posición en la que se encuentra.

Otra imagen más, esta vez le he dado la vuelta al robot..

resultadoatras

Y en breve os colgaré un par de vídeos.

Anuncios

Navegación Visual: “viendo” obstáculos

Una de las aplicaciones interesantes de la navegación visual es la detección de obstáculos que no son detectados por el láser, dado que están en el suelo por debajo de este.

Veamos cómo se traduce esto en nuestro esquema.

El obstáculo utilizado es una puerta que he tirado (bueno, más bien ha sido el robot guiado por mi malicia) como terapia anti-stresss, tras pasar una hermosa tarde de verano frente al ordenador sin solucionar los problemas del movimiento (os lo recomiendo, te deja relajado y feliz!).

Bueno, vamos al tema. Os dejo una imagen donde podéis comprobar cómo el láser no detecta ningún obstáculo, mientras que el mapa me muestra el segmento que me impide pasar:

Navegación visual

Ya estamos de vuelta para ponernos manos a la obra con la última práctica (por fin!).

En esta ocasión el objetivo está en poder navegar por el mundo utilizando el pioneer (desde el simulador Gazebo) usando para ello sólo la información que nos da la cámara (nada de laser).

Las tareas a realizar serán las siguientes:

  1. Identificar el suelo en la imagen captada por la cámara (2D).
  2. Realizar una conversión de los puntos 2D a 3D (utilizando la biblioteca Progeo).
  3. Representarlo mediante segmentos.
  4. Utilizar esta información para navegar.

El mundo en el que se desarrolla esta práctica es el departamental de la URJC de Móstoles:

departamental

Construcción de mapas (final)

… o eso espero!

Por indicación de José María (el profe 😉 ), os muestro un último vídeo para que se pueda comprobar con detalle la eliminación de segmentos no válidos.

Para saber si un segmento es o no válido, por cada punto del laser detectado, comprobaremos si el segmento formado por la posición del robot y este punto tiene intersección con cualquiera de los segmentos que tenemos almacenados. En ese caso, si el segmento es “pequeño” lo eliminanos, mientras que si es grande lo acortamos por el punto de intersección.

Pero lo mejor es verlo:

Como podéis comprobar, al avanzar el robot azul, el rojo va detectando lo que había detrás de este, fusionando con los segmentos que ya teníamos e, igualmente, eliminando los segmentos “no válidos” (donde estaba el robot azul).

La calidad del video es peor que la de los anteriores, pero es que mi recordmydesktop se niega a trabajar (no se si es porque es fin de semana, porque no aguanta el player con los dos jde de cada robot, …) y he tenido que hacer uso de la cámara del móvil.

Hasta otra!

Siguelínea Versión Mejorada

Hace unos días nos llevamos una sorpresa al conocer que la velocidad máxima no eran 1000mm/seg, sino que para esta práctica el software de simulación no trunca los valores superiores a 1000.

Así que nos pusimos a trabajar para poder mejorar los tiempos de vuelta, y hemos conseguido un algoritmo que hace que el robot complete una vuelta en unos 72 segundos, alcanzando una velocidad máxima de 2000 mm/sg.

Aquí podéis ver el resultado:

Conectando con gazebo…

Ya tenemos gazebo instalado, pero ahora tenemos que conectarlo con jde para poder acceder a los parámetros del robot y controlarlo con nuestro software.

Pues manos a la obra… lo primero descargar todo lo necesario de la web de la asignatura:

  1. Fichero de configuración de jde que permita conectar con gazebo.
  2. Nuevos ficheros introrob para controlar el robot desde jde en gazebo.

Con todo esto bajado, lo primero que vamos a hacer es compilar e instalar el driver de gazebo para jde, que viene dentro del directorio “drivers” de jde (en mi caso la versión 4.2.1):

…./4.2.1.r174/drivers/gacebo$ make

…./4.2.1.r174/drivers/gacebo$ sudo make install

Tras lo cual tendría que haberse copiado el fichero gazebo.so al directorio de jde que estemos usando, en mi caso: /usr/local/share/jde-robot.

Con todo esto podemos hacer la prueba de que jde conecta correctamente con gazebo. Para ello desde un terminal iniciamos gazebo mediante el comando:

$ wxgazebo <fichero-configuración>

El fichero de configuración que tendremos que utilizar está incluido en  el siguiente archivo comprimido (el pioneer2dx.world), aunque en mi caso lo he tenido que modificar para que utilice la renderización glx, utilizando este.

Finalmente:

$ wxgazebo pioneer2dx-renderGlx.world

Tras lo cual tendremos gazebo funcionando.

gazebo1

El paso siguiente será iniciar el jde, pero con el fichero de configuración que nos descargamos al principio (para que conecte con gazebo).

$ jde jde-conf-siguelinea

Si recibes un error del graphics_gtk, edita el fichero de configuración anterior y lo comentas (anteponiendo # a las líneas: driver graphics_gtk y end_driver).

Si todo ha ido correctamente, tendremos lo siguiente:

gazebo_jde

En la siguiente entrada mostraremos el funcionamiento del chocagira en gazebo…