3)Construyendo un Package
Este tutorial se trata de construir un package utilizando rosmake para construirlo y rosdep para instalar las dependencias.
Primero se investiga que tipo de dependencias necesita el sistema para poder hacer el package y despues se construye el mismo. Es importante construirlo desde la ubicación donde este mismo se desee construir.
lunes, 28 de junio de 2010
viernes, 25 de junio de 2010
Creating ROS Package
2)Creating ROS Package
2.1 roscreate
El rospack es un comando para crear packages muy sencillo en donde se crea un package de forma automática y te ahorras muchos pasos tediosos de hacerlo a mano y a su vez errores muy comunes en el proceso.
Para crear un nuevo package en el directorio actual:
$ roscreate-pkg [package_name]
Así mismo se pueden crear las dependencias de dicho paquete de una sola vez.
$ roscreate-pkg [package_name] [depend1] [depend2] [depend3]
El resto fue poner en práctica lo que se vio en el módulo 1.
2.1 roscreate
El rospack es un comando para crear packages muy sencillo en donde se crea un package de forma automática y te ahorras muchos pasos tediosos de hacerlo a mano y a su vez errores muy comunes en el proceso.
Para crear un nuevo package en el directorio actual:
$ roscreate-pkg [package_name]
Así mismo se pueden crear las dependencias de dicho paquete de una sola vez.
$ roscreate-pkg [package_name] [depend1] [depend2] [depend3]
El resto fue poner en práctica lo que se vio en el módulo 1.
Comandos básicos para navegar:
Bueno pues este es un resumen de los comandos básicos utilizados en ROS.
*rospack:
rospack es un programa en forma de línea de comando utilizado para encontrar packages entre todo el bosque de codigo en una distribución típica de ROS, obtener información acerca de los packages encontrada en el sistema de archivos. Además permite obtener una lista de los stacks disponibles, calcular la dependencia entre stacks asi como para obtener “build information”.
Se tienen las siguientes aplicaciones de rospack:
$ rospack [options] [package]
Allowed commands:
help
find [package]
list
list-names
langs
depends [package] (alias: deps)
depends1 [package] (alias: deps1)
depends-manifests [package] (alias: deps-manifests)
depends-indent [package] (alias: deps-indent)
depends-why --target= [package] (alias: deps-why)
vcs [package]
vcs0 [package]
depends-on [package]
depends-on1 [package]
export [--deps-only] --lang= --attrib= [package]
cflags-only-I [--deps-only] [package]
cflags-only-other [--deps-only] [package]
libs-only-L [--deps-only] [package]
libs-only-l [--deps-only] [package]
libs-only-other [--deps-only] [package]
profile [--length=] [--zombie-only]
plugins --attrib= [--top=] [package]
If [package] is omitted, the current working directory
is used (if it contains a manifest.xml).
Estos comandos imprimen información acerca de los ROS packages. Todos esos comandos imprimen sus resultados en stdout mientras que los errores son dirigidos a stderr para no confundir programas que esten ejecutando a rospack como un subproceso.
A continuación se desglozan los diferentes comandos:
3.1 rospack help :
Imprime mensaje de ayuda.
3.2 rospack find
find [package]
Imprime la dirección completa de en donde se encuentra el package mencionado, si el package no existe aparece una línea en blanco.
ej.
$ rospack find roscpp
/Users/homer/code/ros/core/roscpp
3.3 rospack list
list
Imprime en líneas separadas el nombre del package seguido por su dirección de localización de todos los packages ubicados en el punto señalado.
ej.
$ rospack list | grep visualization
wxpropgrid /home/kwc/ros-pkg/visualization/wxpropgrid
rviz /home/kwc/ros-pkg/visualization/rviz
visualization_msgs /home/kwc/ros-pkg/visualization_common/visualization_msgs
ogre /home/kwc/ros-pkg/visualization_common/ogre
ogre_tools /home/kwc/ros-pkg/visualization_common/ogre_tools
list-names:
Imprime los nombres de todos los packages en una lista.
3.4 rospack langs :
langs
Este comando se encarga de enlistar todas las librerías de idioma disponibles.
ej.
$ rospack langs
roscpp rospy
3.5 rospack dpeends, depends1, depends-manifests, depends-indent, depends-why
depends [package]:
Imprime una lista de todas las dependencias del package.
ej.
$ rospack depends map_server
gtest
genmsg_cpp
roslib
xmlrpc++
rosthread
roscpp
std_msgs
std_srvs
sdl
ijg_libjpeg
sdl_image
depends1 [package]
Imprime una lista de las dependencias inmediatas del package.
depends-manifests [package]
Imprime una lista de todos los manifest.xml de todas las dependencias del package.
depends-indent [package]
Imprime una lista entera de todas las dependencias en cadena del package.
Depends-why –target=TARGET[package](new in ROS 0.11)
Imprime una lista de todas las dependencias en cadena al TARGET
3.6 rospack vcs, vcs0
vcs [package]
Imprime una lista de todas las pestñas (version control) del manifest.xml y de todas sus dependencias.
vcs0[package]
Funciona igual que el vcs solamente que imprime información únicamente del package en cuestión y no de sus dependencias.
3.7 rospack depends-on, depends-on1
depends-on [package]
Imprime una lista de todos los paqckages que dependen del package base.
Depends-on1 [package]
Imprime una lista de todos los packages que dependen directamente del package en cuestión.
ej.
$ rospack depends-on1 roslang
roscpp
rospy
rosoct
roslisp
3.8 rospack export
export –lang=LANGUAJE –attrib=ATTRIBUTE [package]
Imprime una lista de [export][LANGUAGE ATTRIBUTE=""/][/export] valores del manifest.xml-
OJO!!: Packages cannot contain packages. Esto quiere decir que un package no puede estar dentro de otro package, un package solo pued estar dentro de un stack, entonces los packages pueden interactuar y depende entre sí pero no estas anidados. Un stack es un con junto de packages que en conjunto generan una herramienta en específico.
Manifest.xml
Los manifest contienen información importante acerca de un package, la información más básica que contienen es:
Existen otros tags opcionales, estos se describen a detalle en el wiki.
Stacks:
Los stacks son conjuntos de packages con una intención sencilla y simple pero concreta, con esto quiero decir que hacen una tarea en específico.
Stack manifest.
El manifest de un stack cumple el mismo fin que el manifest.xml de un package solo que en este caso es para un stack.
--------------
3.1 Utilizando rospack y rosstack:
rospack y rosstack son parte del rospack suite. Te permiten obtener información acerca de los pakages y stacks.
Usage:
$ rospack find [package_name]
$ rosstack find [stack_name]
Example:
$ rospack find roscpp
Would return:
YOUR_INSTALL_PATH/ros/core/roscpp
3.2 roscd
roscd es parte del rosbash suite.Te permite cambiar de directoria directamente al directorio de un package o stack.
Nota: Para saber en que directorio te encuentras actualmente puedes revisarlo con pwd.
3.2.1 subdirectorios.
También te puedes mover a un subdirectorio de algún package o stack
Try:
$ roscd roscpp/include
$ pwd
You should see:
YOUR_INSTALL_PATH/ros/core/roscpp/include
3.3.1 Casos especiales de roscd
En caso de poner roscd y nadamas, osease sin ningún otro argumento te envía a $ROS_ROOT osea al directorio donde instalaste ROS.
roscd without an argument will take you to $ROS_ROOT. Try:
$ roscd
$ pwd
You should see:
YOUR_INSTALL_PATH/ros
Nota: echo $ROS_ROOT te indica donde está dicho directorio.
3.3.2: roscd log
roscd log te lleva a donde se encuentran los log files de ROS.
3.4 rosls
rosls funciona de lamisma forma que funciona ls en la terminal de ubuntu solamente que en este caso es para ROS.
ej.
Usage:
$ rosls [locationname[/subdir]]
Example:
$ rosls roscpp_tutorials
Would return:
add_two_ints_client listener_unreliable
add_two_ints_server listener_with_tracked_object
add_two_ints_server_class listener_with_userdata
anonymous_listener Makefile
babbler manifest.xml
CMakeLists.txt node_handle_namespaces
custom_callback_processing notify_connect
listener srv
listener_async_spin talker
listener_multiple time_api
listener_single_message timers
listener_threaded_spin
3.5 Tab Completion
Esta característica trata exclusivamente de que al momento de que escribes algún comando od irección larga y repetitiva puedes apretar tabulador para autocompletar la línea. Cuando hay varias opciones las despliega.
*rospack:
rospack es un programa en forma de línea de comando utilizado para encontrar packages entre todo el bosque de codigo en una distribución típica de ROS, obtener información acerca de los packages encontrada en el sistema de archivos. Además permite obtener una lista de los stacks disponibles, calcular la dependencia entre stacks asi como para obtener “build information”.
Se tienen las siguientes aplicaciones de rospack:
$ rospack [options]
Allowed commands:
help
find [package]
list
list-names
langs
depends [package] (alias: deps)
depends1 [package] (alias: deps1)
depends-manifests [package] (alias: deps-manifests)
depends-indent [package] (alias: deps-indent)
depends-why --target=
vcs [package]
vcs0 [package]
depends-on [package]
depends-on1 [package]
export [--deps-only] --lang=
cflags-only-I [--deps-only] [package]
cflags-only-other [--deps-only] [package]
libs-only-L [--deps-only] [package]
libs-only-l [--deps-only] [package]
libs-only-other [--deps-only] [package]
profile [--length=
plugins --attrib=
If [package] is omitted, the current working directory
is used (if it contains a manifest.xml).
Estos comandos imprimen información acerca de los ROS packages. Todos esos comandos imprimen sus resultados en stdout mientras que los errores son dirigidos a stderr para no confundir programas que esten ejecutando a rospack como un subproceso.
A continuación se desglozan los diferentes comandos:
3.1 rospack help :
Imprime mensaje de ayuda.
3.2 rospack find
find [package]
Imprime la dirección completa de en donde se encuentra el package mencionado, si el package no existe aparece una línea en blanco.
ej.
$ rospack find roscpp
/Users/homer/code/ros/core/roscpp
3.3 rospack list
list
Imprime en líneas separadas el nombre del package seguido por su dirección de localización de todos los packages ubicados en el punto señalado.
ej.
$ rospack list | grep visualization
wxpropgrid /home/kwc/ros-pkg/visualization/wxpropgrid
rviz /home/kwc/ros-pkg/visualization/rviz
visualization_msgs /home/kwc/ros-pkg/visualization_common/visualization_msgs
ogre /home/kwc/ros-pkg/visualization_common/ogre
ogre_tools /home/kwc/ros-pkg/visualization_common/ogre_tools
list-names:
Imprime los nombres de todos los packages en una lista.
3.4 rospack langs :
langs
Este comando se encarga de enlistar todas las librerías de idioma disponibles.
ej.
$ rospack langs
roscpp rospy
3.5 rospack dpeends, depends1, depends-manifests, depends-indent, depends-why
depends [package]:
Imprime una lista de todas las dependencias del package.
ej.
$ rospack depends map_server
gtest
genmsg_cpp
roslib
xmlrpc++
rosthread
roscpp
std_msgs
std_srvs
sdl
ijg_libjpeg
sdl_image
depends1 [package]
Imprime una lista de las dependencias inmediatas del package.
depends-manifests [package]
Imprime una lista de todos los manifest.xml de todas las dependencias del package.
depends-indent [package]
Imprime una lista entera de todas las dependencias en cadena del package.
Depends-why –target=TARGET[package](new in ROS 0.11)
Imprime una lista de todas las dependencias en cadena al TARGET
3.6 rospack vcs, vcs0
vcs [package]
Imprime una lista de todas las pestñas (version control) del manifest.xml y de todas sus dependencias.
vcs0[package]
Funciona igual que el vcs solamente que imprime información únicamente del package en cuestión y no de sus dependencias.
3.7 rospack depends-on, depends-on1
depends-on [package]
Imprime una lista de todos los paqckages que dependen del package base.
Depends-on1 [package]
Imprime una lista de todos los packages que dependen directamente del package en cuestión.
ej.
$ rospack depends-on1 roslang
roscpp
rospy
rosoct
roslisp
3.8 rospack export
export –lang=LANGUAJE –attrib=ATTRIBUTE [package]
Imprime una lista de [export][LANGUAGE ATTRIBUTE=""/][/export] valores del manifest.xml-
OJO!!: Packages cannot contain packages. Esto quiere decir que un package no puede estar dentro de otro package, un package solo pued estar dentro de un stack, entonces los packages pueden interactuar y depende entre sí pero no estas anidados. Un stack es un con junto de packages que en conjunto generan una herramienta en específico.
Manifest.xml
Los manifest contienen información importante acerca de un package, la información más básica que contienen es:
Existen otros tags opcionales, estos se describen a detalle en el wiki.
Stacks:
Los stacks son conjuntos de packages con una intención sencilla y simple pero concreta, con esto quiero decir que hacen una tarea en específico.
Stack manifest.
El manifest de un stack cumple el mismo fin que el manifest.xml de un package solo que en este caso es para un stack.
--------------
3.1 Utilizando rospack y rosstack:
rospack y rosstack son parte del rospack suite. Te permiten obtener información acerca de los pakages y stacks.
Usage:
$ rospack find [package_name]
$ rosstack find [stack_name]
Example:
$ rospack find roscpp
Would return:
YOUR_INSTALL_PATH/ros/core/roscpp
3.2 roscd
roscd es parte del rosbash suite.Te permite cambiar de directoria directamente al directorio de un package o stack.
Nota: Para saber en que directorio te encuentras actualmente puedes revisarlo con pwd.
3.2.1 subdirectorios.
También te puedes mover a un subdirectorio de algún package o stack
Try:
$ roscd roscpp/include
$ pwd
You should see:
YOUR_INSTALL_PATH/ros/core/roscpp/include
3.3.1 Casos especiales de roscd
En caso de poner roscd y nadamas, osease sin ningún otro argumento te envía a $ROS_ROOT osea al directorio donde instalaste ROS.
roscd without an argument will take you to $ROS_ROOT. Try:
$ roscd
$ pwd
You should see:
YOUR_INSTALL_PATH/ros
Nota: echo $ROS_ROOT te indica donde está dicho directorio.
3.3.2: roscd log
roscd log te lleva a donde se encuentran los log files de ROS.
3.4 rosls
rosls funciona de lamisma forma que funciona ls en la terminal de ubuntu solamente que en este caso es para ROS.
ej.
Usage:
$ rosls [locationname[/subdir]]
Example:
$ rosls roscpp_tutorials
Would return:
add_two_ints_client listener_unreliable
add_two_ints_server listener_with_tracked_object
add_two_ints_server_class listener_with_userdata
anonymous_listener Makefile
babbler manifest.xml
CMakeLists.txt node_handle_namespaces
custom_callback_processing notify_connect
listener srv
listener_async_spin talker
listener_multiple time_api
listener_single_message timers
listener_threaded_spin
3.5 Tab Completion
Esta característica trata exclusivamente de que al momento de que escribes algún comando od irección larga y repetitiva puedes apretar tabulador para autocompletar la línea. Cuando hay varias opciones las despliega.
lunes, 21 de junio de 2010
Repaso.
Hoja de estudio de ROS
1.- Beginner Level
1.1.- Navigating the ROS Filesystem:
Tipos de archivos básicos en el sistema.
*Packages:
Son la parte más baja de la organización del software, contienen cualquier cosa, desde librerías hasta ejecutables. Estos paquetes son lo suficientemente funcionales para ser utilizables y lo suficientemente pequeños para no pesar demasiado y poderlos aplicar de forma diversa en un software. Un paquete es un directorio que deciende de ROS_ROOT o ROS_PACKAGE_PATH (el primero indica donde se encuentran los paquetes de ROS y el segundo permite añadir nuevas direcciones). Y contiene un manifest.xml (Es un archivo parte del paquete, puede ser un archivo de texto.)
*Manifest:
Es la mínima especificación acerca de un paquete y soporta una gran variedad de herramientas de ROS, desde herramientas para compilación, para documentación y para distribución. El contenido de un manifest.xml puede variar desde información de quién escribió el package, la licencia del paquete o incluir pestañas de depend y export que ayudan en la instalación y utilización del paquete.
La pestaña de depend señala paquetes de ROS que deben de instalarse en orden de poder instalar el paquete en cuestión. La pestaña export indica que archivos y librerias deben de adquirir paquetes dependientes del paquete en cuestión.
*Stacks:
Los stacks son conjuntos de packages que tienen una finalidad definida en conjunto, mientras que los packages tienen como finalidad ser colecciones de código para fácil reuso los stacks son conjuntos de packages con una funcionalidad especifica como navegación, manipulación etc. y son creados de forma tal que puedan ser compartidos fácilmente. De hecho es el mecanismo principal mediante el cual ROS distribuye software.
*Stacks manifest:
Los manifest de los stacks son lo mismo que los manifest para los packages, tienen especificaciones minimas que apoyan la distribución y la instalación de los ROS stacks. Además de proporcionar metadata para tu stack, una función importante para los stack manifest es la de declarar dependencias con otros stacks.
Al momento de navegar por tu sistema de archivos es fácil diferenciar un package de un manifest. Un package tiene un manifest.xml y un stack tiene un stack.xml.
Nota: Debo de aprender XML urgentemente.
1.- Beginner Level
1.1.- Navigating the ROS Filesystem:
Tipos de archivos básicos en el sistema.
*Packages:
Son la parte más baja de la organización del software, contienen cualquier cosa, desde librerías hasta ejecutables. Estos paquetes son lo suficientemente funcionales para ser utilizables y lo suficientemente pequeños para no pesar demasiado y poderlos aplicar de forma diversa en un software. Un paquete es un directorio que deciende de ROS_ROOT o ROS_PACKAGE_PATH (el primero indica donde se encuentran los paquetes de ROS y el segundo permite añadir nuevas direcciones). Y contiene un manifest.xml (Es un archivo parte del paquete, puede ser un archivo de texto.)
*Manifest:
Es la mínima especificación acerca de un paquete y soporta una gran variedad de herramientas de ROS, desde herramientas para compilación, para documentación y para distribución. El contenido de un manifest.xml puede variar desde información de quién escribió el package, la licencia del paquete o incluir pestañas de depend y export que ayudan en la instalación y utilización del paquete.
La pestaña de depend señala paquetes de ROS que deben de instalarse en orden de poder instalar el paquete en cuestión. La pestaña export indica que archivos y librerias deben de adquirir paquetes dependientes del paquete en cuestión.
*Stacks:
Los stacks son conjuntos de packages que tienen una finalidad definida en conjunto, mientras que los packages tienen como finalidad ser colecciones de código para fácil reuso los stacks son conjuntos de packages con una funcionalidad especifica como navegación, manipulación etc. y son creados de forma tal que puedan ser compartidos fácilmente. De hecho es el mecanismo principal mediante el cual ROS distribuye software.
*Stacks manifest:
Los manifest de los stacks son lo mismo que los manifest para los packages, tienen especificaciones minimas que apoyan la distribución y la instalación de los ROS stacks. Además de proporcionar metadata para tu stack, una función importante para los stack manifest es la de declarar dependencias con otros stacks.
Al momento de navegar por tu sistema de archivos es fácil diferenciar un package de un manifest. Un package tiene un manifest.xml y un stack tiene un stack.xml.
Nota: Debo de aprender XML urgentemente.
lunes, 14 de junio de 2010
Por hoy
Bueno, el dia de hoy pude concluir con los primeros dos modulos del nivel basico del tutorial para el ROS, asi mismo pude comprender muchas cosas y solucionar muchas dudas, que claro surgieron muchas mas pero enfocadas mas a la programacion en ROS. El día de mañana comenzare con el modulo 3.- Building a ROS Package y leere algo acerca de los gaussian mixture models.
Mensaje de Renato por Wave
Para empezar, a mi me parecen muy buenas ideas las que escriben ambos. Sin mas preambulos creo que lo que estamos haciendo en estos intentos de trabajo conjunto (Uresti-Samperio-Hernandez) es consolidar ideas para la navegacion de robots en ambientes estaticos y dinamicos. Esta idea tal cual me parece valiosa por su contenido e impacto que puede tener en una escuela de ingenieria como lo es el Tec CEM. Hasta ahora no le leido mucho al respecto de investigadores Mexicanos.
Los Rovers en Surrey
Me parece que lo inmediatamente necesario es que les describa mas o menos lo que necesitamos que los Rovers hagan. Los rovers, necesitan navegar en ambientes dinamicos por su alto contenido en ruido e informacion falsa. Ademas en un rover es primordial controlar los niveles de energia que se utilizan y proyectan. El proyecto lo tenemos dividido en Vision, Navegacion, Localizacion (Visual) y Pleneacion de Misiones.
1) Nuestra vision es stereoscopica y monocular. Para la vision esteroscopica utilizamos la Bumblebee y lo que queremos realizar es no solamente con vision sino con cualquier otro sensor: Realizar mapas de elevacion para que el robot pueda navegar. Es importante mencionar que el ambiente de un rover lo hemos reducido a ambientes de arena, piedras y mixtos de ambos materiales.
2) La localizacion es un montaje al sistema de vision para encontrar Landmarks y poder proceder con algoritmos de localizacion y mapeo simultaneos (SLAM).
3) La navegacion es cualquier algoritmo que hace que el robot recopile informacion de los sensores y proceda a generar movimiento. El objetivo es que el robot pueda moverse en trayectorias seguras y economicas.
4) La planeacion de misiones, yo lo veo como un oraculo tipo (HAL 9000 en la pelicula 2001), pero a nuestros niveles no ficticios. Basicamente, es un sabedor de las tareas del robot y permite tambien la teleoperacion/cooprocesamiento de cualquier tarea que el robot tiene que ejecutar.
Proyecto de Intercambio
Oscar, si tu interes es la navegacion, en los tutoriales podras encontrar informacion para poder enviar por simulacion al robot de donde este a un trio de coordenadas que muy bien los podrian acoplar a cualquier ambiente simulado. Tambien, podras corroborar como generar un mapa utilizando algoritmos de SLAM. Finalmente, cuando termines esos tutoriales, ROS tiene un "nodo" para utilizar ARIA por tal el pioneer. Por ahi podriamos comenzar para que controles por un lado, los algoritmos basicos de navegacion y por el otro al robot y sensor laser.
ROS basicamente funciona por mensajes, servicios que los diferentes nodos hacen publicos y leen asincronamente. El tutorial que ya has encontrado y uno mas para Instalar ROS y aprender sus conceptos basicos; son mis recopilaciones de informacion de la pagina de ros.org. Mucha gente esta utilizando ROS por su ejecucion tan simple y los multiples paquetes que incorpora.
En lo que podrias ayudarnos aqui en Surrey es generando una primera aproximacion para generar un motion planning para el rover. Supongo que si fueses capaz de generar un control tele-operado y automatizado del robot seria mas que suficiente para nosotros. En realidad esto es lo que fue en algun momento, el primer objetivo de nuestro primer intento de coloboracion cuando yo aun estaba en Bremen. A diferencia que ahora es mi trabajo de tiempo completo :)
Investigacion en Surrey
En el area de aprendizaje, requerimos y estamos investigando actualmente como el robot puede reconocer el tipo de terreno que pisa por medio de lo que ve y lo que siente que pisa (por asi decirlo, con sistemas de control y reconocimiento). Necesitamos que el robot aprenda e incorpore datos (numeros) que van describiendo el terreno. De primera instancia pensamos utilizar Mixture of Gaussians para realizar un aprendizaje no supervisado de la informacion que recopilamos de los sensores de las ruedas y de percepcion visual. El algoritmo es para utilizar un modelo multimodal apropiado para los diferentes tipos de terrenos que pudiera encontrar para que despues pueda ser interpretado en base al riesgo que produce cruzarlo y otras caracteristicas ponderadas de acuerdo a la probabilidad de classificacion.
Conclusiones
En Surrey estamos interesados en tener colaboraciones con instituciones de investigacion. El Surrey Space Centre es uno de los pocos lugares en el Reino Unido donde se hace ingenieria de investigacion, ademas orientada a estudios del espacio. La mayoria de los investigadores estan dedicados a las tele comunicaciones y satelites, teniendo actualmente una empresa hija que se dedica a colocar satelites en el espacio. Tambien tenemos apoyo para proceder hasta ahora comodamente en el area de Robotica Espacial.
Por mi parte, sigo y seguire interesado en proyectos de investigacion con estudiantes del Tecnologico de Monterrey o cualquier otra institucion mexicana. No tenemos pensado montar un equipo en ninguna de las ligas de RoboCup, pero por otro lado me parece que la navegacion basica del robot para enviarlo de un lugar a otro es la parte fundamental para controlar al robot en un ambiente estatico y que evada obstaculos.
En el area de simulacion, estoy dandome tiempo de conocer al Gazebo porque necesitamos navegacion en 3D debido al terreno en que los Rovers navegan. El Stage basicamente lo utilizamos para probar conceptos de navegacion muy exitosamente (con alumnos).
Finalmente, los algoritmos de aprendizaje no supervisado no lo tenemos totalmente establecido y lo escribi porque me parece una buena oportunidad de desarrollo porque estamos en la etapa de definir el problema.
Les mando un saludo y les deseo una exitosa semana.
Renato.
Los Rovers en Surrey
Me parece que lo inmediatamente necesario es que les describa mas o menos lo que necesitamos que los Rovers hagan. Los rovers, necesitan navegar en ambientes dinamicos por su alto contenido en ruido e informacion falsa. Ademas en un rover es primordial controlar los niveles de energia que se utilizan y proyectan. El proyecto lo tenemos dividido en Vision, Navegacion, Localizacion (Visual) y Pleneacion de Misiones.
1) Nuestra vision es stereoscopica y monocular. Para la vision esteroscopica utilizamos la Bumblebee y lo que queremos realizar es no solamente con vision sino con cualquier otro sensor: Realizar mapas de elevacion para que el robot pueda navegar. Es importante mencionar que el ambiente de un rover lo hemos reducido a ambientes de arena, piedras y mixtos de ambos materiales.
2) La localizacion es un montaje al sistema de vision para encontrar Landmarks y poder proceder con algoritmos de localizacion y mapeo simultaneos (SLAM).
3) La navegacion es cualquier algoritmo que hace que el robot recopile informacion de los sensores y proceda a generar movimiento. El objetivo es que el robot pueda moverse en trayectorias seguras y economicas.
4) La planeacion de misiones, yo lo veo como un oraculo tipo (HAL 9000 en la pelicula 2001), pero a nuestros niveles no ficticios. Basicamente, es un sabedor de las tareas del robot y permite tambien la teleoperacion/cooprocesamiento de cualquier tarea que el robot tiene que ejecutar.
Proyecto de Intercambio
Oscar, si tu interes es la navegacion, en los tutoriales podras encontrar informacion para poder enviar por simulacion al robot de donde este a un trio de coordenadas que muy bien los podrian acoplar a cualquier ambiente simulado. Tambien, podras corroborar como generar un mapa utilizando algoritmos de SLAM. Finalmente, cuando termines esos tutoriales, ROS tiene un "nodo" para utilizar ARIA por tal el pioneer. Por ahi podriamos comenzar para que controles por un lado, los algoritmos basicos de navegacion y por el otro al robot y sensor laser.
ROS basicamente funciona por mensajes, servicios que los diferentes nodos hacen publicos y leen asincronamente. El tutorial que ya has encontrado y uno mas para Instalar ROS y aprender sus conceptos basicos; son mis recopilaciones de informacion de la pagina de ros.org. Mucha gente esta utilizando ROS por su ejecucion tan simple y los multiples paquetes que incorpora.
En lo que podrias ayudarnos aqui en Surrey es generando una primera aproximacion para generar un motion planning para el rover. Supongo que si fueses capaz de generar un control tele-operado y automatizado del robot seria mas que suficiente para nosotros. En realidad esto es lo que fue en algun momento, el primer objetivo de nuestro primer intento de coloboracion cuando yo aun estaba en Bremen. A diferencia que ahora es mi trabajo de tiempo completo :)
Investigacion en Surrey
En el area de aprendizaje, requerimos y estamos investigando actualmente como el robot puede reconocer el tipo de terreno que pisa por medio de lo que ve y lo que siente que pisa (por asi decirlo, con sistemas de control y reconocimiento). Necesitamos que el robot aprenda e incorpore datos (numeros) que van describiendo el terreno. De primera instancia pensamos utilizar Mixture of Gaussians para realizar un aprendizaje no supervisado de la informacion que recopilamos de los sensores de las ruedas y de percepcion visual. El algoritmo es para utilizar un modelo multimodal apropiado para los diferentes tipos de terrenos que pudiera encontrar para que despues pueda ser interpretado en base al riesgo que produce cruzarlo y otras caracteristicas ponderadas de acuerdo a la probabilidad de classificacion.
Conclusiones
En Surrey estamos interesados en tener colaboraciones con instituciones de investigacion. El Surrey Space Centre es uno de los pocos lugares en el Reino Unido donde se hace ingenieria de investigacion, ademas orientada a estudios del espacio. La mayoria de los investigadores estan dedicados a las tele comunicaciones y satelites, teniendo actualmente una empresa hija que se dedica a colocar satelites en el espacio. Tambien tenemos apoyo para proceder hasta ahora comodamente en el area de Robotica Espacial.
Por mi parte, sigo y seguire interesado en proyectos de investigacion con estudiantes del Tecnologico de Monterrey o cualquier otra institucion mexicana. No tenemos pensado montar un equipo en ninguna de las ligas de RoboCup, pero por otro lado me parece que la navegacion basica del robot para enviarlo de un lugar a otro es la parte fundamental para controlar al robot en un ambiente estatico y que evada obstaculos.
En el area de simulacion, estoy dandome tiempo de conocer al Gazebo porque necesitamos navegacion en 3D debido al terreno en que los Rovers navegan. El Stage basicamente lo utilizamos para probar conceptos de navegacion muy exitosamente (con alumnos).
Finalmente, los algoritmos de aprendizaje no supervisado no lo tenemos totalmente establecido y lo escribi porque me parece una buena oportunidad de desarrollo porque estamos en la etapa de definir el problema.
Les mando un saludo y les deseo una exitosa semana.
Renato.
Tutoriales instalados
Los tutoriales ya los pude instalar sin problema, ahora procedo a leer toda la info necesaria en:
http://www.ros.org/wiki/ROS/Tutorials
http://www.ros.org/wiki/ROS/Tutorials
Suscribirse a:
Entradas (Atom)