Riassunto analitico
Il mondo delle automobili sta vivendo un periodo di grande rivoluzione, legato principalmente al software. La complessità nel software applicativo, specialmente nella guida autonoma, ha avuto una crescita di un fattore moltiplicativo a tre o addirittura quattro cifre nella dimensione e nella richiesta di risorse computazionali. Come ovvia conseguenza l’hardware ha avuto una crescita analoga, nelle risorse e nelle dimensioni. Per far fronte a questo abbiamo necessariamente bisogno di un sistema operativo che sia in grado di sfruttare, partizionare e gestire al meglio le risorse disponibili, per poter garantire sicurezza e predicibilità dell’applicativo. Ipotizziamo un sistema embedded multi-OS, dove le risorse sono virtualizzate e su cui girano in parallelo lo stack di guida autonoma e tutto il sistema di infotainment: come facciamo ad essere sicuri che l’interferenza generata dalla radio, dal navigatore o dalla dashboard non vada a disturbare eccessivamente lo stack di guida autonoma, causandone dei ritardi che, inevitabilmente, porterebbero a potenziali conseguenze tragiche?
La piattaforma target, su cui è stato basato lo sviluppo e i test, consiste in una piattaforma embedded (in particolare una Nvidia AGX Xavier da 32GB di memoria) su cui girano due sistemi operativi: un’immagine Yocto derivata da core-image-minimal su cui girerà lo stack di guida autonoma e un’immagine Linux4Tegra su cui gireranno tutti i software di contorno. Le risorse sono virtualizzate tramite Jailhouse, un hypervisor bare-metal basato su Linux, mentre l’interferenza sarà mitigata da una tecnologia chiamata memguard, che è in grado di separare memoria garantita da memoria “best-effort”. Infine, come software di guida autonoma è stato scelto Autoware.Auto e, in particolare, è stata selezionata la demo Autonomous Valet Parking: questa semplice demo permette di far parcheggiare autonomamente l’automobile e farla uscire dal parcheggio per raggiungere una zona prestabilita.
L’obiettivo del mio lavoro è stato principalmente di studio e di ricerca: innanzitutto mi sono concentrato sulla validazione dell’ambiente target, andando a creare un’immagine Yocto su cui potesse girare il software di guida autonoma e su cui si potesse abilitare Jailhouse. Dopodiché sono andato ad analizzare nel dettaglio la struttura del software di guida autonoma, basato su ROS2 (una serie di framework per lo sviluppo di robot, sempre più utilizzato nell’ambito real-time), andando ad analizzare i nodi e i topic che lo compongono. Questo mi ha permesso di comprendere al meglio la complessità del sistema e di porre le basi per un’analisi delle performance adeguata. Infine, mi sono occupato della vera e propria analisi, andando a selezionare vari scenari e generando dei grafici che potessero mostrare adeguatamente i risultati.
Il mio contributo è andato a porre le basi per gli sviluppi futuri, potendo far affidamento su un target funzionante e potendo andare a risolvere tutte le problematiche riscontrate durante il mio percorso. Il prossimo passo nell’analisi delle performance dello stack di guida autonoma consisterà nello studio della latenza di esecuzione dei singoli nodi e della latenza end-to-end in presenza di interferenza, confrontando i risultati di uno scenario con memguard e uno senza.
|