M.Mariani (m.mariani34@studenti.unipi.it)L'obiettivo di questo progetto è la navigazione autonoma di una auto da modellismo su un tracciato di strada asfaltata e uno di coni (gialli e blu) per delimitare la corsia. Il primo passo è stato quello di studiare lo stato dell’arte in modo da reperire quante più informazioni possibili: in particolare viene preso come riferimento il seguente articolo Dagger article in modo da avere una linea guida per lo sviluppo e l’implementazione.
La repository è così strutturata:
- docs: racchiude gli articoli dello stato dell'arte per lo studio del problema;
- world: racchiude tutti i file urdf e sdf per il caricamento dell'auto e del tracciato;
- scripts: racchiude tutti i file utili al funzionamento dell'algoritmo;
- data_test: contiene tutte le imamgini/label ottenute (dataset aggregato);
- dagger_models: contiene i modelli allenati durante la procedura di training;
- runs: contiene i dati del training riproducibili su TensorBoard;
- results: contiene immagini relative al training (loss) e i video di test;
- trajectory: contiene tutti i dati delle traiettorie (posizione veicolo) ottenute durante i test;
L’articolo scelto descrive un algoritmo iterativo denominato Dagger (Dataset Aggregation) che allena una policy deterministica basandosi sulle osservazioni ottenute dalla guida di un esperto (umano, controllore P, mpc...). Inizialmente si crea un dataset collezionando immagini dall'ambiente (sotto la policy del solo expert). Dopo aver collezionato N immagini, si procede con un primo training della policy per aggiornare i pesi della rete e minimizzare la loss tramite MSE (azioni expert - azioni predette). Una volta allenata la prima policy, le azioni intraprese sull'ambiente non saranno date solo dall'esperto ma in parte anche dalla rete:
dove "a" rappresenta le azioni dell'expert, "agent" quelle predette dalla rete e
Per l'implementazione dell'algoritmo sono state prese in considerazione due tipologie di tracciato:
- tracciato su strada: è il tracciato del percorso di Formula1 di Barcellona-Catalogna;
- tracciato con coni: è il tracciato delimitato da coni gialli e blu (si considerano una serie di circuiti della Formula Student).
Per il tracciato con i coni è stato necessario utilizzare il modello Yolov8 per il riconoscimento e l'identificazione, tramite bounding box, all'interno dell'immagine.
In primis è necessario eseguire il clone della repository tramite il comando:
git clone --recurse-submodules https://github.com/MatteoMariani99/psd_DaGGER.git❗Il tag --recurse-submodules è necessario per clonare anche il submodule relativo alla cone detection.❗
Il modo più semplice per poter utilizzare l'algoritmo è quello di installare anaconda attraverso l'apposita guida per i sistemi Linux.
Una volta installato, aprire un terminale all'interno della repository tramite il comando CTRL + ALT + T ed eseguire:
chmod +x install.shPer eseguire lo script fare:
bash install.shSe si possiede una GPU Nvidia, questa verrà rilevata (all'interno dello script install.sh) e di conseguenza verrà automaticamente creato l'ambiente conda con tutti i driver necessari. Al contrario, lo script creerà un ambiente per l'utilizzo con la CPU. Durante la creazione dell'ambiente verranno installate tutte le dipendenze necessarie, in modo da aver a disposizione un ambiente completo e pronto all'uso.
Una volta fatto ciò, l'ambiente deve essere attivato tramite il comando:
conda activate dagger_cpunel caso con GPU, oppure tramite il comando:
conda activate daggernel caso con solo CPU.
In Visual Studio Code è possibile installare l'apposita estensione Python Environment Manager per la gestione degli ambienti python/conda: in questo modo è possibile attivare l'ambiente che si desidera senza dover eseguire i comandi sopra riportati.
Per poter eseguire il testing si utilizza lo script:
python3 scripts/test_agent.pyse non viene specificato alcun tag allora verrà eseguito il test sul tracciato su strada. Al contrario, specificando il tag --cones è possibile testare il tracciato con i coni nel seguente modo:
python3 scripts/test_agent.py --conesPer poter eseguire il training si utilizza lo script:
python3 scripts/train_agent.pyse non viene specificato alcun tag allora verrà eseguito il training sul dataset aggregato conclusivo, salvando il modello allenato nella cartella road. Al contrario, se è stato costruito il dataset aggregato con il tracciato dei coni, è necessario specificare il tag --cones per salvare il modello nella giusta cartella.
Specificando invece il tag --optimize è possibile eseguire il processo di ottimizzazione degli iperparametri nel seguente modo:
python3 scripts/train_agent.py --optimizePer poter eseguire l'algoritmo dagger si utilizza lo script:
python3 scripts/dagger_test.pyse non viene specificato alcun tag allora verrà eseguito l'algoritmo sul tracciato su strada con un numero di iterazioni NUM_ITS pari a 49. Al contrario, utilizzando il tag --cones si specifica il tracciato con i coni mentre con il tag --num_its è possibile personalizzare il numero di episodi per il quale viene eseguito l'algoritmo, il tutto nel seguente modo:
python3 scripts/dagger_test.py --cones --num_its=42M.Mariani, (2024) Progetto Speciale per la Didattica: navigazione con algoritmo DAgger
[Source code](https://github.com/MatteoMariani99/psd_DaGGER)


