grupo de robótica, universidad rey juan...

16
Campeonato de programación de drones Grupo de Robótica, Universidad Rey Juan Carlos Índice 1. Introducción 1 1.1. ¿Quiénes pueden participar? .................................... 2 2. Entorno software 2 2.1. Simulador Gazebo ......................................... 2 2.2. Plataforma JdeRobot ....................................... 3 2.3. Interfaces JdeRobot relevantes .................................. 4 2.4. Plugins de Gazebo para el cuadricóptero ............................. 8 2.5. Componente introrob_py ..................................... 8 2.6. Instalación del entorno ....................................... 10 3. Prueba: el juego del ratón y el gato con drones 10 3.1. Arquitectura software ....................................... 11 3.2. Configuración del entorno ..................................... 11 4. Programando el drone gato dentro de introrob.py 13 4.1. Recogiendo imágenes ........................................ 14 4.2. Leyendo la posición tridimensional ................................ 14 4.3. Ordenando movimiento a los motores del drone ......................... 15 4.4. Insertando tu código ........................................ 16 5. Evaluación, organización y premio 16 1. Introducción Los drones son robots aéreos que han ganado popularidad en los últimos años. Nacieron en el ámbito militar y con el abaratamiento de sus costes se han abierto posibilidades de uso comercial en 1

Upload: trantruc

Post on 19-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Campeonato de programación de drones

Grupo de Robótica, Universidad Rey Juan Carlos

Índice

1. Introducción 1

1.1. ¿Quiénes pueden participar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2. Entorno software 2

2.1. Simulador Gazebo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2. Plataforma JdeRobot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.3. Interfaces JdeRobot relevantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.4. Plugins de Gazebo para el cuadricóptero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.5. Componente introrob_py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.6. Instalación del entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3. Prueba: el juego del ratón y el gato con drones 10

3.1. Arquitectura software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.2. Configuración del entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

4. Programando el drone gato dentro de introrob.py 13

4.1. Recogiendo imágenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2. Leyendo la posición tridimensional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.3. Ordenando movimiento a los motores del drone . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.4. Insertando tu código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

5. Evaluación, organización y premio 16

1. Introducción

Los drones son robots aéreos que han ganado popularidad en los últimos años. Nacieron en elámbito militar y con el abaratamiento de sus costes se han abierto posibilidades de uso comercial en

1

varias aplicaciones civiles como la monitorización de infraestructuras, agricultura, vigilancia, grabación deeventos, etc.. Son robots, y como tales, están compuestos de sensores, actuadores y procesadores en el ladohardware. Su inteligencia sin embargo reside en su software.

Este campeonato plantea como reto la programación de un cuadricóptero (que llamaremos gato) parauna misión concreta: perseguir a otro robot aéreo (que llamaremos ratón) y mantenerse cerca de él. Enel Grupo de Robótica de la Universidad Rey Juan Carlos hemos preparado el entorno del campeonatoutilizando el simulador Gazebo y la plataforma robótica JdeRobot. JdeRobot simplifica el acceso a sensoresy actuadores y permite programar el comportamiento del gato en lenguaje Python.

1.1. ¿Quiénes pueden participar?

Cualquiera, es un campeonato abierto. Está dirigido a estudiantes universitarios de ingeniería,principalmente a los de la Universidad Rey Juan Carlos, pero está abierto a cualquier participante.

2. Entorno software

2.1. Simulador Gazebo

Los simuladores en robótica son usados para crear mundos virtuales y observar cómo un robot emuladoactúa en dicho entorno. De esta forma se pueden programar aplicaciones robóticas y probarlas sin dependerde un robot físico, haciendo que las pruebas sean más baratas y menos peligrosas. Si el robot se chocao tiene un comportamiento extraño que no se había previsto es posible reiniciar la simulación sin que elmodelo real (o las personas cercanas) haya sufrido daños. Algunos de estos simuladores representan losmundos en 3D y recrean la física de este (gravedad, colisiones...) permitendo visualizar el movimiento delrobot en escenarios muy realistas. Motores de física comunes son ODE (Open Dynamics Engine) y Physx.

Figura 1: Humanoide de la competición VRC en Gazebo

Gazebo 1 es un simulador muy completo que se distribuye como software libre. Cuenta con modelos derobots que pueden usarse directamente, además de incluir la posibilidad de que el usuario cree su propiorobot y entornos. Por ejemplo, un campo de fútbol de la RoboCup, un pueblo o el interior de un edificio,todos incluyendo texturas, luces y sombras. Simula la física de los cuerpos rígidos: choques, empujes,

1http://gazebosim.org/

2

gravedad, etc. Dispone de una amplia clase de sensores como cámaras, lásers, sensores de contacto, imu,etc. Los algoritmos pueden aplicarse a los modelos cargando plugins, o librerías dinámicas. Muchos deestos modelos y plugins han sido creados por la organización OSRF (Open Source Robotics Foundation),que desarrolla y distribuye este software libre para su uso en investigación robótica.

2.2. Plataforma JdeRobot

JdeRobot2 es una plataforma de software libre para el desarrollo de aplicaciones con robots y visiónartificial. Este proyecto ha sido desarrollado y está mantenido por el Grupo de Robótica de la UniversidadRey Juan Carlos desde 2003.

Esta plataforma abstrae al programador del acceso a los dispositivos hardware, como la lectura de lossensores o el envío de comandos a los motores. Principalmente está desarrollado en C y C++, aunque existencomponentes desarrollados en otros lenguajes como Java o Python. Ofrece un entorno de programaciónbasado en componentes donde la aplicación está formada por varios componentes y cada uno se ejecuta comoun proceso. Es distribuido y multilenguaje, los componentes interoperan entre sí a través del middleware decomunicaciones ICE. Podemos encontrar componentes ejecutándose en distintas máquinas interoperando através de interfaces ICE, incluso estando escritos en lenguajes diferentes. Típicamente se crean aplicacionesmuy complejas a partir de componentes más simples que han sido desarrollados para realizar una tareaespecífica.

ICE (Internet Communications Engine), es un middleware orientado a objetos que provee llamadas aprocedimientos remotos, computación grid y funcionalidad cliente/servidor desarrollada por ZeroC3 bajouna doble licencia GNU GPL y una licencia propietaria.

JdeRobot ofrece una interfaz sencilla para la programación de sistemas de tiempo real y resuelveproblemas relacionados con la sincronización de los procesos y la adquisición de datos. JdeRobot simplificael acceso a los dispositivos hardware de un robot desde el componente, permitiendo obtener la lectura de unsensor a través de una llamada a función o método. Normalmente en las aplicaciones robóticas desarrolladascon JdeRobot, los componentes necesitan datos sensoriales y envían ordenes a los actuadores. Los datossensoriales llegan al componente a través de interfaces ICE. Los drivers encargados de controlar los robotstambién reciben las órdenes también a través de interfaces ICE.

2http://jderobot.org/3http://www.zeroc.com/

3

Figura 2: Ejemplo de componentes JdeRobot

Actualmente soporta un gran variedad de dispositivos como el robot Pioneer de MobileRobotics Inc., elhumanoide NAO de Aldebaran Robotics, el robot Kobuki de Yujin Robot, el cuadricóptero AR.Drone deParrot, cámaras firewire, USB e IP, los escáneres laser LMS de SICK y URG de Hokuyo, los simuladoresStage y Gazebo, sensores de profundidad como kinect y otros dispositivos X10 de dómotica. Además, tienesoporte para software externo como OpenGL, GTK, XForms, Player, GSL y OpenCV. Es un proyecto desoftware libre licenciado como GPLv34, y la última versión oficial es la 5.2.

2.3. Interfaces JdeRobot relevantes

