Sviluppo di un controllo automatico della guida di un autoveicolo

Sviluppo di un controllo automatico della guida di un autoveicolo
Nome:
Hao
Cognome:
Quan
Matricola:
864753
Corso di Laurea: Informatica (F94)
Corso: Architetture e Programmazione DSP
Professore:
Mario Malcangi
Anno accademia: 2015 - 2016
Motivazione e Contesto
Le seguenti procedure, maggior parte ho descritto usando Mac. Però sono
molti simili al sistemi operativi Windows.
2
Architettura del sistema (hardware e software)
Software requisiti:
Scarica Matlab_R2015b e segue istruzioni seguenti per installare i software
necessari.
Clic [Add-Ons] – [Manage Add-Ons].
Si deve controllare se il Embedded Coder è installato o meno. Se non è
installato, si deve installarlo, perché è fondamentale.
Poi clic [Add-Ons] – [Get Add-Ons], nella finestra uscita, si deve installare
“Embedded Coder® Support Package for Freescale™ FRDM-KL25Z Board”
(Fig. 1.3)
Aggiorna il firmware del board:
Ottiene l’ultima versione Bootloader e Firmware
1. Scarica l’ultima versione del firmware dal sito
http://www.pemicro.com/opensda/
3
2. Unzip il file scaricato.
3. Nella directory hai scaricato, trova il file
“OpenSDA_Bootloader_Update_App_v111_2013_12_11.zip” e unzip.
Update Bootloader Version:
1. Tieni premuto il pulsante “Reset” del FRDM-KL25Z Board e
connetti il cavo usb dal board(porta di OpenSDA)con MAC.
2. Guardi il Led sul board lampeggia indica che il board ora è sulla
modalità “bootloader”. Ora lascia il pulsante “Reset”.
3. Apri il “Finder” e trova il dispositivo “BOOTLOADER”.
4. Coppia soltanto il file “BOOTUPDATEAPP_Pemicro_v111.SDA”
da dove hai fatto unzip del file.
“OpenSDA_Bootloader_Update_App_v111_2013_12_11.zip” a il tuo
dispositivo root directory “BOOTLOADER” (Così si aggiorna il Bootloader).
4
Coppia solo il file “BOOTUPDATEAPP_Pemicro_v111.SDA”
5. Rimuove il cavo usb dal MAC, e ricollega il board con MAC.
6. Dopo il aggiornamento è completo, il OpenSDA ci sarà nella modalità
bootloader e LED in colore verde lampeggerà con la frequenza ogni 0.5
secondi.
7. Apri il file SDA_INFO.HTM nella tua root directory del dispositivo di
bootloader, la versione del bootloader è aggionato a 1.11. (Tuo board ora ha
l’ultima versione).
5
Update Firmware Version:
1. Collega il board con MAC e assicura il tuo board è nella modalità
“BOOTLOADER” (rivedi la procedura precedente: Update Bootloader
Version – punto 1).
2. Trova il dispositivo tramite “Finder”, localizza il dispositivo
“BOOTLOADER”.
3. Coppia il file “MSD-DEBUG-FRDM-KL25Z_Pemicro_v118.SDA” da
dove hai fatto unzip il Firmware Apps archivio al dispositivo BOOTLOADER.
(Come illustrate nelle figure seguenti)
6
Coppia il file evidenziato nella figura sopra nella root
directory di BOOTLOADER.
4. Scollega e ricollega il cavo usb al MAC (senza tieni premuto il
pulsante Reset), ora vedi nel Finder, invece di nome “BOOTLOADER”, il
dispositivo si chiama “FRDM-KL25Z”.
5. Apri il file SDA_INFO.HTM, puoi verificare che la versione
dell’applicazione viene aggiornato a 1.14 in poi.
7
Ora puoi usare il board con MAC o Windows.
Hardware requisiti:
Freescale FRDM-KL25Z board
USB type A to Mini-B cable
Connetti FRDM-KL25Z board a MAC:
1. Connetti cavo usb tra board(OpenSDA) e usb porta di MAC.
2. Viene mostrato su MAC come la figura seguente:
Revisione Freescale FRDM-KL25Z libreria Supporto Pacchetto
Blocco:
1. Entra simulink nel promt di Matlab, apre il browser della liberia del
simulink.
2. Nella libreria, trova [Embedded Coder Support Package for Freescale
FRDM-KL25Z Board] – [FRDM-KL25Z]
8
3. Doppio clic il RED LED blocco, si può vedere la descrizione del
blocco.
Crea un modello per Freescale FRDM-KL25Z Board:
1. Nel Matlab, clic [Home] – [New] – [Simulink Model].
2. Trascina il CONSTANT blocco da Simulink Sorgente libreria al tuo
modello. Imposta il valore del blocco constante a 255.
3. Trascina il RGB LED blocco da FRDM-KL25Z libreria al modello.
4. Connetti il CONSTANT blocco al R input del RED LED blocco.
5. Coppia il CONSTANT blocco al tuo modello e imposta il valore a 0.
Poi, connetti il CONSTANT blocco al input G del RGB LED blocco.
6. Coppia uno più CONSTANT blocco al tuo modello e imposta il valore
a 0. Poi, connetti il CONSTANT blocco al B input del RGB LED blocco.
Create a Model for Freescale FRDM-KL25Z Board:
1. Connetti the Freescale FRDM-KL25Z Board al MAC con un USB cavo.
2. Nel tuo modello, clic Configuration Parameters.
3. Quando Configuration Parameters pagina esce, localizza al Hardware
Implementation pannello.
o Imposta il Hardware board parametro a Freescale FRDM-KL25Z.
o Nel Target Hardware Resources pannello, imposta il Bulid action
a “Build, load, and run” a automaticamente scarica la generata
libreria binari file al board connesso.
4. Localizza al Solver pannello e imposta il Solver a “discrete” (no
continuous states).
5. Clic OK.
6. Nel tuo Simulink modello, clic il Build Model pulsante nella barra
strumenti. Clica il pulsante “Deploy to Hardware”.
9
7. Osserva che il RGB LED ora è impostato al colore rosso.
8. Salva il tuo modello.
10
Modello del Processo e Sviluppo
Se vuole visualizzare il segnale che letto dalla telecamera, si deve eseguire il file di Matlab:
“showSerialData.m”. Richiede di digitare la porta di leggere. Ci sono 2 metodi di vedere la
porta nel Mac:
1: Lancia terminale di Mac, scrivi il comando:
esempio:
$ls /dev/cu.usbmodem*
/dev/cu.usbmodem1411
così ti esce la righa devi mettere sulla finestra.
2. Esegui script matlab: getFRDM_KL25ZCOMPort.m. Si ottiene la porta deve inserire.
Nella parte Matlab Function1, fa acquisire un segnale da foglio bianco e fa equalizzazione.
function [camDataOut, equalizzazioneOut] = fcn(camDataIn, button,
equalizzazioneIn)
max=uint16(0);
equalizzazioneTemp=uint16(zeros([1 128]));
if (button==true)
for i=1:128 %ricerca del massimo
if camDataIn(i)>max;
max=camDataIn(i);
end
end
for i=1:128
equalizzazioneTemp(i)=max-camDataIn(i);
end
11
if equalizzazioneIn(1)==0
equalizzazioneOut=equalizzazioneTemp;
else
equalizzazioneOut=(equalizzazioneTemp+equalizzazioneIn)/2;
end
camDataOut=camDataIn+equalizzazioneOut;
else
camDataOut=camDataIn+equalizzazioneIn;
equalizzazioneOut=equalizzazioneIn;
end
end
Filtraggio è composto da un algoritmo IIR:
result = zeros;
a = 0.4;
b = 0.6;
for n = (2:128)
result(n) = a*camData(n) + b*result(n-1);
end
output = result;
end
Tutto segnale filtrato viene copiato al valore output.
La parte find line(Mindx): Cerca le curve delle doppie righe nere. Se il car esce dalla pista,
c’è controllo per giustificarlo nella centra di pista attraverso i codici:
if(min1>limite)
minIdxTemp=1;
elseif (min2>limite)
minIdxTemp=128;
else
minIdxTemp = (minIdx1 + minIdx2)/2;
end
Dove “limite” è il valore che ha impostato per controllare il threshold. Ha diviso il segnale
di input a 2 parti, cioè di 2 righe nere. Per ogni parte cerca il valore minimo, poi fa la
media.
Dentro controller. C’è un meccanismo di moderare la velocità, se vicino la margine, riurre
la velocità.
sterzata_parziale=lineare+(lineare*(casted_vel*peso_velocita));
differenza=sterzata_parziale-(precedente);
sterzata=(sterzata_parziale+(lineare*(differenza*peso_precedente)));
12