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