En JdeRobot cada componente ofrece o se subscribe a una o varias interfaces. Estas interfaces se definenen un pseudolenguaje propietario de Zero-C y luego, haciendo uso de un traductor automático, se puedeobtener el código fuente correspondiente a la interface para distintos lenguajes de programación. Traseste paso es tarea del programador definir el comportamiento de la interface. A continuación de muestranalgunas de las interfaces útilex para este campeonato, que básicamente concretan el acceso a los sensoresy actuadores a bordo del cuadricóptero.

2.3.1. camera

Es la interface estándar para el envío y recepción de imágenes entre componentes. En el campeonatoutilizaremos la interfaz camera para obtener imágenes desde nuestro AR.Drone simulado. Su definición esla siguiente:

#inc lude <image . i c e>

module jde robot {// S t a t i c d e s c r i p t i o n o f a camera4http://www.gnu.org/licenses/gpl-3.0-standalone.html

4

c l a s s CameraDescription{

s t r i n g name ;s t r i n g sho r tDe s c r i p t i on ;s t r i n g streamingUri ;f l o a t f d i s t x ;f l o a t f d i s t y ;f l o a t u0 ;f l o a t v0 ;f l o a t skew ;f l o a t posx ;f l o a t posy ;f l o a t posz ;f l o a t foax ;f l o a t foay ;f l o a t f oaz ;f l o a t r o l l ;

} ;//Camera i n t e r f a c ei n t e r f a c e Camera extends ImageProvider{

idempotent CameraDescription getCameraDescr ipt ion ( ) ;i n t setCameraDescr ipt ion ( CameraDescription d e s c r i p t i o n ) ;s t r i n g startCameraStreaming ( ) ;void stopCameraStreaming ( ) ;void r e s e t ( ) ;

} ;} ; /∗module∗/

Como se aprecia en la definición, la interface camera nos permite definir una cámara y la posiblidadde implementar de alguno de sus métodos como getCameraDescription(). Esta interface depende de lainterface image la cual almacena la información de la imagen en sí como el ancho y alto de la imagen o lasecuencia de bytes que componen la imagen.

module jde robot {// S t a t i c d e s c r i p t i o n o f the image source .c l a s s ImageDescr ipt ion{

i n t width ; /∗ Image width [ p i x e l s ] ∗/i n t he ight ; /∗ Image he ight [ p i x e l s ] ∗/i n t s i z e ; /∗ Image s i z e [ bytes ] ∗/s t r i n g format ; /∗ Image format s t r i n g ∗/

} ;//A s i n g l e image served as a sequence o f bytes

5

c l a s s ImageData{

Time timeStamp ; /∗ TimeStamp o f Data ∗/ImageDescr ipt ion d e s c r i p t i o n ;ByteSeq pixe lData ; /∗ The image data i t s e l f .∗/

} ;// ! I n t e r f a c e to the image consumer .i n t e r f a c e ImageConsumer{

// ! Transmits the data to the consumer .void r epor t ( ImageData obj ) ;

} ;// I n t e r f a c e to the image prov ide r .i n t e r f a c e ImageProvider{

//Returns the image source d e s c r i p t i o n .idempotent ImageDescr ipt ion get ImageDescr ipt ion ( ) ;//Returns the l a t e s t data .[ " amd " ] idempotent ImageData getImageData ( )

throws DataNotExistException , HardwareFai ledException ;} ;

} ; //module

2.3.2. Pose3D

La interface Pose3D define la posición de un objeto en el espacio 3D. Está compuesta por un cuaternión,que expresa la orientación del objeto, y un punto 3D en coordenadas homogéneas que indica la posiciónde éste en el espacio.

module jde robot {c l a s s Pose3DData{

f l o a t x ;f l o a t y ;f l o a t z ;f l o a t h ;f l o a t q0 ;f l o a t q1 ;f l o a t q2 ;f l o a t q3 ;

} ;// I n t e r f a c e to the Pose3D .

i n t e r f a c e Pose3D

6

{idempotent Pose3DData getPose3DData ( ) ;i n t setPose3DData (Pose3DData data ) ;

} ;} ; //module

Esta interfaz no es imprescindible en el campeonato pero está a disposición de los participantes paraconocer la posición 3D y orientación del drone en el entorno simulado. Típicamente esta información serecopila en el robot real desde el sensor GPS y la unidad inercial IMU. Hay muchas maneras de representarposición y orientación tridimensionales (ángulos de Euler, cuaterniones, yaw-pitch-roll, matríces, etc.), seha elegido ésta que tiene ventajas computacionales.

2.3.3. cmd_vel

Con la interfaz cmd_vel podremos enviar comandos de velocidad a los componentes que la implementen,entre ellos el driver del cuadricóptero real y el plugin del cuadricóptero en Gazebo. Es una interfaz pensadapara el manejo de robots aéreos y con ella podemos realizar translaciones y rotaciones sobre los ejes X, Y,Z solidarios con el propio robot: X+ siempre hacia el frente del robot, Y+ hacia su izquierda y Z+ haciaarriba en su vertical.

module jde robot {c l a s s CMDVelData{

f l o a t l inearX ;f l o a t l inearY ;f l o a t l i n e a rZ ;f l o a t angularX ;f l o a t angularY ;f l o a t angularZ ;

} ;i n t e r f a c e CMDVel{

i n t setCMDVelData (CMDVelData data ) ;} ;

} ;\\module

Durante la prueba se utilizará este interfaz para comandar órdenes de movimiento al AR.Drone. Cómoestas órdenes se materializan en comandos a cada uno de los motores del cuadricóptero es un detalle deimplementación del que se encarga el driver del cuadricóptero real o el plugin de Gazebo, que ya tienenen cuenta la dinámica de las hélices y del cuerpo para traducir esas órdenes de alto nivel a comandosconcretos a cada motor.

2.3.4. ardrone_extra

Esta interfaz es exclusiva para el manejo de AR.Drone, nos permite realizar las maniobras básicas deun drone como el aterrizaje y el despegue. Además, ofrece otras características específicas del AR.Drone

7

como la grabación de vídeos en una memoria USB o realizar animaciones leds.

module jde robot {i n t e r f a c e ArDroneExtra{

void toggleCam ( ) ;void land ( ) ;void t a k e o f f ( ) ;void r e s e t ( ) ;void recordOnUsb ( bool record ) ;void ledAnimation ( i n t type , f l o a t durat ion , f l o a t req ) ;void f l i ghtAn imat ion ( i n t type , f l o a t durat ion ) ;void f la tTr im ( ) ;

} ;} ;

2.4. Plugins de Gazebo para el cuadricóptero

2.5. Componente introrob_py

Este componente nos permite teleoperar el AR.Drone y obtener sus datos sensoriales, tanto para elcuadricóptero real como para el simulado (dependiendo de si se conecta al driver real o al plugin enGazebo). También permite insertar en él el código de cada participante y ejecutarlo.

Figura 3: Esquema de introrob_py con AR.Drone real

Como muestran las Figuras 3 y 4 introrob_py es un componente JdeRobot que se suscribe a lasinterfaces ofertadas tanto por ardrone_server como por el plugin equivalente en Gazebo (el que usamosen este campeonato).

8

Figura 4: Esquema de introrob_py con AR.Drone simulado

Además de esta interconexión, introrob_py ofrece al usuario una interface gráfica para el manejo delAR.Drone (ver Figura 5a) y la visualización de los datos sensoriales (ver Figura 5b).

(a) Teleoperación del drone (b) Visualización de las imágenes

Figura 5: Interfaz gráfica principal de introrob_py

La Figura 6 muestra (de izquierda a derecha) el indicador de actitud (pitch y roll), la orientación deldrone (yaw), un altímetro, un indicador del porcentaje de carga de la batería y tres velocímetros queindican la velocidad lineal en los ejes X, Y, Z.

9

Figura 6: Pestaña ’Sensors’ del componente introrob.py

