\documentclass{article}

% Language setting
% Replace `english' with e.g. `spanish' to change the document language
\usepackage[italian]{babel}

% Set page size and margins
% Replace `letterpaper' with`a4paper' for UK/EU standard size
\usepackage[letterpaper,top=2cm,bottom=2cm,left=3cm,right=3cm,marginparwidth=1.75cm]{geometry}

% Useful packages
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorlinks=true, allcolors=blue]{hyperref}
\usepackage{float}

\title{Misura di parametri di dinamica del veicolo mediante smartphone}
% \author{Michelangelo Moncada}
\date{}

\begin{document}
\maketitle

    % \begin{figure}[H]\centering
    % \includegraphics[scale=0.05]{Immagini/polito_logo_2021_blu.jpg}

    % \end{figure}
    
% \textbf{\\Relatori}:\\
% prof. Antonio Servetti\\                 
% \textbf{Corelatori}:\\ 
% prof. Enrico Galvagno\\
% prof. Stefano Mauro\\
% prof. Paolo Stefano Pastorelli\\\

\textbf{\\Relatori} \hfill \textbf{Laureando}\\
prof. Antonio Servetti \hfill Michelangelo Moncada\\
\textbf{Corelatori}\\
prof. Enrico Galvagno\\
prof. Stefano Mauro\\
prof. Paolo Stefano Pastorelli\\
\setlength\parindent{0pt}

\section{Introduzione}
Il lavoro di tesi ha lo scopo di sperimentare l'utilizzo dello smartphone per la misura e il calcolo dei parametri alla base dello studio della dinamica del veicolo. La misura diretta di queste grandezze richiede l'uso di strumenti esterni molto costosi come la rete CAN o la piattaforma inerziale IMU. La loro stima tramite l'utilizzo dei sensori (fotocamera, accelerometro, giroscopio e gps) presente in ogni smartphone permette di ridurne drasticamente i costi e facilitarne la misurazione fatto salvo una riduzione nella precisione delle misure. In particolare, l'accelerometro ed il giroscopio permettono di calcolare le componenti dell'accelerazione e della velocità angolare mentre il gps determina una stima della traiettoria del veicolo e la sua velocità istantanea. La fotocamera, invece, permette di ottenere una stima dell'angolo di sterzo, puntando dei markers applicati allo sterzo ed elaborandone l'immagine affinché vengano riconosciuti. Da questi parametri di dinamica del veicolo se ne deriva l'angolo di assetto beta ($\beta$) e la sua precisione. Tale grandezza rappresenta l'angolo fra la direzione longitudinale del moto e la direzione della velocità V ed è molto importante poiché descrive la stabilità del veicolo durante una curva o in situazioni di emergenza.\\
Durante il lavoro svolto è stata migliorata l'applicazione smartphone, già esistente, per la stima di tali parametri con particolare attenzione all'angolo volante $\theta$. Modificando e aggiornando l'intera struttura dell'app è stato possibile eliminare alcune delle problematiche note nella versione precedente come la copertura accidentale dei markers, il basso frame-rate di acquisizione dell'angolo volante e soprattutto il de-allineamento dei dati acquisiti.

