ROS/Tutoriales/ComprendiendoLosNodosDeRos

Introducción

Este post es una traducción del original disponible en la web de ROS. Existen una anotación final en la cual hablo sobre la aplicación de la introspección en las librerías roscpp y su uso con otros lenguajes más allá de python y C++. Es una idea sin probar que iré desarrollando a lo largo del desarrollo de mi modelo de R2D2 (1K-3A). La traducción está inacabada.

Introducción a los grafos

Nodos

Un nodo no es más que un ejecutable dentro de un paquete. Los nodos ROS usan a un cliente ROS para comunicarse con otros nodos. Los nodos pueden publicar o suscribirse a un Tema. Los nodos además proporacionar o usar un servicio.

Librerías de Clientes

La liberías de clientes ROS proporcionan nodos escritos en distintos lenguajes para comunicarse:

  • rospy – librería de clientes python
  • roscpp – librería de clientes C++

roscore

roscore es la primera cosa que deberías iniciar cuando uses ROS.

Por favor corre:

$ roscore

Verás algo similar a esto:

... logging to /.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-bvo-13039.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://bvo:33919/

SUMMARY
========

NODES

starting new master (master configured for auto start)
process[master]: started with pid [13054]
ROS_MASTER_URI=http://bvo:11311/

setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
process[rosout-1]: started with pid [13067]
started core service [/rosout]

Abre un nuevo terminal, usa rosnode para ver que hace roscore en ejecución…

Usando rosnode

rosnode muestra la información de los nodos que están actualmente en ejecución. El comandos rosnode muestra los nodos activos:

$ rosnode list

Verás:

/rosout

Este debería mostrarte unicamente el nodo rosout. Este siempre está ejecutándose.

El comando rosnode info devuelve la información acerca de un determinado nodo.

$ rosnode info /rosout

Este nos devolverá alguna información sobre rosout, como el hecho de que este publica en /rosout_agg.

--------------------------------------------------------------------------------
Node [/rosout]

Publications:
 * /rosout_agg [roslib/Log]

Subscriptions:
 * /clock [unknown type]
 * /rosout [unknown type]

Services:
 * /rosout/set_logger_level
 * /rosout/get_loggers

contacting node http://foo.local:54614/ ...
Pid: 5092

Ahora, vamos a ver más nodos, utilizando el comando rosrun tener otro nodo.

Usando rosrun

rosrun te permite usar el nombre de un paquete para iniciar un nodo con ese paquete (sin necesidad de especificar la ruta).

Usa:

$ rosrun [package_name] [node_name]

Ahora podemos ejecutar turtlesim_node en el paquete turtlesim, en un nuevo terminal:

$ rosrun turtlesim turtlesim_node

Veremos una ventana como la siguiente:

[…]

Resumen

[…]

Fuente: http://www.ros.org/wiki/ROS/Tutorials/UnderstandingNodes

Anuncios

ROS/Tutoriales/NavegandoPorElSistemaDeArchivos

1. Navegando por el sistema de archivos de ROS

Descripción: este tutorial introduce los conceptos sobre el sistema de archivos de ROS, y cubre el uso de roscd, rosls, y las herramientas de la línea de comandos de rospack.

2. Visión general de los conceptos del sistema de archivos

  1. Packages: son paquetes, es el nivel más bajo de organización del software en ROS. Pueden contener cualquier cosa: herramientas, ejecutables…
  2. Manifest: un manifiesto es una descripción de un paquete. El papel más importante es definir las dependencias entre paquetes.
  3. Stacks: son pilas, una colección de paquetes que forman una librería de alto nivel.
  4. Stack Manifest: son manifiestos como los anteriores pero para pilas.

Cuando observes el sistema de archivos, es fácil diferencias entre paquetes y pilas:

  • Un paquete es un directorio con un archivo manifest.xml.
  • Una pila es un directorio que contiene un archivo stack.xml

filesystem

3. Herramientas del sistema de archivos

Para ROS hay una gran cantidad de código esparcido através de varios paquetes y pilas. Navegando con la línea comandos utilizando comandos como ls o cd resulta tedioso en ROS. Por este motivo ROS dispone de su propias herramientas para ayudarte.

