## page was renamed from Robotica/PlayerStageGazebo #acl BecariosGrupo:read,write,revert All:read #acl All:read = Player/Stage/Gazebo = == Objetivos == Estudiar el conjunto de programas Player/Stage/Gazebo para ser utilizado con RoMAA en el control y simulación == Introducción == [[http://playerstage.sourceforge.net/ | Player, Stage y Gazebo]] son tres piezas de software originalmente desarrollado en el laboratorio de investigación de robótica de la University of Southern California (USC). Ahora es un proyecto activo de !SourceForge.net, usado por un gran número de investigadores alrededor del mundo. ''When Shakespeare wrote that "All the world's a stage, and all the men and women merely players," he couldn't have forseen that he was giving a name to a type of open source robotics software that wouldn't be invented for another 400 years or so.'' == Player == ''Player'' es un servidor de red para control de robots que corre abordo del robot, es una capa de abstracción de hardware (HAL) para dispositivos robóticos. Provee un medio simple de interfaz entre los actuadores y sensores del robot sobre redes IP. El programa cliente se comunica con ''Player'' sobre un socket TCP, leyendo datos de los sensores, escribiendo comandos a los actuadores, y configurando los dispositivos en operación. Puesto que ''Player'' usa el modelo cliente/servidor basado en sockets TCP los programas de control de robots se pueden escribir en cualquier lenguaje de programación y puede ser ejecutado en cualquier computadora con conectividad a la red del robot, además ''Player'' soporta múltiples conexiones concurrentes de clientes a dispositivos, creando nuevas posibilidades de control y sensado distribuido y colaborativo. Originalmente ''Player'' fue creado para la plataforma de familia de robot !ActivMedia Pioneer2 pero ha ido creciendo para soportar un gran conjunto de plataformas robóticas. ''Player'' requiere un entorno con POSIX threads (pthreads), un stack TCP, y C/C++. Los scripts de configuración necesitan un shell bash (tal como el de Linux). ''Player'' es una interfaz de bajo nivel, provee una interfaz estandar pero no hace ninguna asunción sobre el programa de control del robot. Soporta múltiples dispositivos sobre una única conexión y puede soportar cualquier número de clientes. Los drivers de ''Player'' no siempre son una interfaz que representa controles básicos tales como moviemiento y sensores, algunos drivers proveen características "inteligentes" tales como path-planning, Vector Field Histogram (VFH+), Adaptive Monte Carlo Localization (AMCL) entre otros. Los programas de aplicación se linkean con las librerias ''Player'' cliente que proveen una conexión al servidor ''Player''. El servidor ''Player'' generalmente reside en el robot y se conecta a los drivers de dispositivo de ''Player''. Los drivers de dispositivos mapean un dispositivo lógico, generando una abstracción de lo que el cliente ve. La ventaja de esta metodología es la misma que cualquier arquitectura cliente/servidor haciendolo fácil de comprender y probar. Hay suficiente dispositivos simulados y robots para utilizar con ''Stage'' y ''Gazebo'' así el usuario puede experimentar facilmente con ''Player''. Escribir drivers de dispositivos para un nuevo robots y sus periféricos es relativamente directo. Como con cualquier driver de dispositivos de un sistema operativo, un único driver puede manejar cualquier número de dispositivos físicos. Por ejemplo, el driver estándar para el sensor laser rangefinder SICK LMS200 disponible se corresponde a la interfaz abstracta "laser". Una conexión se podría especificar como localhost:6665:laser:0 para el puerto 6665, con la interfaz lógica laser 0. '''Estructura de Player''' ''Player'' trabaja creando varias capas de abstracción, ocultando el control de alto nivel del cliente (que contiene la lógica) con la implementación de bajo nivel específica del hardware. Al hacer esto se puede crear código modular, intercambiable entre hardware y proyectos. Esto se logra utilizando conceptos tales como clientes, server, proxies, y drivers. ([[attachment:player_struct.odg | player_struct.odg]]) {{attachment:playerstructure.jpg|Player structure|width=300}} '''Arquitectura de Player''' ([[attachment:player_arch.odg | player_arch.odg]]) {{attachment:playerarch.png|Player architecture|width=800}} === Interfaces, Drivers y Dispositivos === En ''Player'' hay 3 conceptos claves: * '''Interface:''' Es una especificación de como interactuar con cierta clase sensores, actuadores o algoritmos de robots. Las intefaces definen la sintaxis y semántica de los mensajes que se puede intercambiar con entidades de la misma clase. * '''Driver:''' Es una pieza de software (generalmente escrita en C++) que se comunica con los sensores, actuadores o algoritmos del robot, traduciendo sus entradas y salidas para adaptarse a una o mas interfaces. El driver esconde la especificación de cualquier entidad haciendolo parecer el mismo para cualquier otra entidad de su misma clase. * '''Dispositivo:''' Un driver limita con una interface. Todos los mensajes en ''Player'' ocurren entre dispositivos, a través de las interfaces. Los drivers, aunque realizan la mayoría del trabajo, nunca se acceden directamente. ''Player'' incluye muchas interfaces predefinidas para los dispositivos o algoritmos. La tarea del driver plugin es de crear un enlace entre el dispositivo o el algoritmo y la(s) interface(s) predefinidas que mejor lo representa. === Player Server === A partir de la versión 2.0 Player esta dividido en dos mitades, el ''core'' y el ''transport layer''. Player ''core'' está dividido en las librerías ''core'' {{{libplayercore}}}, y la librería de driver {{{libplayerdrivers}}}. La capa de transporte está implementada en una combinación de dos librerías: {{{libpleyaertcp}}} y {{{libplayerxdr}}}. === Player Cliente === Las [[http://playerstage.sourceforge.net/doc/Player-2.1.0/player/group__clientlibs.html | librerías clientes]] están disponibles en varios lenguajes para facilitar el desarrollo de programas clientes TCP. Probablemente uses una de estas librerías para desarrollar los programas de control de robot si se utiliza el servidor Player ya sea con un hardware o simulado. Las librerías disponibles por el proyecto son: * {{{libplayerc}}} Librerías clientes C para el servidor Player * {{{libplayerc_py}}} Librerías clientes python para el servidor Player * {{{libplayerc++}}} Librerías clientes C++ para el servidor Player Existen otras librerias de [[http://playerstage.sourceforge.net/wiki/PlayerClientLibraries | contribución]]. '''Compilar''' `$ g++ -o example0 `pkg-config --cflags playerc++` example0.cc `pkg-config --libs playerc++`` == Stage == ''Stage'' es un simulador de múltiples robots del proyecto ''Player''. ''Stage'' simula una población de robots, sensores y objetos en un entorno bitmap 2D. ''Stage'' provee de robots virtuales de modo que ''Player'' interactue con el entorno simulado en lugar de dispositivos físicos, dispone de varios modelos de sensores incluyendo sonares, sensores laser rangefinder, cámaras pan-tilt-zoom con detección de blobs de color y odometría. ''Stage'' es adecuado para investigaciones de sistemas autónomos multi-agente, puesto que provee de un modelo simple de bajo requerimiento computacional de múltiples dispositivos en lugar de emular cada dispositivo con gran fidelidad. == Gazebo == ''Gazebo'' es un simulador de múltiples robots en entornos exteriores. Tal como ''Stage'', es capaz de simular una población de robots, sensores y objetos pero en un entorno tridimensional. ''Gazebo'' genera realimentación realista de sensores e interacción física entre objetos, incluyendo simulación precisa de la física de cuerpos rígidos con su dinámica. '''Gazebo svn''' svn info https://playerstage.svn.sourceforge.net/svnroot/playerstage/code/gazebo/trunk '''Ejecutar Gazebo''' Ir al directorio donde esta construida la aplicación (gazebo) y ejecutar `./gazebo world/archivo_mundo.world"` cargando el archivo del mundo a visualizar. '''Gazebo con Player''' * en una terminal ejecutar: =./gazebo world/pioneer2dx.world= * en otra terminal: {{{player player/gazebo.cfg}}} * en otra terminal: {{{playerv}}}, {{{playerjoy}}}, etc, para manejar el robot en el entorno simulado 3D. = Publicaciones que utilizan Player/Stage = * '''SLAM''': Wolf, D., & Sukhatme, G. (2005, Jul). Mobile robot simultaneous localization and mapping in dynamic environments. Autonomous Robots, 19(1), 53–65. [[http://de.scientificcommons.org/40526210 | Ver]] * '''Learning''': Provost, J., Kuipers, B., & Miikkulainen, R. (2004). Self-organizing perceptual and temporal abstraction for robot reinforcement learning. In AAAI-04 workshop on learning and planning in markov processes. [[http://www.aaai.org/Papers/Workshops/2004/WS-04-08/WS04-08-014.pdf | Ver]] * '''Education''': Matari ́ , M. (2004, Mar). Robotics education for all ages. In Proceedings, AAAI spring symposium on accessible, hands-on AI and robotics education. [[http://robotics.usc.edu/~maja/publications/aaaissymp04-edu.pdf | Ver]] * '''HRI task allocation''': Tews, A., Matari ́ , M., & Sukhatme, G. (2003, Sep). A scalable approach to human-robot interaction. In IEEE international conference on robotics and automation (p. 1665-1670). Taipei, Taiwan [[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1241833 | Ver]] * '''Multi-robot sensing''': Jung, B., & Sukhatme, G. (2002, Nov). Tracking targets using multiple robots: The effect of environment occlusion. Autonomous Robots, 13(3), 191–205. [[http://cres.usc.edu/pubdb_html/files_upload/43.pdf | Ver]] * '''Multi-robot exploration''': Howard, A., Matari ́ , M., & Sukhatme, G. (2002). An incremental self-deployment algorithm for mobile sensor networks. Autonomous Robots Special Issue on Intelligent Embedded Systems, 13(2), 113–126. [[http://www-robotics.usc.edu/~ahoward/pubs/howard_ar01.pdf | Ver]] * '''Multi-robot mapping''': Howard, A., Parker, L., & Sukhatme, G. (2004, Jun). The SDR experience: Experiments with a large-scale heterogenous mobile robot team. In 9th international symposium on experimental robotics 2004. Singapore. [[http://www.cs.utk.edu/~parker/publications/ISER-04.pdf | Ver]] * '''Multi-robot localization''': Howard, A., Matari ́ , M., & Sukhatme, G. (2003, Sep). Putting the ‘I’ in ‘Team’: An ego-centric approach to cooperative localization. In IEEE international conference on robotics and automation (pp. 868–892). Taipei, Taiwan. [[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1241702 | Ver]] * '''Multi-robot coordonation''': Jones, C., & Matari ́ , M. (2004, Sep). Automatic synthesis of communication-based coordinated multi-robot systems. In IEEE/RSJ international conference on intelligent robots and systems (pp. 381–387). Sendai, Japan. [[http://cres.usc.edu/pubdb_html/files_upload/398.pdf | Ver]] * '''Multi-robot formation''': Fredslund, J., & Matari ́ , M. (2002, Oct). A general, local algorithm for robot formations. IEEE Transactions on Robotics and Automation, Special Issue on Multi-Robot Systems, 18(5), 837–846. * '''Multi-robot task allocation''': Gerkey, B., & Matari ́ , M. (2002, Oct). Sold!: Auction methods for multi-robot coordination. IEEE Transactions on Robotics and Automation, Special Issue on Multi-Robot Systems, 18(5), 758–768. (Also Technical Report IRIS-01-399). [[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1067996 | Ver]] = Links = '''General''' *[[http://playerstage.sourceforge.net/ | The Player project]] *[[http://playerstage.sourceforge.net/wiki/index.php/PlayerHistory | Player History]] *[[http://motion.mee.ucsb.edu/wiki/index.php/Player/Stage_Tutorial | Player/Stage Tutorial]] *[[http://allievi.sssup.it/user/guillo/documentation.html | Player/Stage Slides]] *[[http://www.nabble.com/Player-Stage-Gazebo-f4302.html | Player/Stage/Gazebo forum]] *[[http://www.linuxdevices.com/articles/AT5739475111.html | A review of robotics software platforms]] *[[http://www.cs.duke.edu/csed/tapia09/index.html | Tapia 2009 Robotics Competition]] '''Instalación''' * [[http://blog.papersize.org/?cat=4 | Instalación de player/stage/gazebo en Debian]] *[[http://www.irobotics.org/gazebo08.html | Player 2.1.1 / Gazebo 0.8 SVN rev. 6886]] *[[http://www.irobotics.org/playerstage.html | Player 2.1.1 / Stage 3.0.1]] *[[http://vlab.pjwstk.edu.pl/docs/player_installation.pdf | Player/Stage/Gazebo software installation]] *[[http://svvtucson.net/troubleshoot/ | Troubleshoot]] = Referencias = * [1] - "Really reused robot code from the player/stage project". Richard T. Vaughan and Brian Gerkey. In Davide Brugali, editor, Software Engineering for Experimental Robotics. Springer, 2007. [[http://www.cs.sfu.ca/~vaughan/doc/vaughan_reallyreused.pdf | Descargar]] * [2] - "Player 2.0: Toward a Practical Robot Programming Framework" Toby H.J. Collett, Bruce A. !MacDonald, and Brian P. Gerkey. In Proc. of the Australasian Conf. on Robotics and Automation (ACRA 2005), Sydney, Australia, December 5-7, 2005. [[http://www.ai.sri.com/~gerkey/papers/acra2005.pdf | Descargar]] * [3] - "On Device Abstractions For Portable, Resuable Robot Code". Richard T. Vaughan, Brian P. Gerkey, and Andrew Howard. In Proc. of the IEEE/RSJ Intl. Conf. on Intelligent Robots and Systems (IROS 2003), pages 2121-2427, Las Vegas, Nevada, October 27 - 31, 2003. (Also Technical Report CRES-03-009) [[http://www.ai.sri.com/~gerkey/papers/iros03-abstraction.pdf | Descargar]] * [4] - "The Player/Stage Project: Tools for Multi-Robot and Distributed Sensor Systems". Brian P. Gerkey, Richard T. Vaughan, and Andrew Howard. In Proc. of the Intl. Conf. on Advanced Robotics (ICAR 2003), pages 317-323, Coimbra, Portugal, June 30 - July 3, 2003. [[http://www.ai.sri.com/~gerkey/papers/icar03-player.pdf | Descargar]] * [5] - "Most Valuable Player: A Robot Device Server for Distributed Control". Brian P. Gerkey, Richard T. Vaughan, Kasper Støy, Andrew Howard, Gaurav S Sukhatme, and Maja J Mataric´. In Proc. of the IEEE/RSJ Intl. Conf. on Intelligent Robots and Systems (IROS 2001), pages 1226-1231, Wailea, Hawaii, October 29 - November 3, 2001. [[http://www.ai.sri.com/~gerkey/papers/iros01-player.pdf | Descargar]] * [6] - "Player Robot Server". Brian P. Gerkey, Kasper Støy and Richard T. Vaughan. Technical Report IRIS-00-392, Institute for Robotics and Intelligent Systems, School of Engineering, University of Southern California, November 2000. [[http://www.ai.sri.com/~gerkey/papers/player.pdf | Descargar]]