# Aseba Playground

Questo documento contiene informazioni aggiuntive su come programmare i robot nell'ambiente Playground, un simulatore multi-robot incluso con Aseba

# Eventi

## Eventi Locali

### Sensore di prossimità

Il codice che segue l'istruzione `onevent ir_sensors` sarà eseguito ad intervalli regolari, appena dopo che la distanza da un'ostacolo (`prox`) viene aggiornato.

### Camera

Il codice che segue l'istruzione `onevent camera` sarà eseguito ad intervalli regolari, appena dopo che i valori dei pixel `camR`, `camG`, `camB` della telelcamera lineare sono stati aggiornati.

## Emit

`emit signal [arguments]`

`emit` specifica che un dato robot deve inviare un segnale di evento (signal) a tutti gli altri robot. Il segnale può contenere fino a 32 argomenti. Notare che non è possibile specificare un robot in particolare a cui il segnale deve essere inviato. Il segnale, come un segnale radio è trasmesso a tutti i robot (vedere l'esempio successivo in [args] su come sia possibile indirizzare il singolo robot.). Notare anche che il nome del segnale e il numero di argomenti deve essere dichiarato nel pannello Global Events di Aseba Studio.

# Variabili interne

## id

Un identificatore univoco per ciascun robot.

## source

L'identificatore del robot da cui è stato ricevuto il segnale più recente.

## args

Gli argomenti dell'evento più recente ricevuto dal robot.

Esempio: Questo esempio mostra come i segnali possano essere indirizzati ad un robot ben preciso snche se inviati indistintamente a tutti. L'idea è di utilizzare un vettore dove ciascuna posizione sia allocata a uno specifico robot. Quando riceve un segnale il robot leggerà solo una parte specifica del vettore ricevuto.

Codice per il robot 1

Il robot 1 invia un segnale di movimento in avanti al robot 2, attende, quindi invia un segnale di movimento in avanti al robot 3 e di stop al robot 2, attende, ed infine invia un messaggio di stop generale.

    # variables
    var counter = 0

    onevent ir_sensors

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

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

    counter += 1

Codice per robot 2

    # events
    onevent move
        if args[0] == 1 then
            leftSpeed = 400
            rightSpeed = 400
        else
            leftSpeed = 0
            rightSpeed = 0
        end

    onevent stop
        leftSpeed = 0
        rightSpeed = 0

Codice per robot 3

    # events
    onevent move
        if args[1] == 1 then
            leftSpeed = 400
            rightSpeed = 400
        else
            leftSpeed = 0
            rightSpeed = 0
        end

    onevent stop
        leftSpeed = 0
        rightSpeed = 0

## leftSpeed, rightSpeed

Velocità delle ruote. Scegliere 400 per movimento lento.

## colorR, colorG, colorB

Le componenti rossa, verde e blu del colore del robot.

## prox

La distanza dagli ostacoli percepita dai sensori. Notare che il rumore produce fluttuazioni nella misura. Vedere questo schema.

## camR, camG, camB

Array di lunghezza 60. I valori delle componenti rossa, verde e blu restituite dalla telecamera del robot.

## energy

Intero: [0 9]. Il livello di energia del robot.

# Create il vostro ambiente

Playground consente di definre un ambiente di simulazione specifico per i robot. Per esempio il codice seguente crea una box con 4 robot dentro:

    <!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>

Esempio: Scaricate qui un modello del German Pavilion, 1929, disegnato Mies van der Rohe.