3.1 Usando rospack y rosstack

rospack y rosstack forman parte del juego rospack. Esto te permite obtener información sobre paquetes y pilas. En este tutorial unicamente vamos a ver el uso de la opción find, que devuelve la ruta de un paquete o de una pila.

Uso:

$ rospack find [package_name]
$ rosstack find [stack_name]

Ejemplo:

$ rospack find roscpp

Lo que devolverá:

TU_RUTA_DE_INSTALACION/ros/core/roscpp

3.2.- Usando roscd

roscd es parte del juego rosbash. Este comado permite cambiar de directorio (cd) directamente de un paquete o una pila.

Uso:

$ roscd [locationname[/subdir]]

Ejemplo:

$ roscd roscpp

Para verificar que hemos cambiado al directorio del paquete roscpp, usamos el comando de Unix pwd que nos indica el directorio de trabajo:

$ pwd

Devuelve:

TU_RUTA_DE_INSTALACION/ros/core/roscpp

Puedes comprobar que la ruta TU_RUTA_DE_INSTALACION/ros/core/roscpp es la misma que nos mostró el comando rospack find en el ejemplo anterior.

3.2.1.- Subdirectorios

roscd también permite cambiar de un subdirectorio a una pila o a un paquete.

Intenta:

$ roscd roscpp/include
$ pwd

Lo que devolverá:

YOUR_INSTALL_PATH/ros/core/roscpp/include

3.3.- Casos especiales para roscd

Hay pequeños casos especiales que te queremos contar para continuar que no afecta a los paquetes o a las pilas.

3.3.1.- roscd sin argumentos

roscd sin argumentos te devolverá el valor de la variable $ROS_ROOT. Prueba:

Verás:

Esta ruta es la misma definida en $ROS_ROOT.Prueba:

Verás:

3.3.2.- roscd log

roscd log acudirás al directorio donde están almacenados los archivos de log donde ROS los almacena.Posiblemente no tengas ningún archivo de log todavía.

Prueba:

$ roscd log

3.4.- Usando rosls

rosls forma parte del juego de comandos de rosbash. Permite hacer ls directamente sobre paquetes, pilas o lugares comunes dentro de las rutas de los paquetes de ros.

Formato:

$ rosls [locationname[/subdir]]

Ejemplo:

$ rosls roscpp_tutorials

Te devolverá:

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.-  Autocompletado con el tabulador

[…]

4.- Conclusiones

[…]

Original en Inglés: http://www.ros.org/wiki/ROS/Tutorials/NavigatingTheFilesystem

Imagen: http://www.ros.org

Patrón de Diseño: Model View ViewModel (I)

logo

Introducción

El patrón de diseño Modelo Vista VistaModelo es usado por las tecnologías Windows Presentation Foundation, Silverlight y Moonlight. Es un patrón de interfaz de usuario como lo son Modelo Vista Controlador o Modelo Vista Presentación. En este post vamos a ver su uso en WPF/Silverlight/Moonlight.

El patrón MVVM

El patrón MVVM e compone de 3 elementos:

  1. El Modelo es la entidad que representa el concepto de negocio, puede ser cualquier cosa desde una entidad usuario hasta una entidad compleja de almacenaje (que contiene a su vez otras entidades).
  2. La Vista es la representación gráfica del control o un conjunto de controles que muestran el Modelo de datos en pantalla. Una vista puede ser desde un ventana de WPF, una página con Silverlight o una plantilla de un control de datos en XAML. La Vista es un observador (Observer) de la VistaModelo, tan pronto cambie la VistaModelo la interfaz de usuario se actualiza, para esto debe implementar el interfaz INotifyPropertyChanged e implentar el evento PropertyChanged.
  3. La VistaModelo es la que une todo. Contiene la lógica del interfaz de usuario, los comandos, los eventos y una referencia al Modelo. En MVVM, la VistaModelo no se encarga de actualizar los datos mostrados por el interfaz de usuario.