El código de tu prueba se empotrará dentro de este componente, y es tu código el que tomará lasdecisiones de movimiento adecuadas en función de la información sensorial. En esto reside la “inteligencia”del cuadricóptero y que su comportamiento sea bueno o no. El componente arranca en modo teleoperación,para que puedas gobernar el movimiento del cuadricóptero manualmente. Con el deslizador vertical sepuede subir o bajar de altura y con la cruceta hacerlo girar y/o avanzar en horizontal.

Antes de ejecutar tu algoritmo pulsa sobre el botón Play, e introrob.py entra en modo automáticoinvocando periódicamente a tu código inserto en MyAlgorithm.py, el método execute. Lo llama unas10 veces por segundo, lo que permite a tu software tener el control en todo momento del movimientodel drone.

Para terminar con la ejecución de tu algoritmo pulsa el botón Stop, que hace entrar a introrob.pynuevamente en modo teleoperación.

2.6. Instalación del entorno

sudo apt-get install jderobot

3. Prueba: el juego del ratón y el gato con drones

La prueba consiste en programar en lenguaje Python la inteligencia de un drone cuadricóptero quellamamos gato. Su objetivo es perseguir y mantenerse cerca de otro cuadricóptero similar que llamamosratón. El resultado esperado se puede ver en la página web del concurso5.

El gato tiene dos cámaras (una frontal y otra ventral) y un sensor de posición 3D como equipamientosensorial. Sus actuadores son los motores de sus hélices. Tal y como muestra la Figura 7 el ratón es decolor rojo, para facilitar su detección en las imágenes.

5http://jderobot.org/Programacion-de-drones#Atrapa_a_la_tortuga

10

Figura 7: Gato y ratón en el mundo 3D simulado

En la fase de competición del concurso se pondrá un ratón programado por la organización, que será elmismo para todos los participantes. En la preparación del gato puedes conectar un introrob.py a tu ratóny teleoperarlo, o puedes dejar al ratón quieto, o puedes programarte un comportamiento fijo.

Para participar en la prueba hay que notificarlo por correo a josemaria.plaza AT urjc.es y enviar enlos plazos previstos el código de tu drone gato, el fichero MyAlgorithm.py que se incorporará a introrob.py

para probarlo.

3.1. Arquitectura software

Figura 8: Arquitectura software de la prueba

3.2. Configuración del entorno

Para configurar el entorno de la prueba hay que (1) lanzar Gazebo con el fichero del mundo adecuado,(2) ejecutar el introrob.py que gobierna el comportamiento del drone ratón y (3) arrancar el introrob.py

que gobierna el comportamiento del drone gato. Opcionalmente (4) se puede lanzar también el componente

11

árbitro que se utilizará para medir la puntuación de cada participante. Puedes lanzar el árbitro para versi tu gato lo está haciendo mejor o peor en las pruebas de preparación.

3.2.1. Gazebo

Para la prueba se ha diseñado un mundo en el simulador Gazebo. En este nuevo mundo tendremos dosrobots: el cuadricóptero AR.Drone que hace de ratón (que tiene color rojo) y el cuadricóptero gato. Nohay más obstáculos en el mundo, salvo el suelo.

Para ejecutar Gazebo con este mundo realiza los siguientes pasos:

cd ~/. gazebo/ c f g / programaciondrones /gazebo gato_raton_1 . world

Con el comando anterior Gazebo habrá lanzado el mundo gato_raton_1.world con los plugins del gato,el ratón y el árbitro. El plugin del gato ofrece las siguientes interfaces. En el código de introrob.py lasinterfaces ya están configuradas (en la clase sensor.py) para conectarse a ellas, por lo que no es necesariomodificarlas.

camera, en el puerto 9995

navdata, en el puerto 9700

cmd_vel, en el puerto 9580

ardrone_extra, en el puerto 9701

Pose3D, en el puerto 9000

Por otro lado, el plugin de ratón oferta las siguientes interfaces:

camera, en el puerto 9996

navdata, en el puerto 9701

cmd_vel, en el puerto 9581

ardrone_extra, en el puerto 9702

Pose3D, en el puerto 9001

3.2.2. Componente Introrob.py para el ratón

3.2.3. Componente Introrob.py para el gato

3.2.4. Árbitro

El árbitro consta de un plugin y un visor. Mide la distancia real instantánea entre gato y ratón ymuestra en pantalla la evolución temporal a lo largo de la duración de la manga (Figura 9). Cuando estápor debajo del umbral considerado cercano la pinta en verde y cuando está por encima, rojo. De este modo

12

mide cuántos segundos de esas ejecuciones tu gato ha estado suficientemente cerca del ratón y lo muestraen pantalla.

Figura 9: Ejecución de la prueba: el árbitro muestra la evolución temporal de la distancia entre gato yratón

Figura 10: Gráfica generada con la puntuación final

4. Programando el drone gato dentro de introrob.py

El comportamiento del cuadricóptero gato típicamente tendrá una parte perceptiva y una parte decontrol. La parte de percepción recoge los datos sensoriales (la cámara principalmente) y los analiza,extrae información de ellos. La parte de control decide qué movimiento es el adecuado y emite órdenes alos motores del robot.

Es de naturaleza iterativa, ejecuta continuamente iteraciones y en cada una de ellas se percibe y se

13

controla.

Introrob.py se apoya en las interfaces descritas para dialogar con el simulador Gazebo. En particularcon los plugins de Gazebo que materializan los sensores y actuadores del cuadricóptero. Todo este diálogoqueda oculto al programador, que simplemente tiene unos cuantos métodos en Python como interfaz deprogramación para leer los datos de la cámara, sensor de posición y motores del cuadricóptero.

4.1. Recogiendo imágenes

Las imágenes de la cámara frontal del gato se obtienen desde la clase MyAlgorithm. La instrucciónsiguiente nos devuelve la imagen de la cámara activa del drone y la almacena en la variable droneImage.A partir de este momento, dicha variable contiene una imagen que podremos tratar como queramos. Porejemplo usando la biblioteca OpenCV de visión artificial.

droneImage = s e l f . s en so r . getImage ( )

Para esta prueba necesitaremos detectar al robot ratón. El ratón es de color rojo. Típicamente selocaliza muy bien dentro de las imágenes usando un filtro HSV convenientemente ajustado.

Figura 11: Detección del robot ratón en la imagen

4.2. Leyendo la posición tridimensional

En el escenario del campeonato se usan dos sistema de referencia: uno absoluto y otro solidario con elcuadricóptero. Son los que se muestran en la Figura 12.

14

Figura 12: Sistemas de referencia 3D

El seguimiento del ratón se puede abordar sin necesidad de saber la posición absoluta del drone en elmundo. Sin embargo, puede ser útil si se quiere optimizar la búsqueda del ratón cuando no se aprecia en laimagen. Para obtener la posición 3D se tiene el método getPose3D. Las instrucciones siguientes entreganlas coordenadas X,Y y Z del drone dentro del mundo de Gazebo.

s e l f . s en so r . getPose3D ( ) . xs e l f . s en so r . getPose3D ( ) . ys e l f . s en so r . getPose3D ( ) . z

4.3. Ordenando movimiento a los motores del drone

La clase sensor dentro de introrob.py incluye varios métodos para interactuar con el drone yordenarle movimiento. En particular el método sendCMDVel() envía comandos de velocidad de traslacióny velocidades de rotación. Las velocidades de traslación siguen el sistema de referencia que se muestra enla figura 12, solidario con el propio drone: vx de frente/atrás, vy izquierda/derecha y vz arriba/abajo. Lavelocidad de yaw marca el giro alrededor de un eje vertical, perpendicular al plano del drone. El métodosendCMDVel() recibe 6 parámetros: vy, vx, vz, yaw, roll y pitch. Cada uno de los valores se debe indicarentre -1 y 1. Los valores roll y pitch no tienen efecto en el mundo simulado de Gazebo.

