Spanish/Doc/Tutorial/Interface

From The Player Project

Jump to: navigation, search

/** @ingroup tutorials @defgroup tutorial_devices Interfaces, drivers, y dispositivos @brief Conceptos fundamentales de Player

Hay tres conceptos clave en Player: <p> - interfaz : Es una especificación de cómo se debe interactuar con una cierta clase de sensor, actuador o algoritmo de un robot. El interfaz define la sintaxis y la semántica de todos los mensajes que pueden ser intercambiados con las entidades de una misma clase. <p> - driver : Es código (normalmente escrito en C++) que establece comunicación con el sensor actuador o algoritmos del robot y traduce sus entradas y salidas para adecuarse a uno o más interfaces. El trabajo del driver es esconder los detalles especificos de una entidad haciéndola aparecer como si fuera exactamente igual que cualquier otra entidad de su clase. <p> - dispositivo : Un driver que está unido a un interfaz y una dirección completa. Todo el paso de mensajes real en Player ocurre entre dispositivos a traves de interfaces. Los drivers, aunque están haciendo la mayoría del trabajo, nunca son accedidos directamente. \section laserexample Un ejemplo <p> Pongamos como ejemplo el interfaz @ref interface_laser. Este interfaz define un formato en el cual un sensor de rango (distancias a obstaculos) del tipo planar puede devolver lecturas de rango (básicamente una lista de rangos, con algunos metadatos). El interfaz @ref interface_laser es simplemente eso: un interfaz. No se puede hacer nada con el. <p> Ahora consideremos el driver @ref driver_sicklms200. Este driver controla un SICK LMS200, que es un sensor de rango player en particular que es muy popular para aplicaciones robóticas. El driver @ref driver_sicklms200 sabe cómo comunicarse con el SICK LMS200 sobre una línea serie y recibir los datos de rango de él. Pero no es nada conveniente acceder a los datos de rango en el formato específico de SICK. Así que el driver también sabe como traducir los datos recibidos para hacerlos adecuarte al formato definido por el interfaz @ref interface_laser. <p> El driver @ref driver_sicklms200 puede unirse a el interfaz @ref interface_laser (en el apartado de la configuración @ref tutorial_config se puede ver cómo crear un fichero de configuración) para crear un dispositivo, el cual quizá tendrá la siguiente dirección: <p>localhost:6665:laser:0 <p> Los campos en esta dirección corresponden a las entradas de la estructura @ref player_devaddr_t : host, robot, interface e index. Los campos host y robot (localhost y 6665) indican dónde está localizado el dispositivo. El campo del interfaz indica qué interfaces son soportados por el dispositivo y, por tanto, como puede ser utilizado. Como quizá hay más de un laser, el campo index permite elegir el dispositivo correcto entre todos los que dan soporte a un interfaz en particular. y que estan en un determinado host::robot. Distintos lasers en el mismo host::robot tendrán distintos índices. \section interfaceportability Escribiendo código para robots portable <p> Otros drives también dan soporte al interface @ref interface_laser, incluyendo @ref driver_urglaser y <a href="http://playerstage.sourceforge.net/doc/stage-2.0.0a/group__player.html">stage</a>. Desde el punto de vista de los programas que están utilizando estos drivers, todos son iguales: proveen datos de rango planer. No importa exáctamente qué modelo de laser está siendo utilizado o incluso si el laser es físico o simulado. Es posible escribir programas que son portables para muchos tipos de laser, físicos y simulados. Por ejemplo @ref util_playerv puede visualizar datos de rango de cualquier laser. Esta portabilidad es un beneficio que se consigue al definir interfaces estándar.

  • /

Personal tools