<?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/PlayerStageRoMAA/PlayerDriverRoMAA1</title><revhistory><revision><revnumber>6</revnumber><date>2011-04-20 22:05:12</date><authorinitials>GonzaloPerezPaina</authorinitials></revision><revision><revnumber>5</revnumber><date>2011-04-20 22:04:15</date><authorinitials>GonzaloPerezPaina</authorinitials></revision><revision><revnumber>4</revnumber><date>2011-04-20 22:03:30</date><authorinitials>GonzaloPerezPaina</authorinitials></revision><revision><revnumber>3</revnumber><date>2011-04-20 22:01:57</date><authorinitials>GonzaloPerezPaina</authorinitials><revremark>organización de la wiki</revremark></revision><revision><revnumber>2</revnumber><date>2010-06-05 22:50:43</date><authorinitials>GonzaloPerezPaina</authorinitials></revision></revhistory></articleinfo><section><title>Driver de Player para robot RoMAA</title><section><title>Objetivos</title><para>Desarrollar el driver para el servidor <emphasis>Player</emphasis> del robot !RoMAA de modo de poder controlarlo de forma remota, a través de un programa cliente (TCP) enviando comandos de velocidad a los motores y obteniendo los valores de la odometría, esto se logra implementando en el driver la interfaz de player <emphasis>position2d</emphasis> que es la que se utiliza para el control de robots móviles.  </para></section><section><title>Player driver</title><para><emphasis>Player</emphasis> incluye varias <emphasis role="strong">interfaces</emphasis> predefinidas para los algoritmos y dispositivos en robótica. El objetivo de un <emphasis role="strong">driver</emphasis> es crear el enlace  entre los dispositivos/algoritmos y la interfaz predefinida que mejor lo representa. Existen dos tipos de drivers en <emphasis>Player</emphasis> el <emphasis role="strong">driver normal</emphasis> de Player y el <emphasis role="strong">driver plugin</emphasis>, este último tiene la ventaja de no necesitar recompilar <emphasis>Player</emphasis> para compilar el driver. En el caso de driver plugin este se enlaza con el servidor en tiempo de ejecución. </para><section><title>RoMAA Plugin Player driver</title><itemizedlist><listitem><para><ulink url="https://ciii.frc.utn.edu.ar/wiki/Robotica/PlayerStageRoMAA/PlayerDriverRoMAA1/wiki/Robotica/PlayerStageRoMAA/PlayerDriverRoMAA1/DriverStruct#">Estructura del plug-in driver</ulink>: Declaración de la clase driver plugin, implementación de los métodos virtuales y funciones para registrar el driver </para></listitem><listitem><para><ulink url="https://ciii.frc.utn.edu.ar/wiki/Robotica/PlayerStageRoMAA/PlayerDriverRoMAA1/wiki/Robotica/PlayerStageRoMAA/PlayerDriverRoMAA1/Messages#">Procesamiento de mensajes</ulink>: Implementación de los métodos para procesamiento de mensajes del <emphasis>cliente</emphasis> y publicación de los datos para la interfaz <emphasis>position2d</emphasis> </para></listitem></itemizedlist><para>El código fuente para compilar el driver y archivo de configuración del RoMAA se encuentra en el SVN en <code>ciiiRepositorios/romaa_player_driver/trunk/</code>  </para><para>el driver <emphasis role="strong">versión 1.00</emphasis> corresponde a la <emphasis role="strong">revision 5</emphasis>. </para></section></section><section><title>Ejecutar Player con el driver</title><para>Para controlar el robot RoMAA se debe ejecutar el servidor <emphasis>Player</emphasis> en la PC de abordo indicando el archivo de configuración que instancia el driver del RoMAA. </para><para><code>player romaa.cfg</code> </para><para>Ver <ulink url="https://ciii.frc.utn.edu.ar/wiki/Robotica/PlayerStageRoMAA/PlayerDriverRoMAA1/wiki/Robotica/PlayerStageRoMAA/PlayerDriverRoMAA1/ClientEx#">programa cliente ejemplo</ulink>. </para></section><section><title>Compilar el driver</title><para>Los fuentes del driver se construyen mediante la herramienta <emphasis>cmake</emphasis>, haciendo </para><itemizedlist><listitem><para><code>ccmake .</code> </para></listitem><listitem><para><code>make</code> </para></listitem></itemizedlist><para>Si al ejecutar Player instanciando el driver de RoMAA se obtiene el <emphasis role="strong">siguiente error</emphasis>: </para><screen><![CDATA[ciii@ciii-p227:~/romaa_player_driver$ player romaa.cfg 
Registering driver
Player v.2.1.2
]]><![CDATA[
* Part of the Player/Stage/Gazebo Project [http://playerstage.sourceforge.net].
* Copyright (C) 2000 - 2006 Brian Gerkey, Richard Vaughan, Andrew Howard,
* Nate Koenig, and contributors. Released under the GNU General Public License.
* Player comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
* are welcome to redistribute it under certain conditions; see COPYING
* for details.
]]><![CDATA[
error   : failed to load plugin libromaadriver, tried paths:
error   :       /home/lmartini/romaa_player_driver/./libromaadriver
error   :       /usr/local/lib/libromaadriver
error   :       libromaadriver
error   : failed to load plugin: libromaadriver
error   : failed to parse config file romaa.cfg driver blocks]]></screen><para>se corrige haciendo que el driver del !RoMAA se enlace con las librerias libplayercore y libserial, agregando en la línea <emphasis role="strong">EXTERNAL_LIBS</emphasis> de cmake <code>playercore;serial</code> </para><para>Una forma de comprobar que la librería se enlazó correctamente es haciendo  </para><para><code>ldd -r libromaadriver.so</code> </para><para>y ver que no aparezcan simbolos no definidos, por ejemplo  </para><para><code>undefined symbol: _ZN6Driver11StartThreadEv  (./libromaadriver.so)</code> </para></section><section><title>Links</title><para><emphasis role="strong">Programación de Drivers de Player</emphasis>  </para><itemizedlist><listitem><para><ulink url="http://psurobotics.org/wiki/index.php?title=Player/Stage_Drivers">Player/Stage Drivers</ulink>  </para></listitem><listitem><para><ulink url="http://psurobotics.org/wiki/index.php?title=Writing_a_Player_Plugin">Writing a Player Plugin</ulink>  </para></listitem><listitem><para><ulink url="http://www.control.aau.dk/~tb/wiki/index.php/Developing_a_plug-in_driver_for_Player">Developing a plug-in driver for Player</ulink>  </para></listitem><listitem><para><ulink url="http://image.diku.dk/mediawiki/images/e/e2/Driverhowtodoc_HandedIn.pdf">Writing Player/Stage Drivers - HowTo</ulink>  </para></listitem><listitem><para><ulink url="http://www.nabble.com/Player-Stage-Gazebo-f4302.html">Player/Stage/Gazebo forum</ulink>  </para></listitem></itemizedlist></section></section></article>