\section{Fasi si sviluppo}

    \subsection{Re-ingegnerizzazione dell'applicazione}
        Nella prima fase del lavoro svolto è stata ripristinata l'applicazione ormai datata aggiornando o sostituendo librerie di codice e parti dell'applicazione così da renderla più performante ed adeguarla ai pattern odierni di programmazione. E' stato necessario, infatti, sostituire alcune parti che causavano rallentamenti o crash dell'applicazione dovuti ad incompatibilità. In particolare mi sono occupato di sostituire o meglio di trasformare i moduli in unità più leggere e di garantire una navigazione scorrevole e più intuitiva ottenendo stabilità e assenza di crash improvvisi.
        
    \subsection{Ottimizzazione della rilevazione dell'angolo volante}
        Nella seconda fase si è inizialmente analizzato il flusso di acquisizione dati per trovare alcune criticità e risolverle. Una delle principali problematiche era data dal fatto che l'applicazione acquisiva ed elaborava i dati in real-time riducendo il tempo di esecuzione ma causando un de-allineamento dei dati acquisiti. Il parametro che risentiva maggiormente di questa problematica era \textbf{l'angolo volante $\theta$}, la cui lettura viene effettuata montando lo smartphone, con un apposito supporto all'interno del veicolo, e con la fotocamera rivolta verso il volante con applicati dei Markers Aruco. Questa modalità di lettura comporta un'altra problematica: il conducente sterzando, in determinate situazioni, è portato a coprire lo sterzo diminuendo l'accuratezza della stima dell'angolo volante. Pertanto è stato fatto un upgrade della libreria \textbf{OpenCv} eseguendo una compilazione ad-hoc che integrasse la nuova libreria \textbf{Charuco}: la detection dei singoli markers è stata sostituita con la rilevazione di una board costituita da un loro insieme. 
        
        \begin{figure}[H]
            \centering
            \includegraphics[width=0.9\linewidth]{Immagini/MtoB.png}
            \caption{Upgrade dai marker semplici alla Charuco board.}\label{fig:MtoB}
        \end{figure}
        
        La stima della posizione dei markers è possibile grazie ad ArUco, una libreria, che permette di trovare una corrispondenza tra i punti in un ambiente reale e la loro proiezione in un immagine 2d. Un marker ArUco è composto da un bordo nero, che ne definisce il perimetro e facilita la detection, e da una matrice binaria interna che costituisce l'id del marker. La sostituzione di ArUco con la libreria ChArUco porta a dei miglioramenti per quanto riguarda l'accuratezza del calcolo della posizione di un marker. Questo è dovuto al fatto che una board (gruppo) di markers è molto efficiente nella detection ma produce risultati con bassa accuratezza. Con una scacchiera, invece, è possibile avere un'accuratezza migliore ma una scarsa versatilità in termini di visibilità poiché la parziale occlusione non è permessa. Per questo motivo è stato definito un terzo approccio che risulta essere la combinazione dei due descritti precedentemente e consiste nell'utilizzo della ChArUco board.
        Nonostante i risultati ottenuti, il non poter modificare in alcun modo il framerate della camera, creava dei rallentamenti nell'acquisizione delle misure: è stato modificato il modulo di cattura dei frame della fotocamera, sostituendo la libreria \textit{Camera}, ormai deprecata, con la nuova \textit{Camera2}. In questo modo è stato possibile modificare il framerate della camera sfruttando a pieno tutto l'hardware messo a disposizione al giorno d'oggi garantendo stabilita e un aumento della frequenza di cattura. 
        
    \subsection{Acquisizione ed esportazione dati in raw}
        La terza fase è fondamentale per la verifica qualitativa e la possibile elaborazione in post dei dati prodotti. Inizialmente mi sono focalizzato sullo studio delle strutture dati utilizzate, applicando nuove API così da garantire una gestione scalare e facilmente modificabile del database. E' stata integrata una modalità per l'acquisizione in \textbf{raw} dei parametri di dinamica del veicolo. In questo modo è possibile non solo avere un metro di paragone con i dati elaborati in real-time ma anche verificare i risultati utilizzando strumenti professionali con una frequenza di acquisizione più stabile. Producendo in output una serie di file con i dati raccolti per ogni sensore, si può realizzare un'interpolazione dati in post ottenendo un asse dei tempi comune. Per rendere possibile l'interpolazione è stato essenziale l'inserimento dei \textbf{timestamp}, in ogni tupla, per tutte le strutture dati associate ad ogni sensore. In tal modo si sopperisce alla mancanza di un clock comune per i sensori dello smartphone.


\section{Risultati}

% Utilizzando un Samsung Galaxy S20 che implementa una fotocamera capace di registrare a 60 fps, è stato possibile superare le limitazioni della vecchia API passando da una registrazione che si aggirava intorno ai 20 fps ad una media di 32/34 fps con picchi di 45 fps. Naturalmente queste medie sono state ottenute tenendo conto del peso computazionale dovuto all'elaborazione real-time dei singoli frame per la detection dei markers.\\
% La velocità, oltre ad essere influenzata dall'hardware, dipende dal variare delle condizioni di luce e da eccessive vibrazioni. Il problema della variazione delle condizioni di luce e la possibile presenza di riflessi è stato attenuato permettendo l'attivazione del flash durante l'esecuzione della prova: la luce diretta sulla board migliora la detection dei markers aumentando il framerate medio di circa 5 fps.\\
Per l'analisi dei risultati, le prime 3 prove sono state svolte tramite un simulatore composto dal software \textit{CarMaker} e da una postazione di guida. Lo scopo principale di queste simulazioni è quello di confrontare il valore dell'angolo volante restituito dal simulatore con quello calcolato dall'applicazione. Uno dei risultati più interessanti può essere osservato nella prova su pista dove è stata utilizzata una supercar (Audi r8) per testare la capacità dell'applicazione nel rilevare l'angolo $\theta$ a velocità elevate. Le curve sono state percorse seguendo una traiettoria ideale con uno stile di guida aggressivo.

\begin{figure}[H]
    \centering
    \includegraphics[width=0.5\linewidth]{Immagini/percorso_pista_184006.jpg}
    \caption{Grafico della terza prova simulata su pista.}\label{fig:percorso_pista_184006}
\end{figure}

Dal grafico si notano picchi non uniformi dovuti a piccoli cambi di direzione o, in alcuni punti, fasi di sottosterzo per riportare il veicolo in traiettoria. Nonostante la guida sportiva i valori di $\theta$ rimangono sempre molto fedeli soprattutto lungo l'asse tempi. 

Un volta verificata la correttezza dell'angolo $\theta$ e del suo valore nel tempo, si è deciso di fare lo stesso per le altre componenti di dinamica del veicolo. Infatti, lo scopo è quello di verificare la correttezza di queste ultime componenti, confrontando, i valori calcolati dai sensori dello smartphone con quelli calcolati da una \textbf{IMU}. Una delle prove è stata effettuata su un percorso che circumnaviga il Politecnico di Torino a bordo di una Hyundai Veloster.

\begin{figure}[H]
    \centering
    \includegraphics[width=1\linewidth]{Immagini/30_09_21_1306_confAccX.png}
    \caption{Confronto con sovrapposizione dell'accelerazione X tra IMU e Applicazione.}\label{fig:30_09_21_1306_confAccX}
\end{figure}

Confrontando i risultati prodotti dall'applicazione e la piattaforma inerziale IMU, si è potuto constatare come tutte le modifiche implementate abbiano portato alla soluzione del problema di sincronizzazione dell'angolo volante $\theta$ garantendo dei valori affidabili.

\end{document}