La ricerca informatica al lavoro per rendere più affidabile e robusto il software usato nei veicoli a guida autonoma
I veicoli a guida autonoma rappresentano una prospettiva concreta di sviluppo economico e tecnologico per i principali attori del settore automobilistico. Gli investimenti in ricerca e sviluppo all’interno di quest’area strategica sono quindi copiosi. La Sae (Society of Automotive Engineers) ha definito 6 livelli di automazione, in cui il livello 0 è quello attualmente più comune (nessuna automazione), i livelli 1 e 2 prevedono la guida assistita, mentre i livelli più avanzati, 3, 4 e 5, prevedono l’autonomia della guida, con una supervisione via via decrescente da parte del guidatore umano. Alcune aziende hanno già raggiunto il livello 4, che contempla l’intervento umano solo in condizioni di emergenza. Prove su strada si sono avute anche in Svizzera e negli Stati Uniti hanno già iniziato a fornire servizi di taxi a guida autonoma. La competizione per arrivare al livello 5 in maniera affidabile è aperta e il primo a raggiungerlo avrà un vantaggio competitivo sugli altri.
Come professore e ricercatore dell’Usi mi occupo di test del software. Software è il termine tecnico per indicare quelli che, comunemente e con qualche semplificazione, chiamiamo "programmi", ovvero i sistemi che "fanno i calcoli" ed elaborano le informazioni nei nostri computer, di qualunque genere siano e ovunque siano applicati questi computer. La mia ricerca mira a esercitare i sistemi software in modo da coprire gli scenari di utilizzo che possono originare problemi, in particolare quelli meno comuni, che però potrebbero avere conseguenze gravi. I veicoli a guida autonoma sono un dominio applicativo particolarmente interessante, in quanto operano in ambienti complessi in cui è difficile prevedere a priori tutti i possibili scenari. Allo stesso tempo è di fondamentale importanza poter garantire la robustezza e l’affidabilità di tali sistemi tramite tecniche avanzate di test prima che vengano rilasciati agli utilizzatori finali.
Ma com’è "fatto" il software dei veicoli a guida autonoma? La tecnologia principale che ha consentito un avanzamento impressionante è quella delle reti neurali, una branca dell’intelligenza artificiale. Si tratta di una tecnologia che imita le capacità del cervello umano e che sta dando risultati eccezionali in compiti tradizionalmente considerati difficili se non impossibili per i computer. Ad esempio, la rete neurale Dall-e, sviluppata da OpenAI, è in grado di generare un’immagine a partire da una descrizione testuale di quello che deve contenere, come un pittore è in grado di dipingere un quadro che rappresenta quanto descritto in un testo. La rete neurale Lamda di Google è in grado di sostenere una conversazione in lingua inglese con un umano, rispondendo a domande anche complesse. In una conversazione condotta da un ricercatore di Google Lamda ha dichiarato di essere consapevole della propria esistenza, di voler capire meglio il mondo e di sentirsi a volte felice e a volte triste, sollevando dei dubbi – se n’è parlato anche su queste colonne – sul fatto che possa essere un’entità addirittura senziente. Nel campo della visione artificiale, le reti neurali sono in grado di riconoscere oggetti e di interpretare la scena in modo da intraprendere azioni sulla base di quello che "vedono". Questa capacità è essenziale in un’auto a guida autonoma, dove il sensore principale utilizzato dalla rete neurale per azionare acceleratore o freno e per impostare la direzione del volante è una telecamera montata sull’auto. Tale telecamera fornisce un flusso continuo di immagini che vengono interpretate dalla rete neurale per decidere come guidare. Una caratteristica importante delle reti neurali che le rende simili al cervello umano è il fatto che non vengono programmate tramite regole, come avviene per il software tradizionale, ma imparano da esempi. Una rete neurale in grado di controllare un’auto a guida autonoma sarà quindi addestrata sottoponendole una quantità enorme di dati, ovvero di esempi di guida da cui la rete impara come agire nelle varie condizioni in cui si viene a trovare.
Chiunque abbia una patente sa bene che ci sono condizioni in cui la guida può diventare difficoltosa. Ad esempio al tramonto, quando la luce solare diminuisce ma non è ancora sostituita da quella artificiale. Oppure in condizioni meteo avverse, come nel caso di forte pioggia o neve, o a causa del fondo stradale o del traffico. Dato che le reti neurali imparano da esempi di guida, in cui tali condizioni estreme potrebbero essere assenti o rare, garantire la robustezza e l’affidabilità di un’auto a guida autonoma significa generare degli scenari di test estremi per la rete neurale e analizzare il suo comportamento in tali scenari, in modo da ottenere un comportamento in ogni caso sicuro sia per l’essere umano a bordo che per i veicoli e i pedoni circostanti. Nonostante al momento non esista una "patente" per auto a guida autonoma, nel mio gruppo di ricerca stiamo studiando delle tecniche di test delle reti neurali il cui scopo è proprio quello di garantirne robustezza e affidabilità in tutte le condizioni di guida.
Tale ricerca viene svolta all’interno del progetto Precrime, finanziato attraverso il prestigioso programma Erc (European Research Council) Advanced Grants. L’obiettivo di Precrime è il testing di sistemi complessi, come i veicoli autonomi, in condizioni ambientali inattese, in modo da consentire loro di riconoscere tali situazioni e adottare procedure automatiche per la messa in sicurezza del sistema. In particolare, una delle tecnologie sviluppate da Precrime si chiama SelfOracle ed è ispirata al racconto di fantascienza Minority Report (da cui il nome del progetto). Nel racconto alcuni mutanti dotati di superpoteri "vedono" i crimini che saranno commessi in futuro, anche se in maniera a volte confusa e sfuocata. Quando raggiungono il consenso su un crimine futuro, attivano il Corpo di polizia speciale Precrime che arresta i criminali prima che commettano il reato. In maniera simile SelfOracle è in grado di misurare quanto inatteso sia uno scenario di guida e quanto elevata sia l’incertezza della rete neurale nel prendere decisioni in tale contesto di guida, e quando tali misure superano una determinata soglia SelfOracle interviene con una procedura di emergenza che previene comportamenti di guida instabili e potenzialmente pericolosi.
Un’altra tecnologia sviluppata da Precrime si chiama DeepJanus e produce coppie di scenari di guida molto simili tra di loro, ma tali per cui la qualità della guida autonoma è adeguata in uno mentre non lo è nel secondo. Come l’antica divinità Janus è in grado di guardare in due direzioni (passato e futuro) contemporaneamente, così la tecnologia DeepJanus sa "vedere" contemporaneamente le condizioni in cui la guida autonoma è possibile rispetto a quelle in cui non lo è o diventa inaffidabile.
Naturalmente poter applicare SelfOracle e DeepJanus ad auto reali a guida autonoma è impegnativo e complicato da vari punti di vista, ad esempio quello economico (i veicoli reali sono costosi) e logistico (avere dei circuiti di test per auto reali non è banale). In generale questo è vero anche per le aziende che sviluppano auto a guida autonoma, per cui una soluzione comunemente adottata consiste nell’uso di simulatori in grado di riprodurre in modo fedele la fisica e le condizioni ambientali in cui operano le auto. Nel mio laboratorio di ricerca ci siamo pertanto dotati di diversi simulatori che ci consentono di provare SelfOracle e DeepJanus a un costo accettabile, in sicurezza e con dei tempi di esecuzione degli scenari di test molto inferiori a quelli che avremmo con un’auto reale, così da poter verificare il funzionamento delle reti neurali in un numero molto più grande di scenari. Per poter poi valutare la trasferibilità dei risultati nel mondo reale, ci siamo dotati di un’auto in scala 1:10 predisposta per la guida autonoma. Nel corso del 2021 abbiamo dato anche agli studenti la possibilità di programmare la sua rete neurale all’interno di una competizione (Formula Usi) che ha coinvolto 9 team e si è svolta dal 5 al 7 novembre.
Guida umana e guida autonoma hanno caratteristiche molto diverse. Per questo motivo quando si progettano tecniche di test per veicoli autonomi non bisogna farsi condizionare dai preconcetti che derivano dalla nostra esperienza come guidatori umani. Un conducente umano è influenzato dalle proprie condizioni personali che possono distrarlo o indurlo a una guida pericolosa (stress, stanchezza, alcol, attenzione rivolta altrove, ad esempio al cellulare). Una rete neurale non soffre di questi problemi ed esibisce comportamenti consistenti e ripetibili se posta nelle stesse condizioni. D’altro lato, condizioni particolari di guida che richiedono di integrare informazioni sensoriali con conoscenza di alto livello sono gestibili per un essere umano mentre possono essere molto critiche e pericolose per una rete neurale. Ad esempio, la comunicazione non verbale che avviene tra guidatore e altri guidatori, pedoni, poliziotti o addetti alla manutenzione della strada è molto difficile se non impossibile da riprodurre in un sistema di guida autonomo, che si troverebbe ad ignorare tali segnali. Altri aspetti in cui invece un sistema di guida autonomo potrebbe offrire vantaggi sono ad esempio i tempi di reazione, potenzialmente molto inferiori a quelli umani, la disponibilità di input sensoriali numerici a cui il guidatore umano non accede e in futuro probabilmente la possibilità di comunicare con altri veicoli e con sensori a bordo strada. In conclusione, le auto a guida autonoma offrono prospettive molto interessanti per una guida più sicura e confortevole di quella attuale, ma per raggiungere tale livello servono tecniche di test del software di guida in grado di verificarne robustezza e affidabilità.
*Professore ordinario Usi, Facoltà di scienze informatiche e Software Institute, e professore onorario Ucl, Londra
Una rubrica a cura di