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.
Suscribirse a:
Entradas (Atom)