Por ejemplo, el comando siguiente ordena al drone que se mueva de manera inmediata hacia delante auna velocidad de 0.5 (a la mitad de potencia). Esta órden estará activa hasta que se le indique otra cosa.

s e l f . s en so r . sendCMDVel ( 0 , 0 . 5 , 0 , 0 , 0 , 0 )

El método sendCMDVel() permite comandar distintas órdenes a la vez. El comando siguiente provocaque el drone se mueva hacia delante a una velocidad de 0.5, a la vez se traslade hacia la derecha a 0.4 ysimultáneamente se eleve en el eje Z a 0.2 y rote sobre el eje Z a una velocidad de 0.1.

s e l f . s en so r . sendCMDVel ( −0 . 4 , 0 . 5 , 0 . 2 , 0 . 1 , 0 , 0 )

Finalmente, para detener el movimiento del drone se puede utilizar la siguiente instrucción.

15

s e l f . s en so r . sendCMDVel ( 0 , 0 , 0 , 0 , 0 , 0 )

4.4. Insertando tu código

Para implementar el algoritmo se recomienda seguir los siguientes pasos:

1. Abre con tu entorno de programación el componente introrob.py y dirígete a la clase MyAlgorithm

que se encuentra en el fichero introrob/MyAlgorithm.py.

2. Dirígite a la definición del método execute().

3. En primer lugar se recomienda implementar un método que nos permita detectar en la imagenobtenida del drone ratón, obteniendo su posición en píxeles. Típicamente el centro de masas de lospíxeles que superan el filtro rojo puede ser una buena aproximación del centro del robot ratón (hayotras mejores).

4. Con el robot ratón detectado en la imagen, el siguiente paso es decidir qué movimiento es el adecuadoordenar a los motores del gato con el método sendCMDVel(). Aquí hay muchas maneras de decidirlo:control basado en casos, control PID, autómatas, etc.. Aquí es donde entra en juego tu habilidad.

5. Evaluación, organización y premio

Para participar hay que programar MyAlgorithm.py adecuadamente y enviarlo a la organización porcorreo electrónico antes del 24 de mayo 2015 (23:00 horas UTC) junto con los datos personales. Pasadoese día la organización publicará en la web la lista de todos los participantes. Las finales del campeonatotendrán lugar el 29 de mayo de 2015. Ese día se retransmitirá en streaming por YouTube la sesión final(Q3). Si el volumen de participantes lo permite, también las sesiones eliminatorias Q1 y Q2.

La evaluación consiste en arrancar a tu robot gato en diferentes configuraciones (2 mangas) con el robotratón que hemos preparado y en una máquina de la organización. La máquina y el comportamiento del ratónes exactamente el mismo para todos los participantes. En cada manga, de 2 minutos, tu robot comienzaen una posición relativa diferente respecto del ratón, deberá buscarlo y perseguirlo. El componente árbitromide cuántos segundos de esas ejecuciones tu gato ha estado suficientemente cerca del ratón y lo muestraen pantalla. Esa es la puntuación. Que tu gato toque al ratón supone la descalificación en esa manga y elparticipante reune 0 puntos en ella.

El campeonato está organizado en fases eliminatorias, donde tu gato se va enfrentando paulatinamentea ratones más difíciles de seguir. Tras la primera ronda (Q1) pasan a la siguiente los mejores 20 gatos, en lasegunda (Q2) los mejores 10 y en la última (Q3) ya se deciden las posiciones definitivas en el campeonato.Gana el campeonato aquel gato que esté cerca del ratón durante más tiempo en el acumulado de las dosmangas de Q3.

El premio para el ganador es un cuadricóptero Ar.Drone2 de Parrot. El jurado será una comisión delGrupo de Robótica, que podrá dejar el premio desierto si la solución no es de suficiente calidad. Susdecisiones son inapelables.

16