Proyecto en Moonlight bajo MonoDevelop

MonoDevelopLogo

Nota: la librería Moonlight no está disponible directamente para su uso cuando inicias un proyecto Moonlight en MonoDevelop, hay que obtenerla compilando el proyecto Mono, para más información recomiendo la lectura del enlace [2].

Creando la solución

Seleccionamos el menú Archivo|Nuevo|Solución, en la Ventana de Nueva Solución picamos en C# y posteriormente en Moonlight, teniendo dos posibles opciones:

  1. Librería de Controles: una librería con controles XAML sin ejecutables.
  2. Aplicación: una aplicación con un punto de entrada de ejecución.

Agregando las referencias

Para solventar la incidencia de las referencias bajo Windows, puedes utilizar tu instalación de Silverlight disponible en la ruta “C:\Archivos de programa\Microsoft SDKs\Silverlight\v2.0\Reference Assemblies”si tienes instalada la versión 4 o cualquier otra posterior a la 2 saldrá un mensaje de error informándote que requiere Moonlight 3 o Silverlight 2.

Tendrás que eliminar las referencias que vienen por defecto en el proyecto, e insertar las nuevas utilizando el apartado de Ensamblados .Net. Quedando las referencias como siguen:

silverlight_referencias

Pero…

Seguimos sin poder compilar debido a que surge un mensaje de error que nos dice lo siguiente:

Error: Framework ‘Silverlight 2.0’ not installed. (EjemploMoonlight)

Sin embargo si está instalado el SDK, una vez navegas por el foro de Mono te encuentras con que no está implementado el backend para proyectos Silverlight, y alguien debería hacerlo [1]:

Ideally someone would implement a SilverlightFrameworkBackend for the
DotNetTargetRuntime, so that MD could find the Silverlight SDK
assemblies. This would be very easy, but I don’t have time to do it
myself right now.

Editando el complemento Moonlight para MonoDevelop

Es necesario bajarse el código fuente de MonoDevelop de GitHub que parece la versión más actualizada del proyecto y preparar el entorno de desarrollo para Windows.

Pero eso será otra historia.

Bibliografía:

Building Enterprise Applications with Windows Presentation Foundation and the MVVM – Raffaelo Garofalo – Microsoft Press – ISBN 978-0-735-65092-3

Enlaces

[1] – http://go-mono.com/forums/#nabble-td1508851

[2] – http://go-mono.com/forums/#nabble-td2323130

Imagen Logo Moonlight: http://www.go-mono.com/moonlight/

Imagen Logo MonoDevelop: http://www.monodevelop.com

CartujaDotNet: Grupo de Usuarios de .Net en Sevilla

3_1

Introducción

@cartujadotnet es el grupo de usuarios de .net de Sevilla, por lo menos el único por ahora. Hoy hemos quedado 2 de los coordinadores de Cartuja Dot Net y otros programadores de .Net de Sevilla, aunque finalmente sólo hemos contado con la gran presencia de @jmaguilar, autor del blog Variable Not Found e impartidor de cursos en Campus MVP de Krasis.

Contacta con el grupo de usuarios

Para contactar con el grupo de usuarios, puedes seguir la cuenta @cartujadotnet a tu cuenta de twitter, acceder a la web del grupo de usuarios en facebook o escribir un correo electrónico a la dirección cartujadotnet@groups.facebook.com

Próximas charlas

Las charlas de @cartujadotnet las dan los propios componentes del grupo de usuarios, la temática de las charlas impartidas hasta ahora versan desde la robótica con Microsoft Robotics Studio, pasando por la programación en Gtk#, programación del puerto serie… todas ellas impartidas por profesionales que tienen a .Net presente en su vida profesional.

mfa-pro

La siguiente charla que impartirán los miembros de @cartujadotnet versará sobre "Programación de Android en .Net", la inscripción será obligatoria y limitada debido a que el espacio es cedido por una pequeña empresa sevillana dedicada a los blogs corporativos.

Imagen Logo .Net: www.microsoft.com

Imagen Logo Mono Android: http://mono-android.net

A %d blogueros les gusta esto: