Driverless: dalla percezione all'attuazione

Kerub Driverless

Riconoscimento dei coni

Nelle gare di Formula SAE e Formula Student, la vettura driverless deve essere in grado di muoversi in completa autonomia su un tracciato sconosciuto, completando il numero fissato di giri nel minor tempo possibile. Tale tracciato è delimitato da coni, il cui colore e la cui forma sono noti a priori.

Al fine di navigare nel tracciato, il sistema di guida autonoma deve in primo luogo determinare, in ogni istante, la posizione di tali coni e costruire una mappa dell’ambiente circostante. Per fare ciò, la vettura è dotata di due diversi tipi di sensori, una stereo-camera ed un LiDAR, le cui informazioni vengono fuse insieme dal modulo di SLAM.

La stereo-camera è una particolare telecamera dotata di due diversi sensori ottici (destro e sinistro), che, similmente agli occhi degli esseri umani, permettono di acquisire due immagini dell’ambiente circostante e combinarle per ottenere il valore della distanza degli oggetti ripresi.

Una rete neurale chiamata YOLO v3 è stata addestrata a riconoscere i coni a partire dalle immagini. A seguito della classificazione, le informazioni sulla posizione dei coni nel frame destro e sinistro vengono combinate insieme attraverso un semplice processo di triangolazione, ottenendo le rispettive posizioni in relazione al veicolo.

Un LiDAR è un sensore che, attraverso dei fasci laser, permette di ricostruire l’ambiente circostante attraverso una nuvola di punti: ciascun raggio emesso dal dispositivo procede in linea retta e, impattando contro una superficie, torna indietro e viene registrato dal sensore, che è in grado quindi di determinare la posizione dell’oggetto contro cui il raggio ha urtato. Il sensore è in grado di acquisire nuvole di punti a 20Hz. All’interno di esse, i punti andranno ad individuare non solo i coni, ma anche l’asfalto del tracciato o eventuale vegetazione bordo pista. Pertanto il primo passo nell’analisi dei dati consiste nel filtrare e rimuovere tutto quello che sicuramente non è un cono, ottenendo poi le posizioni di questi ultimi attraverso un processo di clustering.

SLAM

Il problema di navigazione all’interno del circuito incognito, delimitato da coni di colore differenti, è stato affrontato in due fasi: la prima ha riguardato la stima della velocità longitudinale del veicolo; nella seconda, invece, la velocità è stata utilizzata per propagare in avanti lo stato dell’algoritmo di SLAM. Sfruttando un filtro di Kalman, è infatti possibile ottenere una stima di velocità a partire da misure provenienti da più sensori, ognuno affetto da rumore e biases differenti.

L’accelerazione e la velocità angolare misurate dalla IMU e la velocità angolare delle ruote, ottenuta dagli encoder, sono state incorporate nel filtro assieme ad un modello di moto per il veicolo.

Per affrontare il problema di Simultaneous Localization And Mapping si è invece preferito un algoritmo particle-based rispetto ad un approccio di tipo parametrico come il filtro di Kalman esteso: in questo modo infatti è stato possibile mantenere la non linearità nella cinematica del veicolo.

SLAM

La stima della posa e quella della posizione dei coni è stata effettuata in maniera iterativa sfruttando le informazioni dai sensori rimanenti: ad ogni passo, la velocità stimata precedentemente viene propagata in avanti, grazie ad un modello cinematico, per generare la popolazione di particelle, ad ognuna delle quali corrisponde una possibile posa del veicolo. Successivamente, grazie alle misure di posizione delle features rispetto all’auto, ottenute da LiDAR e camera RGB-D, ad ogni particella viene associata una mappa potenziale del circuito e infine, solo dopo aver osservato più volte uno stesso set di coni, è possibile selezionare le particelle più rappresentative della posa e della mappa reale: questa nuova generazione di particelle rappresenterà il punto di partenza per il passo successivo dell’algoritmo. Questa scelta inoltre permette di bilanciare con facilità performance e tempo di elaborazione semplicemente variando il numero di particelle utilizzate.

Pianificazione traiettoria e controllo di alto livello

Nelle prove dinamiche il veicolo autonomo deve affrontare sia tracciati noti che ignoti. Per questo motivo non è possibile stabilire anticipatamente una traiettoria ideale da inseguire.

La necessità di una pianificazione online ed, al contempo, una generazione del segnale di controllo da attuare per ottenerla, ci ha condotto all’implementazione di un pianificatore MPC (Model Predictive Control). Argomento ancora nel vivo della ricerca, un controllore MPC è un controllo predittivo capace di identificare, istante per istante, il controllo ottimo da applicare al veicolo per far sì che minimizzi un funzionale di costo dato. Nelle gare automobilistiche è facile immaginarsi quale parametro componga questo funzionale di costo da minimizzare: il tempo di percorrenza del tracciato.

Pianificazione traiettoria

Per simulare la risposta del sistema al variare dei possibili ingressi di controllo viene impiegato un modello di veicolo computazionalmente semplice, ma comunque non lineare: una versione modificata di monotraccia con vincoli come quello di aderenza ed angolo di sterzo.

Ad ogni iterazione, l’MPC pianifica su un orizzonte temporale imposto (discretizzato in un numero di campioni dell’ordine delle poche decine) fornendo una sequenza di ingressi di controllo da attuare che, nel caso di assenza di disturbi e modellazione perfetta, sarebbero validi per l’intero orizzonte temporale considerato. Consci però della presenza di disturbi ed inevitabili errori di modello, si va ad attuare soltanto il primo controllo valutato, poiché lo stato che indurrà sul sistema reale sarà diverso da quello predetto, e si useranno i restanti ingressi come initial guess della pianificazione per il passo successivo. In questo modo si realizza un controllo predittivo in grado di andare a selezionare angolo di sterzo, accelerazione e frenata necessari a portare il veicolo il più lontano possibile (nella finestra temporale considerata),mantenendo verificati vincoli come aderenza, velocità ed angolo di sterzo e mantenimento della carreggiata.

Attuazione

Il progetto del sistema di attuazione dello sterzo è partito con l’idea di mantenere la stessa configurazione dello sterzo della passata stagione composta da: sterzo, piantone, rinvio conico, colonna e classica scatola dello sterzo composta da pignone e cremagliera. Di conseguenza abbiamo provveduto ad effettuare una campagna di misure sulla vettura dello scorso anno con l’intenzione di ottenere dei dati sulla coppia esercitata dal pilota sullo sterzo, e quindi di effettuare un corretto dimensionamento dell’azionamento elettrico che lo avrebbe sostituito. Per fare ciò è stato applicato un estensimetro su ciascun braccetto dello sterzo in modo da misurare la forza che lo comprime o lo tira, e con semplici calcoli siamo risaliti alla coppia esercitata dal pilota durante i test, sia con vettura in movimento che ferma.

Inoltre la presenza di un trasduttore di posizione sulla colonna dello sterzo ci ha permesso di ricavare anche un indicazione sulla potenza delle sterzate del pilota. Con i dati alla mano siamo passati alla scelta del motore nei cataloghi delle aziende disponibili e compatibili con le nostre esigenze. Fra i motori presenti sono stati selezionati quelli che hanno la coppia in uscita dall’albero maggiore possibile in modo tale da ridurre al minimo la meccanica del riduttore al fine di permettere il moto retrogrado migliore possibile, ovvero consentire la sterzatura del veicolo quando il motore è disalimentato senza troppo sforzo da parte del pilota.

La scelta è ricaduta quindi su un motore di tipo brushless con riduttore epicicloidale a più stadi gentilmente concessi da Faulhaber. L’azienda ci ha inoltre fornito l’elettronica compatibile con il motore che ci consente di controllare l’angolo dell’albero del motore e di conseguenza quello delle ruote. A questo punto non restava che interfacciare il motoriduttore con il sistema di sterzo presente a bordo vettura e per fare ciò abbiamo sfruttato la scatola di rinvio conico inserendo il motore dalla parte diametralmente opposta del piantone dello sterzo e garantendo la trasmissione del moto attraverso una ruota conica. Infine, durante una nuova campagna di misura sulla nuova vettura saranno confrontati i valori della coppia ottenuti con estensimetri, (passibili di grandi errori), con quelli dell’elettronica Faulhaber, che ci permette di leggere la coppia erogata dal motore istante per istante, e se l’errore sarà trascurabile valideremo in definitiva l’intero progetto.