Difference between revisions of "ProgramacionRobots2011"
WikiSheriff (talk | contribs) m |
m |
||
(24 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | + | =Curso de Programación de Robots Móviles - Nivel Medio= | |
− | + | ==Organización== | |
* Fechas: 4 al 15 de Abril de 2011 | * Fechas: 4 al 15 de Abril de 2011 | ||
Line 7: | Line 7: | ||
* Lugar: Edificio CRAI-TIC Aula | * Lugar: Edificio CRAI-TIC Aula | ||
− | == | + | ==Teoria== |
− | + | ''' Introducción - Robot Rovio ''' | |
− | |||
− | ==== | + | Rovio es un robot móvil de la empresa WowWee. Básicamente es una plataforma robótica con capacidad de movimiento omnidireccional dotada de una cámara web y un interfaz de red Wi-Fi. |
− | * | + | |
+ | Este interfaz permite al robot comunicarse con un ordenador externo, en el que se ejecutarán los programas realizados para controlar la conducta del robot. Los programas analizarán los datos obtenidos por el robot (imágenes principalmente) y recibidos a través de la conexión inalámbrica para determinar la siguiente acción a desempeñar (tomar una nueva imagen, realizar un desplazamiento, emitir un sonido, etc.). Estas acciones se traducen en comandos que serán enviados al robot por el mismo canal (la red inalámbrica) por el que se recibió la información que dio lugar a los mismos. | ||
+ | |||
+ | Está es una de las diferencias con otras plataformas robóticas utilizadas en nuestro grupo. En los robot LEGO Mindstorm, empleados en el curso de introducción, o en los robots Nao, este último más avanzados que cualquiera de las otras plataformas, el control no sale del propio robot: los programas se ejecutan en la propia máquina sin necesidad de comunicación con un ordenador externo, de forma que el robot interpreta continuamente los estímulos recibidos (ya sean internos o externos) para establecer su comportamiento. Este tipo de sistemas reciben el nombre de “sistemas de lazo cerrado”, mientras que sistemas como el Rovio en los que la información obtenida sale fuera del mismo al igual que las acciones a realizar provienen del exterior entran dentro de la categoría de “sistemas de lazo abierto”. | ||
+ | |||
+ | Otra de las principales diferencias entre el robot LEGO Mindstorm y Rovio es el tipo de sensores con los que están equipados: mientras que todos los sensores del primero son sencillos (infrarrojos, interruptores, sensores de luz y temperatura, etc.), el principal sensor del Rovio, la cámara, es complejo: para poder trabajar con la información obtenida por el mismo es necesario aplicar una serie de técnicas más o menos complejos habitualmente conocidas como “técnicas de visión artificial”. | ||
+ | |||
+ | A lo largo de este curso se explicará como configurar el robot Rovio así como el entorno de desarrollo necesario para interactuar con él y se aplicarán algunas técnicas de visión artificial sencillas para realizar programas de navegación básica o de interacción con el usuario. | ||
+ | |||
+ | ==Prácticas== | ||
+ | |||
+ | ===Práctica I – Configuración del robot Rovio=== | ||
+ | |||
+ | Para poder trabajar con el robot lo primero que debemos hacer es configurarlo para que se comunique con el ordenador externo desde el que se llevará a cabo el control del mismo. | ||
+ | |||
+ | Básicamente hay dos modos de funcionamiento: ad hoc (liralmente, “para esto”), es decir, una conexión directa entre el ordenador y el robot y a través de una red inalámbrica existente. Para estas prácticas utilizaremos el segundo método, ya que permite, entre otras ventajas, una conexión más fiable y de mayor alcance. | ||
+ | |||
+ | [[Image:Rovio-Router.jpeg|thumb|320px|Diagrama de la conexión de red a emplear.]] | ||
+ | |||
+ | La configuración inicial del Rovio se realizará mediante conexión directa al mismo por medio de su puerto USB. Las especificaciones técnicas y el software necesario para la configuración del robot pueden obtenerse de . | ||
+ | |||
+ | Los datos específicos de la conexión de red (SSID, contraseña, IP, etc.), así como los pasos a seguir para la configuración del robot se indicarán en el aula. | ||
+ | |||
+ | * '''Posibles problemas''' | ||
+ | |||
+ | - No existe software de configuración USB para Rovio en Linux, por lo que es necesario hacer este configuración inicial desde el sistema operativo Windows XP. Desde Linux es posible realizar una configuración manual del robot a través del interfaz web que incluye el mismo, pero sería necesario realizar operaciones adicionales (como apertura de puertos) que están automatizadas si se emplea el software del fabricante. | ||
+ | |||
+ | - En caso de que el robot este protegido por contraseña (debido a que ya fue configurado con anterioridad) será necesario devolverlo a su configuración de fábrica antes de realizar la configuración de red. En el manual de usuario del Rovio (incluido en la caja) se explica como hacerlo. | ||
+ | |||
+ | - El paquete network manager de la distribución Ubuntu con la que están equipados los ordenadores del aula puede dar algún problema con la conexión de red que se va a utilizar. En caso de que se presenten dificultades en este sentido se utilizará el paquete WICD en su lugar. De ser necesario, se indicarán los pasos necesarios para su configuración. | ||
+ | |||
+ | ===Práctica II – Configuración del entorno de desarrollo=== | ||
+ | |||
+ | Rovio ofrece un API básico de funciones para el usuario que puede descargarse de: | ||
+ | |||
+ | http://www.wowwee.com/en/support/rovio. | ||
+ | |||
+ | Para facilitar su uso, el proyecto RovioCWrapProject de Héctor Quintián Pardo y Francisco J. Lera ofrece un “envoltorio” (wrap) en lenguaje C / C++ que no sólo simplifica el proceso de comunicación entre el ordenador y el robot (mediante el uso de sockets) sino que además permite una compatibilidad directa con librerías de visión artificial como OpenCV. | ||
+ | |||
+ | Por tanto, para poder trabajar con el robot el primer paso será instalar un compilador de C / C++ y las librerías gráficas OpenCv. | ||
+ | |||
+ | Ubuntu viene con los compiladores gcc y g++ de base, por lo que su instalación no debería ser necesaria. Para comprobar si están presentes, desde un shell (consola), se utilizan los comandos: | ||
+ | |||
+ | gcc --version | ||
+ | g++ --version | ||
+ | |||
+ | Si no están instalados, o si su versión es demasiado antigua para funcionar con las librerías OpenCV (esta parte se cubre en la parte de instalación de OpenCV), para su instalación desde Ubuntu (y desde cualquier distribución basada en Debian), solo hay que emplear la herramienta apt (advanced packaging tool). Nuevamente desde consola, se utilizarían los comandos: | ||
+ | |||
+ | sudo apt-get install gcc | ||
+ | sudo apt-get install g++ | ||
+ | |||
+ | Para la instalación de las librerías gráficas OpenCV solo hay que seguir los pasos indicados en la sección de descargas – Downloads de: | ||
+ | |||
+ | http://opencv.willowgarage.com/wiki/ | ||
+ | |||
+ | En el aula se explicará cuales de las herramientas opcionales para la instalación de OpenCV deberán descargarse e instalarse antes de seguir adelante con la instalación de las librerías. | ||
+ | |||
+ | Además, para poder facilitar la compilación de los proyectos realizados, es necesario instalar otra serie de herramientas adicionales como make o cmake, pero como todas ellas son necesarias para la instalación de OpenCV su instalación se explica también en el anterior enlace. | ||
+ | |||
+ | El segundo paso será descargar el proyecto RovioCWrapProject que servirá como base para los programas a desarrollar. Los pasos a seguir se detallan en una práctica posterior. Si se instalará sin embargo la herramienta de control de versiones subversión (svn), que se empleará para descargar de la web de robótica este y otros proyectos. | ||
+ | |||
+ | La herramienta subversion es de gran utilidad para desarrollar software de forma concurrente (varias personas trabajando en un mismo proyecto) así como para mantener un control de versiones del software implementado. Una explicación detallada de la misma trasciende los objetivos de este curso, y durante el desarrollo del mismo se indicará lo mínimo que se necesita saber para seguir el plan previsto. Si se desea conocer más acerca de svn y de cómo utilizarlo, hay multitud de recursos en la red, por ejemplo: | ||
+ | |||
+ | http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html | ||
+ | |||
+ | Antes de instalar subversion, se comprueba si ya está disponible en el sistema: | ||
+ | |||
+ | svn --version | ||
+ | |||
+ | De no estar disponible, su instalación puede realizarse nuevamente empleando apt: | ||
+ | |||
+ | sudo apt-get install subversion | ||
+ | |||
+ | ===Práctica III – Primer programa de visión artificial=== | ||
+ | |||
+ | El objetivo de esta práctica es comprender algunos conceptos elementales de visión artificial que serán necesarios para el desarrollo del curso. Para ello se empleará una plantilla de ejemplo que puede descargarse de | ||
+ | |||
+ | http://robotica.unileon.es/~jfgars/pubs/cursoMedio/plantillaC.zip | ||
+ | |||
+ | En el aula se irá modificando este programa para comprender los conceptos de filtrado, segmentación y espacio de color, asi como para entender las herramientas básicas de OpenCV que serán de gran ayuda para el desarrollo de los programas para el Rovio. | ||
+ | |||
+ | Tanto la explicación de estos conceptos como los pasos a seguir para la realización de este ejercicio se darán de forma presencial. | ||
+ | |||
+ | * '''Enlaces de interés''' | ||
+ | |||
+ | Estrucura IplImage de OpenCV | ||
+ | |||
+ | http://opencv.willowgarage.com/documentation/basic_structures.html | ||
+ | |||
+ | * '''Posibles problemas''' | ||
+ | |||
+ | - Si una vez compilado el software no encuentra las librebrías dinámicas de OpenCV ... | ||
+ | |||
+ | error while loading shared libraries: libopencv_imgproc.so.2.2: cannot open shared object file: No such file or directory | ||
+ | |||
+ | ... es debido a que el path no se ha actualizado correctamente durante la instalación de OpenCV. Para solucionarlo, se utiliza el comando | ||
+ | |||
+ | export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH sudo ldconfig | ||
+ | |||
+ | ===Práctica IV – Ejemplos de proyectos con Rovio=== | ||
+ | |||
+ | En la web se dispone de dos programas de ejemplo que se descargaran para comprender mejor el proceso de compilación y funcionamiento de los programas en el Rovio. | ||
+ | |||
+ | El primer proyecto es el RovioCWrapProject original del que se habló en prácticas anteriores y que es la base para el trabajo del curso. Para descargarlo, desde consola (y desde el directorio donde se quiera bajar el proyecto) se teclea: | ||
+ | |||
+ | svn co http://robotica.unileon.es/svn/Release/RovioCWrapProject/trunk | ||
+ | |||
+ | El segundo proyecto, RovioAttentionCWrapProject, es un modelo de control de atención originalmente diseñado para el robot Nao y adaptado para el Rovio gracias a la utilización del proyecto RovioCWrap. Puede descargarse mediante el comando: | ||
+ | |||
+ | svn co http://robotica.unileon.es/svn/Release/RovioAttentionCWrapProject/trunk | ||
+ | |||
+ | Para generar la documentación (solo proyecto RovioCWrap), se emplea, desde el directorio trunk, el comando: | ||
+ | |||
+ | doxygen | ||
+ | |||
+ | |||
+ | Antes de compilar los proyectos es posible que haya realizar algunos cambios en la configuración de los mismos (entre ellos hay que indicar la IP del robot con el que va a trabajar el software, indicada en rcwp.h). | ||
+ | |||
+ | Una vez realizadas las tareas de configuración necesarias, es posible compilar los proyectos. Para ello, también desde el directorio trunk, se utiliza el Makefile incluido, tecleando: | ||
+ | |||
+ | make | ||
+ | |||
+ | * '''Posibles problemas''' | ||
+ | |||
+ | - El proyecto RovioCWrapProject debería compilar sin mayores problemas, pero no así el RovioAttentionCWrapProject. Esto es debido a que la versión de OpenCV para la que se probó en el momento de su realización era anterior a la que se ha instalado en el aula. | ||
+ | |||
+ | Sin embargo, no se trata de una incompatibilidad de las funciones de las librerías empleadas, sino de que el formato en que se indican las mismas a la hora de compilar el software es diferente. | ||
+ | |||
+ | Para solucionar este problema es necesario editar el archivo Makefile para indicar las librerías a incluir de acuerdo al formato que establece la instalación realizada. En el aula se comentarán los cambios necesarios para que si este mismo problema se presenta en un futuro se sepa como actuar para solucionarlo. | ||
+ | |||
+ | ===Práctica V – Código de partida para el proyecto=== | ||
+ | |||
+ | El código fuente de partida para el proyecto a desarrollar puede descargarse de | ||
+ | |||
+ | http://robotica.unileon.es/~jfgars/pubs/cursoMedio/baseCode.zip | ||
+ | |||
+ | ==Proyecto final== | ||
+ | |||
+ | Dos enlaces para terminar: | ||
+ | |||
+ | Navegación: | ||
+ | |||
+ | http://www.youtube.com/watch?v=qziUJcUDfBc | ||
+ | |||
+ | Reconocimiento, atención y aprendizaje: | ||
+ | |||
+ | http://www.youtube.com/watch?v=QfPkHU_36Cs |
Latest revision as of 10:52, 25 June 2014
Contents
Curso de Programación de Robots Móviles - Nivel Medio
Organización
- Fechas: 4 al 15 de Abril de 2011
- Horario: 18:00 a 21:00 de lunes a viernes
- Lugar: Edificio CRAI-TIC Aula
Teoria
Introducción - Robot Rovio
Rovio es un robot móvil de la empresa WowWee. Básicamente es una plataforma robótica con capacidad de movimiento omnidireccional dotada de una cámara web y un interfaz de red Wi-Fi.
Este interfaz permite al robot comunicarse con un ordenador externo, en el que se ejecutarán los programas realizados para controlar la conducta del robot. Los programas analizarán los datos obtenidos por el robot (imágenes principalmente) y recibidos a través de la conexión inalámbrica para determinar la siguiente acción a desempeñar (tomar una nueva imagen, realizar un desplazamiento, emitir un sonido, etc.). Estas acciones se traducen en comandos que serán enviados al robot por el mismo canal (la red inalámbrica) por el que se recibió la información que dio lugar a los mismos.
Está es una de las diferencias con otras plataformas robóticas utilizadas en nuestro grupo. En los robot LEGO Mindstorm, empleados en el curso de introducción, o en los robots Nao, este último más avanzados que cualquiera de las otras plataformas, el control no sale del propio robot: los programas se ejecutan en la propia máquina sin necesidad de comunicación con un ordenador externo, de forma que el robot interpreta continuamente los estímulos recibidos (ya sean internos o externos) para establecer su comportamiento. Este tipo de sistemas reciben el nombre de “sistemas de lazo cerrado”, mientras que sistemas como el Rovio en los que la información obtenida sale fuera del mismo al igual que las acciones a realizar provienen del exterior entran dentro de la categoría de “sistemas de lazo abierto”.
Otra de las principales diferencias entre el robot LEGO Mindstorm y Rovio es el tipo de sensores con los que están equipados: mientras que todos los sensores del primero son sencillos (infrarrojos, interruptores, sensores de luz y temperatura, etc.), el principal sensor del Rovio, la cámara, es complejo: para poder trabajar con la información obtenida por el mismo es necesario aplicar una serie de técnicas más o menos complejos habitualmente conocidas como “técnicas de visión artificial”.
A lo largo de este curso se explicará como configurar el robot Rovio así como el entorno de desarrollo necesario para interactuar con él y se aplicarán algunas técnicas de visión artificial sencillas para realizar programas de navegación básica o de interacción con el usuario.
Prácticas
Práctica I – Configuración del robot Rovio
Para poder trabajar con el robot lo primero que debemos hacer es configurarlo para que se comunique con el ordenador externo desde el que se llevará a cabo el control del mismo.
Básicamente hay dos modos de funcionamiento: ad hoc (liralmente, “para esto”), es decir, una conexión directa entre el ordenador y el robot y a través de una red inalámbrica existente. Para estas prácticas utilizaremos el segundo método, ya que permite, entre otras ventajas, una conexión más fiable y de mayor alcance.
La configuración inicial del Rovio se realizará mediante conexión directa al mismo por medio de su puerto USB. Las especificaciones técnicas y el software necesario para la configuración del robot pueden obtenerse de .
Los datos específicos de la conexión de red (SSID, contraseña, IP, etc.), así como los pasos a seguir para la configuración del robot se indicarán en el aula.
- Posibles problemas
- No existe software de configuración USB para Rovio en Linux, por lo que es necesario hacer este configuración inicial desde el sistema operativo Windows XP. Desde Linux es posible realizar una configuración manual del robot a través del interfaz web que incluye el mismo, pero sería necesario realizar operaciones adicionales (como apertura de puertos) que están automatizadas si se emplea el software del fabricante.
- En caso de que el robot este protegido por contraseña (debido a que ya fue configurado con anterioridad) será necesario devolverlo a su configuración de fábrica antes de realizar la configuración de red. En el manual de usuario del Rovio (incluido en la caja) se explica como hacerlo.
- El paquete network manager de la distribución Ubuntu con la que están equipados los ordenadores del aula puede dar algún problema con la conexión de red que se va a utilizar. En caso de que se presenten dificultades en este sentido se utilizará el paquete WICD en su lugar. De ser necesario, se indicarán los pasos necesarios para su configuración.
Práctica II – Configuración del entorno de desarrollo
Rovio ofrece un API básico de funciones para el usuario que puede descargarse de:
http://www.wowwee.com/en/support/rovio.
Para facilitar su uso, el proyecto RovioCWrapProject de Héctor Quintián Pardo y Francisco J. Lera ofrece un “envoltorio” (wrap) en lenguaje C / C++ que no sólo simplifica el proceso de comunicación entre el ordenador y el robot (mediante el uso de sockets) sino que además permite una compatibilidad directa con librerías de visión artificial como OpenCV.
Por tanto, para poder trabajar con el robot el primer paso será instalar un compilador de C / C++ y las librerías gráficas OpenCv.
Ubuntu viene con los compiladores gcc y g++ de base, por lo que su instalación no debería ser necesaria. Para comprobar si están presentes, desde un shell (consola), se utilizan los comandos:
gcc --version g++ --version
Si no están instalados, o si su versión es demasiado antigua para funcionar con las librerías OpenCV (esta parte se cubre en la parte de instalación de OpenCV), para su instalación desde Ubuntu (y desde cualquier distribución basada en Debian), solo hay que emplear la herramienta apt (advanced packaging tool). Nuevamente desde consola, se utilizarían los comandos:
sudo apt-get install gcc sudo apt-get install g++
Para la instalación de las librerías gráficas OpenCV solo hay que seguir los pasos indicados en la sección de descargas – Downloads de:
http://opencv.willowgarage.com/wiki/
En el aula se explicará cuales de las herramientas opcionales para la instalación de OpenCV deberán descargarse e instalarse antes de seguir adelante con la instalación de las librerías.
Además, para poder facilitar la compilación de los proyectos realizados, es necesario instalar otra serie de herramientas adicionales como make o cmake, pero como todas ellas son necesarias para la instalación de OpenCV su instalación se explica también en el anterior enlace.
El segundo paso será descargar el proyecto RovioCWrapProject que servirá como base para los programas a desarrollar. Los pasos a seguir se detallan en una práctica posterior. Si se instalará sin embargo la herramienta de control de versiones subversión (svn), que se empleará para descargar de la web de robótica este y otros proyectos.
La herramienta subversion es de gran utilidad para desarrollar software de forma concurrente (varias personas trabajando en un mismo proyecto) así como para mantener un control de versiones del software implementado. Una explicación detallada de la misma trasciende los objetivos de este curso, y durante el desarrollo del mismo se indicará lo mínimo que se necesita saber para seguir el plan previsto. Si se desea conocer más acerca de svn y de cómo utilizarlo, hay multitud de recursos en la red, por ejemplo:
http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html
Antes de instalar subversion, se comprueba si ya está disponible en el sistema:
svn --version
De no estar disponible, su instalación puede realizarse nuevamente empleando apt:
sudo apt-get install subversion
Práctica III – Primer programa de visión artificial
El objetivo de esta práctica es comprender algunos conceptos elementales de visión artificial que serán necesarios para el desarrollo del curso. Para ello se empleará una plantilla de ejemplo que puede descargarse de
http://robotica.unileon.es/~jfgars/pubs/cursoMedio/plantillaC.zip
En el aula se irá modificando este programa para comprender los conceptos de filtrado, segmentación y espacio de color, asi como para entender las herramientas básicas de OpenCV que serán de gran ayuda para el desarrollo de los programas para el Rovio.
Tanto la explicación de estos conceptos como los pasos a seguir para la realización de este ejercicio se darán de forma presencial.
- Enlaces de interés
Estrucura IplImage de OpenCV
http://opencv.willowgarage.com/documentation/basic_structures.html
- Posibles problemas
- Si una vez compilado el software no encuentra las librebrías dinámicas de OpenCV ...
error while loading shared libraries: libopencv_imgproc.so.2.2: cannot open shared object file: No such file or directory
... es debido a que el path no se ha actualizado correctamente durante la instalación de OpenCV. Para solucionarlo, se utiliza el comando
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH sudo ldconfig
Práctica IV – Ejemplos de proyectos con Rovio
En la web se dispone de dos programas de ejemplo que se descargaran para comprender mejor el proceso de compilación y funcionamiento de los programas en el Rovio.
El primer proyecto es el RovioCWrapProject original del que se habló en prácticas anteriores y que es la base para el trabajo del curso. Para descargarlo, desde consola (y desde el directorio donde se quiera bajar el proyecto) se teclea:
svn co http://robotica.unileon.es/svn/Release/RovioCWrapProject/trunk
El segundo proyecto, RovioAttentionCWrapProject, es un modelo de control de atención originalmente diseñado para el robot Nao y adaptado para el Rovio gracias a la utilización del proyecto RovioCWrap. Puede descargarse mediante el comando:
svn co http://robotica.unileon.es/svn/Release/RovioAttentionCWrapProject/trunk
Para generar la documentación (solo proyecto RovioCWrap), se emplea, desde el directorio trunk, el comando:
doxygen
Antes de compilar los proyectos es posible que haya realizar algunos cambios en la configuración de los mismos (entre ellos hay que indicar la IP del robot con el que va a trabajar el software, indicada en rcwp.h).
Una vez realizadas las tareas de configuración necesarias, es posible compilar los proyectos. Para ello, también desde el directorio trunk, se utiliza el Makefile incluido, tecleando:
make
- Posibles problemas
- El proyecto RovioCWrapProject debería compilar sin mayores problemas, pero no así el RovioAttentionCWrapProject. Esto es debido a que la versión de OpenCV para la que se probó en el momento de su realización era anterior a la que se ha instalado en el aula.
Sin embargo, no se trata de una incompatibilidad de las funciones de las librerías empleadas, sino de que el formato en que se indican las mismas a la hora de compilar el software es diferente.
Para solucionar este problema es necesario editar el archivo Makefile para indicar las librerías a incluir de acuerdo al formato que establece la instalación realizada. En el aula se comentarán los cambios necesarios para que si este mismo problema se presenta en un futuro se sepa como actuar para solucionarlo.
Práctica V – Código de partida para el proyecto
El código fuente de partida para el proyecto a desarrollar puede descargarse de
http://robotica.unileon.es/~jfgars/pubs/cursoMedio/baseCode.zip
Proyecto final
Dos enlaces para terminar:
Navegación:
http://www.youtube.com/watch?v=qziUJcUDfBc
Reconocimiento, atención y aprendizaje:
http://www.youtube.com/watch?v=QfPkHU_36Cs