<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>Robotica/RDE/RDEPlayerStageGazebo</title><revhistory><revision><revnumber>8</revnumber><date>2011-04-20 21:54:50</date><authorinitials>GonzaloPerezPaina</authorinitials><revremark>organización de la wiki</revremark></revision><revision><revnumber>7</revnumber><date>2010-06-05 22:41:18</date><authorinitials>GonzaloPerezPaina</authorinitials></revision><revision><revnumber>6</revnumber><date>2010-06-05 22:40:14</date><authorinitials>GonzaloPerezPaina</authorinitials></revision><revision><revnumber>5</revnumber><date>2010-06-05 22:39:31</date><authorinitials>GonzaloPerezPaina</authorinitials></revision><revision><revnumber>4</revnumber><date>2010-06-05 22:37:54</date><authorinitials>GonzaloPerezPaina</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-06-05 22:37:05</date><authorinitials>GonzaloPerezPaina</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-06-02 18:38:35</date><authorinitials>GonzaloPerezPaina</authorinitials></revision></revhistory></articleinfo><section><title>Player/Stage/Gazebo</title><section><title>Objetivos</title><para>Estudiar el conjunto de programas Player/Stage/Gazebo para ser utilizado con RoMAA en el control y simulación  </para></section><section><title>Introducción</title><para><ulink url="http://playerstage.sourceforge.net/">Player, Stage y Gazebo</ulink> 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. </para><para><emphasis>When Shakespeare wrote that &quot;All the world's a stage, and all the men and women merely players,&quot; 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.</emphasis> </para></section><section><title>Player</title><para><emphasis>Player</emphasis> 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 <emphasis>Player</emphasis> sobre un socket TCP, leyendo datos de los sensores, escribiendo comandos a los actuadores, y configurando los dispositivos en operación. </para><para>Puesto que <emphasis>Player</emphasis> 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 <emphasis>Player</emphasis> soporta múltiples conexiones concurrentes de clientes a dispositivos, creando nuevas posibilidades de control y sensado distribuido y colaborativo. Originalmente <emphasis>Player</emphasis> fue creado para la plataforma de familia de robot ActivMedia Pioneer2 pero ha ido creciendo para soportar un gran conjunto de plataformas robóticas. <emphasis>Player</emphasis> 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). </para><para><emphasis>Player</emphasis> 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 <emphasis>Player</emphasis> no siempre son una interfaz que representa controles básicos tales como moviemiento y sensores, algunos drivers proveen características &quot;inteligentes&quot; tales como path-planning, Vector Field Histogram (VFH+), Adaptive Monte Carlo Localization (AMCL) entre otros. </para><para>Los programas de aplicación se linkean con las librerias <emphasis>Player</emphasis> cliente que proveen una conexión al servidor <emphasis>Player</emphasis>. El servidor <emphasis>Player</emphasis> generalmente reside en el robot y se conecta a los drivers de dispositivo de <emphasis>Player</emphasis>. Los drivers de dispositivos mapean un dispositivo lógico, generando una abstracción de lo que el cliente ve. </para><para>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 <emphasis>Stage</emphasis> y <emphasis>Gazebo</emphasis> así el usuario puede experimentar facilmente con <emphasis>Player</emphasis>. 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 &quot;laser&quot;. Una conexión se podría especificar como localhost:6665:laser:0 para el puerto 6665, con la interfaz lógica laser 0. </para><para><emphasis role="strong">Estructura de Player</emphasis>  </para><para><emphasis>Player</emphasis> 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. (<ulink url="https://ciii.frc.utn.edu.ar/wiki/Robotica/RDE/RDEPlayerStageGazebo/wiki/Robotica/RDE/RDEPlayerStageGazebo?action=AttachFile&amp;do=get&amp;target=player_struct.odg">player_struct.odg</ulink>) </para><para><inlinemediaobject><imageobject><imagedata fileref="https://ciii.frc.utn.edu.ar/wiki/Robotica/RDE/RDEPlayerStageGazebo?action=AttachFile&amp;do=get&amp;target=playerstructure.jpg" width="300"/></imageobject><textobject><phrase>Player structure</phrase></textobject></inlinemediaobject> </para><para><emphasis role="strong">Arquitectura de Player</emphasis> (<ulink url="https://ciii.frc.utn.edu.ar/wiki/Robotica/RDE/RDEPlayerStageGazebo/wiki/Robotica/RDE/RDEPlayerStageGazebo?action=AttachFile&amp;do=get&amp;target=player_arch.odg">player_arch.odg</ulink>)  </para><para><inlinemediaobject><imageobject><imagedata fileref="https://ciii.frc.utn.edu.ar/wiki/Robotica/RDE/RDEPlayerStageGazebo?action=AttachFile&amp;do=get&amp;target=playerarch.png" width="800"/></imageobject><textobject><phrase>Player architecture</phrase></textobject></inlinemediaobject> </para><section><title>Interfaces, Drivers y Dispositivos</title><para>En <emphasis>Player</emphasis> hay 3 conceptos claves: </para><itemizedlist><listitem><para><emphasis role="strong">Interface:</emphasis> 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. </para></listitem><listitem><para><emphasis role="strong">Driver:</emphasis> 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. </para></listitem><listitem><para><emphasis role="strong">Dispositivo:</emphasis> Un driver limita con una interface. Todos los mensajes en <emphasis>Player</emphasis> ocurren entre dispositivos, a través de las interfaces. Los drivers, aunque realizan la mayoría del trabajo, nunca se acceden directamente. </para></listitem></itemizedlist><para><emphasis>Player</emphasis> 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. </para></section><section><title>Player Server</title><para>A partir de la versión 2.0 Player esta dividido en dos mitades, el <emphasis>core</emphasis> y el <emphasis>transport layer</emphasis>. Player <emphasis>core</emphasis> está dividido en las librerías <emphasis>core</emphasis> <code>libplayercore</code>, y la librería de driver <code>libplayerdrivers</code>. La capa de transporte está implementada en una combinación de dos librerías: <code>libpleyaertcp</code> y <code>libplayerxdr</code>.  </para></section><section><title>Player Cliente</title><para>Las <ulink url="http://playerstage.sourceforge.net/doc/Player-2.1.0/player/group__clientlibs.html">librerías clientes</ulink> están disponibles en varios lenguajes para facilitar el desarrollo de programas clientes TCP.  </para><para>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. </para><para>Las librerías disponibles por el proyecto son: </para><itemizedlist><listitem><para><code>libplayerc</code> Librerías clientes C para el servidor Player </para></listitem><listitem><para><code>libplayerc_py</code> Librerías clientes python para el servidor Player </para></listitem><listitem><para><code>libplayerc++</code> Librerías clientes C++ para el servidor Player </para></listitem></itemizedlist><para>Existen otras librerias de <ulink url="http://playerstage.sourceforge.net/wiki/PlayerClientLibraries">contribución</ulink>. </para><para><emphasis role="strong">Compilar</emphasis>  </para><para><code>$ g++ -o example0 </code>pkg-config --cflags playerc++<code> example0.cc </code>pkg-config --libs playerc++ </para></section></section><section><title>Stage</title><para><emphasis>Stage</emphasis> es un simulador de múltiples robots del proyecto <emphasis>Player</emphasis>. <emphasis>Stage</emphasis> simula una población de robots, sensores y objetos en un entorno bitmap 2D. <emphasis>Stage</emphasis> provee de robots virtuales de modo que <emphasis>Player</emphasis> 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. <emphasis>Stage</emphasis> 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. </para></section><section><title>Gazebo</title><para><emphasis>Gazebo</emphasis> es un simulador de múltiples robots en entornos exteriores. Tal como <emphasis>Stage</emphasis>, es capaz de simular una población de robots, sensores y objetos pero en un entorno tridimensional. <emphasis>Gazebo</emphasis> 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. </para><para><emphasis role="strong">Gazebo svn</emphasis>  </para><para>svn info <ulink url="https://playerstage.svn.sourceforge.net/svnroot/playerstage/code/gazebo/trunk"/> </para><para><emphasis role="strong">Ejecutar Gazebo</emphasis>  </para><para>Ir al directorio donde esta construida la aplicación (gazebo) y ejecutar  </para><para><code>./gazebo world/archivo_mundo.world&quot;</code> </para><para>cargando el archivo del mundo a visualizar. </para><para><emphasis role="strong">Gazebo con Player</emphasis>  </para><itemizedlist><listitem><para>en una terminal ejecutar: =./gazebo world/pioneer2dx.world= </para></listitem><listitem><para>en otra terminal: <code>player player/gazebo.cfg</code> </para></listitem><listitem><para>en otra terminal: <code>playerv</code>, <code>playerjoy</code>, etc, para manejar el robot en el entorno simulado 3D. </para></listitem></itemizedlist></section></section><section><title>Publicaciones que utilizan Player/Stage</title><itemizedlist><listitem><para><emphasis role="strong">SLAM</emphasis>: Wolf, D., &amp; Sukhatme, G. (2005, Jul). Mobile robot simultaneous localization and mapping in dynamic environments. </para><itemizedlist><listitem override="none"><para>Autonomous Robots, 19(1), 5365. <ulink url="http://de.scientificcommons.org/40526210">Ver</ulink> </para></listitem></itemizedlist></listitem><listitem><para><emphasis role="strong">Learning</emphasis>: Provost, J., Kuipers, B., &amp; Miikkulainen, R. (2004). Self-organizing perceptual and temporal abstraction for robot </para><itemizedlist><listitem override="none"><para>reinforcement learning. In AAAI-04 workshop on learning and planning in markov processes. <ulink url="http://www.aaai.org/Papers/Workshops/2004/WS-04-08/WS04-08-014.pdf">Ver</ulink> </para></listitem></itemizedlist></listitem><listitem><para><emphasis role="strong">Education</emphasis>: Matari ́<!--RAW HTML: &#769;--> , M. (2004, Mar). Robotics education for all ages. In Proceedings, AAAI spring symposium on accessible, hands-on AI and robotics education. <ulink url="http://robotics.usc.edu/~maja/publications/aaaissymp04-edu.pdf">Ver</ulink> </para></listitem><listitem><para><emphasis role="strong">HRI task allocation</emphasis>: Tews, A., Matari ́<!--RAW HTML: &#769;--> , M., &amp; Sukhatme, G. (2003, Sep). A scalable approach to human-robot interaction. In IEEE international conference on robotics and automation (p. 1665-1670). Taipei, Taiwan <ulink url="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1241833">Ver</ulink> </para></listitem><listitem><para><emphasis role="strong">Multi-robot sensing</emphasis>: Jung, B., &amp; Sukhatme, G. (2002, Nov). Tracking targets using multiple robots: The effect of environment occlusion. Autonomous Robots, 13(3), 191205. <ulink url="http://cres.usc.edu/pubdb_html/files_upload/43.pdf">Ver</ulink> </para></listitem><listitem><para><emphasis role="strong">Multi-robot exploration</emphasis>: Howard, A., Matari ́<!--RAW HTML: &#769;--> , M., &amp; Sukhatme, G. (2002). An incremental self-deployment algorithm for mobile sensor networks. Autonomous Robots Special Issue on Intelligent Embedded Systems, 13(2), 113126. <ulink url="http://www-robotics.usc.edu/~ahoward/pubs/howard_ar01.pdf">Ver</ulink> </para></listitem><listitem><para><emphasis role="strong">Multi-robot mapping</emphasis>: Howard, A., Parker, L., &amp; 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. <ulink url="http://www.cs.utk.edu/~parker/publications/ISER-04.pdf">Ver</ulink> </para></listitem><listitem><para><emphasis role="strong">Multi-robot localization</emphasis>: Howard, A., Matari ́<!--RAW HTML: &#769;--> , M., &amp; 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. <ulink url="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1241702">Ver</ulink> </para></listitem><listitem><para><emphasis role="strong">Multi-robot coordonation</emphasis>: Jones, C., &amp; Matari ́<!--RAW HTML: &#769;--> , 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. <ulink url="http://cres.usc.edu/pubdb_html/files_upload/398.pdf">Ver</ulink> </para></listitem><listitem><para><emphasis role="strong">Multi-robot formation</emphasis>: Fredslund, J., &amp; Matari ́<!--RAW HTML: &#769;--> , 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. </para></listitem><listitem><para><emphasis role="strong">Multi-robot task allocation</emphasis>: Gerkey, B., &amp; Matari ́<!--RAW HTML: &#769;--> , 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). <ulink url="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=1067996">Ver</ulink> </para></listitem></itemizedlist></section><section><title>Links</title><para><emphasis role="strong">General</emphasis>  </para><itemizedlist><listitem><para><ulink url="http://playerstage.sourceforge.net/">The Player project</ulink>  </para></listitem><listitem><para><ulink url="http://playerstage.sourceforge.net/wiki/index.php/PlayerHistory">Player History</ulink>  </para></listitem><listitem><para><ulink url="http://motion.mee.ucsb.edu/wiki/index.php/Player/Stage_Tutorial">Player/Stage Tutorial</ulink>  </para></listitem><listitem><para><ulink url="http://allievi.sssup.it/user/guillo/documentation.html">Player/Stage Slides</ulink>  </para></listitem><listitem><para><ulink url="http://www.nabble.com/Player-Stage-Gazebo-f4302.html">Player/Stage/Gazebo forum</ulink>  </para></listitem><listitem><para><ulink url="http://www.linuxdevices.com/articles/AT5739475111.html">A review of robotics software platforms</ulink>  </para></listitem><listitem><para><ulink url="http://www.cs.duke.edu/csed/tapia09/index.html">Tapia 2009 Robotics Competition</ulink>  </para></listitem></itemizedlist><para><emphasis role="strong">Instalación</emphasis>  </para><itemizedlist><listitem><para><ulink url="http://blog.papersize.org/?cat=4">Instalación de player/stage/gazebo en Debian</ulink>  </para></listitem><listitem><para><ulink url="http://www.irobotics.org/gazebo08.html">Player 2.1.1 / Gazebo 0.8 SVN rev. 6886</ulink>  </para></listitem><listitem><para><ulink url="http://www.irobotics.org/playerstage.html">Player 2.1.1 / Stage 3.0.1</ulink>  </para></listitem><listitem><para><ulink url="http://vlab.pjwstk.edu.pl/docs/player_installation.pdf">Player/Stage/Gazebo software installation</ulink>  </para></listitem><listitem><para><ulink url="http://svvtucson.net/troubleshoot/">Troubleshoot</ulink>  </para></listitem></itemizedlist></section><section><title>Referencias</title><itemizedlist><listitem><para>[1] - &quot;Really reused robot code from the player/stage project&quot;. Richard T. Vaughan and Brian Gerkey. In Davide Brugali, editor, Software Engineering for Experimental Robotics. Springer, 2007. <ulink url="http://www.cs.sfu.ca/~vaughan/doc/vaughan_reallyreused.pdf">Descargar</ulink> </para></listitem><listitem><para>[2] - &quot;Player 2.0: Toward a Practical Robot Programming Framework&quot; 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. <ulink url="http://www.ai.sri.com/~gerkey/papers/acra2005.pdf">Descargar</ulink>  </para></listitem><listitem><para>[3] - &quot;On Device Abstractions For Portable, Resuable Robot Code&quot;. 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) <ulink url="http://www.ai.sri.com/~gerkey/papers/iros03-abstraction.pdf">Descargar</ulink>  </para></listitem><listitem><para>[4] - &quot;The Player/Stage Project: Tools for Multi-Robot and Distributed Sensor Systems&quot;. 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. <ulink url="http://www.ai.sri.com/~gerkey/papers/icar03-player.pdf">Descargar</ulink>  </para></listitem><listitem><para>[5] - &quot;Most Valuable Player: A Robot Device Server for Distributed Control&quot;. 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. <ulink url="http://www.ai.sri.com/~gerkey/papers/iros01-player.pdf">Descargar</ulink>  </para></listitem><listitem><para>[6] - &quot;Player Robot Server&quot;. 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. <ulink url="http://www.ai.sri.com/~gerkey/papers/player.pdf">Descargar</ulink> </para></listitem></itemizedlist></section></article>