2

Robot Competition 2016 (Università degli Studi di Parma)

Nelle ultime settimane mi sono dedicato allo sviluppo del software per poter partecipare alla Robot Competition 2016. Questa competizione era parte del mio esame di Robotica Mobile ed è stata un’interessante esperienza.

Nella gara eravamo suddivisi in team, il mio era composto da me e Roberto. Abbiamo deciso di chiamarci “Gli Indoors”.

 

IMG-20160304-WA0010

Il robot Pioneer 3DX utilizzato in gara

Regolamento della competizione

Lo scopo della competizione è quella di fare in modo che il robot, quando è posto in prossimità di speciali ostacoli detti target, superi tali target a destra o a sinistra secondo le indicazioni che gli sono fornite.

Viene nel seguito fornito il regolamento della competizione.

  1. La competizione è svolta utilizzando il robot Pioneer 3DX equipaggiato con un laser scanner Sick LMS100 e con un apposito canestro per la raccolta e la lettura del codice a barre apposto a cubi di legno. Il robot sarà controllato con il software di controllo prodotto da ciascuna squadra utlizzando come framework di supporto il ROS di Willow Garage. Ciascuna squadra ha a disposizione due prove per portare a termine il compito
    assegnato.
  2. Il campo di gara è costituito dal corridoio della Palazzina 1 del Dipartimento di Ingegneria dell’Informazione. Sul campo di gara sono presenti due tipi di ostacoli. Gli ostacoli generici sono posti a contatto diretto con le pareti del corridoio. Invece, le porte sono ostacoli di dimensioni contenute (non più di 30-40 cm) posizionati al centro del corridoio, ossia sostanzialmente “isolati” rispetto al background. Le porte sono pensate per poter essere identificati cercando forti variazioni dei beam della scansione. Si prevede di posizionare 2 o 3 porte in totale.
  3. Il punto di partenza del robot in ciascuna delle due prove (detto base) a disposizione di ciascuna squadra sarà posto ad una delle estremità del corridoio (più probabilmente verso la porta di ingresso della Palazzina 1). Il punto di arrivo (detto traguardo) è posto all’estremità opposta del corridoio. Le porte sono poste esclusivamente tra la base ed il traguardo.
  4. Ciascun round della gara si svolge come segue:
    1. il robot parte dalla base ed inizia a muoversi nell’ambiente;
    2. quando il robot identifica una porta, si dirige verso di esso e si ferma ad una distanza massima dmax;
    3. un operatore posto immediatamente dietro alla porta rilascia un cubo con un codice a barre che rappresenta una cifra (da 0 a 9); se il cesto contiene già un cubo rilasciato nella precedente porta, prima di rilasciare il nuovo cubo, esso viene rimosso dall’operatore;
    4. letto il codice a barre il robot superera l’ostacolo a sinistra se la cifra letta è dispari (1, 3, 5, 7, 9) oppure a destra se la cifra è pari (0, 2, 4, 8);
    5. il round termina quando il robot giunge al traguardo.
    6. La distanza dmax sarà definita in modo tale da consentire all’operatore di poter ritirare e rilasciare i cubi (dovrà essere circa di 80 cm). Il rispetto della distanza non sarà verificato, dato che la penalizzazione sarà la maggior durata o l’impossibilità del ritiro e rilascio del cubo da parte dell’operatore.
  5. Ogni round ha termine quando il robot raggiunge il traguardo oppure quando sono trascorsi 180 s dall’inizio della prova. I tempi riportati vengono aumentati del 5% ad ogni contatto con un ostacolo.
  6. Verrà considerato come risultato della competizione il migliore degli esiti delle due prove. A parità di risultati complessivi delle competizione, verrà considerato anche l’esito della prova peggiore.
  7. Sarà attribuito anche il premio “Robot più affidabile” al team che riesce ad ottenere buoni
    risultati in entrambe le prove.

 

 

Fasi della gara

Fasi della gara

 

 

Come abbiamo deciso di implementare il software

Il robot è suddiviso in 3 comportamenti differenti:

  • Go To Behavior: ricerca la porta e, se la trova, si dirige verso di essa;
  • Stay in the middle Behavior: se non ci sono porte e di fronte a sè ha sufficiente spazio libero, il robot cerca di stare nel mezzo del corridoio
  • Obstacle Avoid Behavior: se la distanza frontale è sotto una certa soglia allora si attiva questo comportamento fino a che l’ostacolo non è stato evitato.

Questi 3 comportamenti sono mutuamente esclusivi e quello di livello maggiore (se attivo) esclude quello di livello inferiore.

Le porte sono individuate in questo modo:

  • Si suddivide la scansione laser (fatta da -90 gradi a +90 gradi) in intervalli.
  • un intervallo inizia quando ad un certo indice della scansione si rileva una distanza che si differenzia dalla precedente di almeno 70 cm
  • un intervallo finisce quando si ha ancora una differenza tra le scansioni
  • Quando un intervallo è largo quanto la porta (con una certa tolleranza di errore) allora è una porta
  • Se si individuano più porte, allora considero la porta più vicina (il punto medio di tale intervallo)
  • Se il robot vede una porta ma per i successivi 2 secondi non la vede più per un qualsiasi motivo, gli facciamo supporre che sia ragionevole che la porta ci sia ancora e quindi gli facciamo mantenere quella direzione. Se dopo i 2 secondi non la vedo più allora è stata persa davvero.

 

Il superamento della porta ci ha dato parecchi problemi poichè il terreno di gara era un corridoio non molto largo e quindi era difficile evitare collisioni sia con la porta sia con il muro. Abbiamo quindi pensato di far raggiungere al robot il punto medio tra il bordo della porta e il muro. Una volta arrivato in questo punto viene fatta una correzione in modo tale da mantenere il muro ad una distanza costante e, infine, il robot si allontana dal muro dopo aver superato la porta.

 

Abbiamo poi aggiunto un comportamento aggiuntivo nel caso in cui il robot si stia dirigendo verso la porta ma abbia un ostacolo frontale. In questo caso viene fatta una piccola correzione in modo tale da mantenere la direzione ma spostarlo tanto quanto basta da fargli evitare l’ostacolo.

 

Esito gara

Nella gara ci siamo posizionati al secondo posto con un tempo di 59 secondi. Il primo classificato è riuscito ad ultimare la gara con 52 secondi.

Nonostante il secondo posto penso che questa sia stata una fantastica esperienza. Complimenti al vincitore!

 

Video gara

Qui di seguito il video dei nostri due round (solo del mio team)

Share This:

Simone

Studente Data di nascita: 12/07/1990 - Parma, IT Hobbies: Informatica, acquariofilia, viaggi, tecnologia, aria aperta, sport, web.

2 Comments

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *