7)Understaning ROS Services and Parameters
rosservice es otro medio mediante el cual los nodos se pueden comunicar entre si. Los services permiten a los nodos enviar request y recibir response.
rosservice tiene varios comandos que pueden ser usados en topics.
-rosservice list
Esta función permite ver que servicios están disponibles por el nodo en cuestión.
-rossservice type [service]
Esta función permite saber que tipo de servicio es service, osea que argumentos recibe y cuales envia.
-rosservice call [service] [args]
Esta función llama al servicio en cuestión.
rosparam permite almacenar y manipular información información en el ROS Parameter Server
-rosparam list
Esta función permite desplegar los parametros.
-rosparam set
Esta función permite cambiar el parametro a lo que deseemos
-rosparam get
Esta función permite obtener el valor de un parametro
rosparam set set parameter
rosparam get get parameter
rosparam load load parameters from file
rosparam dump dump parameters to file
rosparam delete delete parameter
rosparam list list parameter names
martes, 29 de junio de 2010
lunes, 28 de junio de 2010
6) Understanding ROS Topics
6) Understanding ROS Topics
Vaya por fin entiendo bien el concepto de para que es un msg, un topic y un nodo. Resulta que cada nodo es una suerte de programa por si mismo que se comunica con otros nodos que hacen otras cosas para hacer en conjunto alguna tarea de un nivel superior. Se comunican a través de una suerte de board llamado topic en donde ellos publican lo que hacen a través de msgs. Se usa un topic de por medio para que sea de uso universal sin importar en que lenguaje esté programado el nodo, osea todo lo que tenga el nodo dentro. Un nodo puede publicar y/o subscribirse a un topic para enviar y/o recibir msgs que le indican cosas, tareas, info etc.
-rxgraph
Esta función pone en pantalla un diagrama en donde muestra los diferentes nodos que se están utilizando y los topicos que los interconectan.
-rostopic
Permite obtener información de distintos tipos acerca de un tipo, desde a que frecuencia se comunica, la lista de topicos activos, el tipo de topico etc.
Para ver en la terminal lo que está enviando un topic es necesario utilizar la función echo. Por ejemplo:
$ rostopic echo /turtle1/command_velocity
Para cada tipo de tópico hay un tipo de message que se utiliza para la comunicación a través del tópico. Para saber que tipo de mensaje es se escribe:
-rostopic type “topico”
-rostopic pub [topic] [msg_type] [args]
Esta función se utiliza para enviar info a un topico.
-rostopic hz [topic]
Esta función se utiliza para ver a que rate está enviando y recibiendo info el topico.
-rxplot
Esta función se utilliza para crear una gráfica dinámica de como estan siendo utilizadas las funciones de un topico en función del tiempo.
Vaya por fin entiendo bien el concepto de para que es un msg, un topic y un nodo. Resulta que cada nodo es una suerte de programa por si mismo que se comunica con otros nodos que hacen otras cosas para hacer en conjunto alguna tarea de un nivel superior. Se comunican a través de una suerte de board llamado topic en donde ellos publican lo que hacen a través de msgs. Se usa un topic de por medio para que sea de uso universal sin importar en que lenguaje esté programado el nodo, osea todo lo que tenga el nodo dentro. Un nodo puede publicar y/o subscribirse a un topic para enviar y/o recibir msgs que le indican cosas, tareas, info etc.
-rxgraph
Esta función pone en pantalla un diagrama en donde muestra los diferentes nodos que se están utilizando y los topicos que los interconectan.
-rostopic
Permite obtener información de distintos tipos acerca de un tipo, desde a que frecuencia se comunica, la lista de topicos activos, el tipo de topico etc.
Para ver en la terminal lo que está enviando un topic es necesario utilizar la función echo. Por ejemplo:
$ rostopic echo /turtle1/command_velocity
Para cada tipo de tópico hay un tipo de message que se utiliza para la comunicación a través del tópico. Para saber que tipo de mensaje es se escribe:
-rostopic type “topico”
-rostopic pub [topic] [msg_type] [args]
Esta función se utiliza para enviar info a un topico.
-rostopic hz [topic]
Esta función se utiliza para ver a que rate está enviando y recibiendo info el topico.
-rxplot
Esta función se utilliza para crear una gráfica dinámica de como estan siendo utilizadas las funciones de un topico en función del tiempo.
5) Entendiendo los Nodos.
5) Entendiendo los Nodos.
Un nodo es un conjunto de packages que realizan una tarea completa en conjunto. En este modulo se aprende a utilizar los siguientes comandos:
-roscore
Este comando es lo primerito que se tiene que correr si se piensa comenzar a utilizar ROS
-rosnode
Da una lista de los nodos que se encuentran activos
-rosnode info/”node”
Despliega información acerca de dicho nodo.
-rosrun [package_name] [Node_Name] corre el nodo que se encuentra en dicho package.
-rosnode ping
Envía pings para ver si el nodo se encuentra activo.
Un nodo es un conjunto de packages que realizan una tarea completa en conjunto. En este modulo se aprende a utilizar los siguientes comandos:
-roscore
Este comando es lo primerito que se tiene que correr si se piensa comenzar a utilizar ROS
-rosnode
Da una lista de los nodos que se encuentran activos
-rosnode info/”node”
Despliega información acerca de dicho nodo.
-rosrun [package_name] [Node_Name] corre el nodo que se encuentra en dicho package.
-rosnode ping
Envía pings para ver si el nodo se encuentra activo.
4)Creating a ROS msg and srv.
4)Creating a ROS msg and srv.
Los archivos msg son simples documentos de texto qe describe los campos de un mensage de ROS. Un utilizados para generar codigo para mensajes en diferentes lenguajes de programación.
Los srv describen un servicio, se compone principalmente de dos partes la solicitud y la respuesta.
Para creacr un msg primero te diriges al paquete en donde lo vas a crear, despues lo creas y por último lo editas.
ej.
$ roscd beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
¿Porque tenemos que abrir CmakeLists.txt en este paso?
Al momento de utilizar rosmsg se puede ver el contenido de un msg.
Example:
$ rosmsg show beginner_tutorials/Num
You will see:
int64 num
Para crear un srv se hace de la misma forma.
$ roscd beginner_tutorials
$ mkdir srv
Así mismo se puede copiar de otro directorio utilizando roscp.
Usage:
$ roscp [package_name] [file_to_copy_path] [copy_path]
Now we can copy a service from the rospy_tutorials package:
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
Para ver el contenido de un srv se utiliza el comando rossrv show.
ej.
Example:
$ rossrv show beginner_tutorials/AddTwoInts
You will see:
int64 a
int64 b
---
int64 sum
Siempre que se modifica un msg se tiene que compilar nuevamente el package.
$ rosmake beginner_tutorials
Ayuda.
Para obtener ayuda acerca de un comando se puede escrobir depsues del mismo: -h
Esto sirve para la mayor parte de comandos existentes y permite desplegar información acerca del mismo comando en pantalla.
ej.
Try:
$ rosmsg -h
You should see a list of different rosmsg subcommands.
Commands:
rosmsg show Show message description
rosmsg users Find files that use message
rosmsg md5 Display message md5sum
rosmsg package List messages in a package
rosmsg packages List packages that contain messages
You can also get help for subcommands
$ rosmsg show -h
This shows the arguments that are needed for rosmsg show:
Usage: rosmsg show [options]
Options:
-h, --help show this help message and exit
-r, --raw show raw message text, including comments
Los archivos msg son simples documentos de texto qe describe los campos de un mensage de ROS. Un utilizados para generar codigo para mensajes en diferentes lenguajes de programación.
Los srv describen un servicio, se compone principalmente de dos partes la solicitud y la respuesta.
Para creacr un msg primero te diriges al paquete en donde lo vas a crear, despues lo creas y por último lo editas.
ej.
$ roscd beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
¿Porque tenemos que abrir CmakeLists.txt en este paso?
Al momento de utilizar rosmsg se puede ver el contenido de un msg.
Example:
$ rosmsg show beginner_tutorials/Num
You will see:
int64 num
Para crear un srv se hace de la misma forma.
$ roscd beginner_tutorials
$ mkdir srv
Así mismo se puede copiar de otro directorio utilizando roscp.
Usage:
$ roscp [package_name] [file_to_copy_path] [copy_path]
Now we can copy a service from the rospy_tutorials package:
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
Para ver el contenido de un srv se utiliza el comando rossrv show.
ej.
Example:
$ rossrv show beginner_tutorials/AddTwoInts
You will see:
int64 a
int64 b
---
int64 sum
Siempre que se modifica un msg se tiene que compilar nuevamente el package.
$ rosmake beginner_tutorials
Ayuda.
Para obtener ayuda acerca de un comando se puede escrobir depsues del mismo: -h
Esto sirve para la mayor parte de comandos existentes y permite desplegar información acerca del mismo comando en pantalla.
ej.
Try:
$ rosmsg -h
You should see a list of different rosmsg subcommands.
Commands:
rosmsg show Show message description
rosmsg users Find files that use message
rosmsg md5 Display message md5sum
rosmsg package List messages in a package
rosmsg packages List packages that contain messages
You can also get help for subcommands
$ rosmsg show -h
This shows the arguments that are needed for rosmsg show:
Usage: rosmsg show [options]
Options:
-h, --help show this help message and exit
-r, --raw show raw message text, including comments
3)Construyendo un Package
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.
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.
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
Instalacion ROS
Se instalo el programa ROS en base a lo indicado en la URL:
http://www.ros.org/wiki/ROS/Installation/Ubuntu/Deb
La instalacion no presento ningun problema aparente, proseguire con las instalacion de los tutoriales.
http://www.ros.org/wiki/ROS/Installation/Ubuntu/Deb
La instalacion no presento ningun problema aparente, proseguire con las instalacion de los tutoriales.
Bienvenido
Estimado Lector.
Este blog esta destinado exclusivamente a mantener un registro de mi investigacion en navegacion para robots pioneer en el CEM y el SSC, es e uso exclusivo para mi y mis asesores, no obstante es probable que lo abra a la web en general.
Saludos.
Este blog esta destinado exclusivamente a mantener un registro de mi investigacion en navegacion para robots pioneer en el CEM y el SSC, es e uso exclusivo para mi y mis asesores, no obstante es probable que lo abra a la web en general.
Saludos.
Suscribirse a:
Entradas (Atom)