# El Aseba Playground

Este material proporciona información adicional sobre como programar robots para Aseba Playground, un simulador multi-robot incluido en Aseba.

# Eventos

## Eventos Locales

### Proximity sensors

El código que se encuentra luego de la instrucción `onevent ir_sensors` será ejecutado periódicamente, inmediatamente después de actualizar la variable (`prox`) - distancia hasta obstáculos.

### Camera

El código que se encuentra luego de la instrucción `onevent camera` será ejecutado periódicamente, inmediatamente después de actualizar las variables `camR`, `camG`, `camB` - pixeles de la cámara lineal.

## Emit

`emit nombre [argumentos]`

`emit` sirve para que un determinado robot emita un evento tipo (nombre) a los demás. El evento puede incluir hasta 32 argumentos. El evento no puede ser dirigido a un robot en particular - Este se transmite a todos los robots como si fuese una emisora radial (el siguiente ejemplo en [args] te muestra cómo dirigirse a un robot en especial). Es importante además, que el nombre del evento y el número de argumentos estén declarados en el panel de Eventos Globales de Aseba Studio.

# Variables Internas

## id

Es el identificador propio de cada robot.

## source

Es la {id} del robot del cual se recibió el evento más reciente.

## args

Los argumentos del evento más reciente recibido en este robot.

Ejemplo: Este ejemplo muestra como los eventos pueden dirigirse a un robot en especial, incluso si fueron transmitidas a todos. La idea es crear un vector en el que cada posición/casilla se destina a cada robot - al recibir el evento, el robot consultará únicamente su propia casilla.

El robot 1 envía el evento {avanzar} al robot 2, {espera}, luego envía el evento {avanzar} al robot 3 y {detenerse} al robot 2, {espera} y finalmente envía el evento {detenerse} a todos.

Código para el robot 1:

    # variables
    var counter = 0

    onevent ir_sensors

    if counter == 10 then
        emit avanzar [1,0]
    end

    if counter == 100 then
        emit avanzar [0,1]
    end

    counter += 1

Código para el robot 2:

    # eventos
    onevent avanzar
        if args[0] == 1 then
            leftSpeed = 400
            rightSpeed = 400
        else
            leftSpeed = 0
            rightSpeed = 0
        end

    onevent detenerse
        leftSpeed = 0
        rightSpeed = 0

Código para el robot 3:

    # eventos
    onevent avanzar
        if args[1] == 1 then
            leftSpeed = 400
            rightSpeed = 400
        else
            leftSpeed = 0
            rightSpeed = 0
        end

    onevent detenerse
        leftSpeed = 0
        rightSpeed = 0

## leftSpeed, rightSpeed

Velocidad de las ruedas. Use 400 para avanzar lentamente.

## colorR, colorG, colorB

Son los componentes rojo, verde y azul del color del cuerpo del robot.

## prox

La distancia a un obstáculo percibida por los sensores de proximidad. Las mediciones pueden fluctuar debido al ruido/interferencias. Consultar el esquema aquí.

## camR, camG, camB

Arreglo de 60 elementos. Los componentes rojo, verde y azul entregados por la cámara del robot.

## energy

Número entero: [0 9]. El nivel de energía del robot.

# Crea tu propio entorno

Playground te permite definir escenarios personalizados. Por ejemplo, el siguiente código crea una caja con cuatro robots en ella:

    <!DOCTYPE aseba-playground>
    <aseba-playground>
        <color name="wall" r="0.9" g="0.9" b="0.9" />
        <color name="red" r="0.77" g="0.2" b="0.15" />
        <color name="green" r="0" g="0." b="0.17" />
        <color name="blue" r="0" g="0.38" b="0.61" />

        <world w="110.4" h="110.4" color="wall"/>

        <e-puck x="40" y="40"/>
        <e-puck x="40" y="60"/>
        <e-puck x="60" y="40"/>
        <e-puck x="60" y="60"/>
    </aseba-playground>

Ejemplo: Encuentra aquí un modelo del Pabellón Alemán, Barcelon 1929, diseñado por Mies van der Rohe.