Veicolo con due sensori

Veicolo di Braitenberg con due sensori di luce, davanti a sinistra e a destra, collegati direttamente alle due ruote, senza nessuna logica intermedia. Con i collegamenti incrociati, nel veicolo che Braitenberg chiama 2b, il sensore più illuminato fa girare più in fretta la ruota dell’altro lato: il veicolo punta verso la luce e accelera avvicinandosi, come se la aggredisse.

Passare il cursore del mouse sopra il canvas: il cerchio giallo è la fonte di luce.

    let x = 200;      // posizione del veicolo
let y = 120;
let angolo = 0;   // direzione del veicolo

function luce( lato ) {   // luce nel sensore sinistro (-1) o destro (1)
    let sx = x + cos( angolo + lato*0.5 ) * 24;
    let sy = y + sin( angolo + lato*0.5 ) * 24;
    return map( dist( sx, sy, mouseX, mouseY ), 0,300, 2.5,0, true );
}

function setup() {
    createCanvas( 670, 240 );
    rectMode( CENTER );
}

function draw() {
    background( 255 );
    let sinistra = luce( -1 );
    let destra = luce( 1 );
    let ruotaSinistra = destra;   // collegamenti incrociati
    let ruotaDestra = sinistra;
    angolo += ruotaSinistra - ruotaDestra;
    let velocita = (ruotaSinistra + ruotaDestra) / 2;
    x = (x + cos( angolo ) * velocita + width) % width;
    y = (y + sin( angolo ) * velocita + height) % height;

    fill( 255, 200, 0 );
    circle( mouseX, mouseY, 20 );
    translate( x, y );
    rotate( angolo );
    fill( 120 );
    rect( 0, 0, 40, 24 );
    fill( 255, 200, 0 );
    circle( 21, -11, 6 );
    circle( 21, 11, 6 );
}
  

Algoritmo

a ogni fotogramma:                                                draw()
    misurare la luce nei due sensori, più forte vicino al mouse   luce()
    dare a ogni ruota la luce del sensore dell'altro lato
    curvare dalla parte della ruota più lenta
    avanzare alla velocità media delle due ruote                  cos() sin()
    se esce dalla tela, rientrare dal lato opposto                %
    disegnare la luce, poi il veicolo con i sensori               rotate()

Istruzioni


  

I sensori stanno a 24 pixel dal centro del veicolo, girati di mezzo radiante, circa 29 gradi, a sinistra (lato uguale a -1) e a destra (lato uguale a 1) della sua direzione.


  

La distanza fra il sensore e il mouse diventa un’intensità di luce: 2.5 a distanza zero, 0 a 300 pixel e oltre, dove il sensore resta al buio. Con true il risultato non esce dai due estremi.


  

Se la ruota sinistra gira più in fretta della destra il veicolo curva a destra, in senso orario, e il suo angolo cresce di tanti radianti quanta è la differenza fra le due ruote. La velocità è la media delle due ruote: lontano dalla luce il veicolo rallenta, e al buio si ferma.

Variazioni

Con i collegamenti diretti, nel veicolo 2a, il veicolo gira dall’altra parte e fugge dalla luce, tanto più in fretta quanto più è vicino, come se ne avesse paura, e si ferma solo al buio:


  

Con i collegamenti diretti e i sensori che rallentano le ruote invece di accelerarle, nel veicolo 3a, il veicolo si avvicina alla luce sempre più piano e si ferma rivolto verso di lei. Braitenberg lo associa all’amore: