Home
Leggi il documento.
Contents
1. Re z E root tesio809 Pendulum File Pendulum Qt C FINALpendolo F controllo c RT root tesio809 Bl root tesio8o9 d Linux Kernel v Figura 7 1 Configurazione Kernel Per ottenere un kernel il pi piccolo possibile abilitiamo solo lo stretto indispensabile mettendo il segno di spunta alle seguenti opzioni e General setup o Local version append to kernel release inseriamo come valore rtai Automatically append version information to the version string per abilitare l aggiunta della scritta rtai IL PENDOLO INVERSO 30 giugno 2009 o Initial RAM filesystem and RAM disk initramfs initrd support per abilitare l immagine RAM di boot e Enable loadable module support o Module unloading o Forced module unloading o Assicuriamoci che l opzione Module versioning support non sia abilitata in quanto fare conflitto con RTAI e Processor type and features o PC compatible o Processor family selezionare il processore corrispondente al nostro sistema e Device drivers o Block device Loopback device support per abilitare il mount di un file regolare come block device utilizzato dall initrd In base al chipset utilizzato controlliamo le opzioni nei blocchi seguenti in caso di dubbio abilitiamo tutte le opzioni generiche di supporto o ATA ATAPI MFM RLL support o SCSI device support o SATA support e File systems o Second extended fs s
2. ESEGU MOV getFeedbackCoppia pos vel break case MOVIMENTO if statoMovimento MENTO gTime 30 giugno 2009 ang ome statoMovimento move gNewPos rt get time getFeedbackCoppia pos ome amp coppia else statoMovimento ESEGU MOV MENTO gFunzione CONTROLLO break Concludi scrittura gt enable gEnable scrittura gt coppia filtraCoppia coppia return ret EXPORT_SYMBOL controllo vel ang IL PENDOLO INVERSO 30 giugno 2009 8 2 2 Inizializzazione e finalizzazione La funzione di inizializzazione init control del controllo recupera i valori della matrice di gain del controllore richiama l inizializzazione dei filtri digitali e crea le FIFO di comunicazione La funzione di finalizzazione end control chiude le FIFO di comunicazione e ferma il controllo La funzione initFilters si occupa di inizializzare i filtri Utilizziamo dei filtri passa basso di secondo grado con frequenza di taglio a 20Hz per l encoder del pendolo 80Hz per l encoder della slitta e 8Hz per la coppia erogata I coefficienti dei filtri sono stati calcolati con l ausilio di Matlab i calcoli vengono presentati nelle appendici int init control double ang double ome double pos double vel int ret OK Filtri initFilters GAIN ang ang GAIN ome ome GAIN pos pos GAIN vel vel
3. aggiornamento dello stato updateStatus 9 2 4 Slot Le librerie Qt inroducono la funzionalit di comunicazione denominata Slot and Signals Le funzioni le azioni e i pulsanti dell interfaccia grafica possono inviare dei segnali Altre funzioni chiamate slot restano in ascolto in attesa di segnali Quando un segnale viene inviato lo slot corrispondente verr attivato e il codice contenuto sar eseguito E possibile collegare un segnale a pi slot e pi segnali allo stesso slot Lo slot start abiliter il controllore inviando il comando di abilitazione ed attivando il timer per l acquisizione Slot fa partire il sistema di void MainWindow start if openComm Errore return 116 IL PENDOLO INVERSO 30 giugno 2009 comando enable Comando comando ABILITA write fifoOut amp comando sizeof comando timerTicks 0 timerId startTimer TIMER_INTERVAL startAction setEnabled false stopAction setEnabled true Lo slot stop disabiliter il controllore inviando il comando di diasbilitazione e fermando il timer dell acquisizione Slot ferma il sistema f void MainWindow stop killTimer timerId closeComm comando disable Comando comando DISABILITA write fifoOut amp comando sizeof comando startAction setEnabled true stopAction
4. if statoCont 0 statusLabel gt setText Movimento in corso else if statoCont 10 statusLabel gt setText Movimento in corso else if statoCont 20 statusLabel gt setText Movimento in corso statoCont if statoCont 30 statoCont 0 IL PENDOLO INVERSO 30 giugno 2009 break 9 2 6 Grafici dell encoder I file encoder cpp e encoder h contengono il codice di EncoderP lot classe usata per creare 1 grafici della posizione e della velocita degli encoder Vengono create due istanze della classe una per encoder del pendolo e una per l encoder del motore Il costruttore di EncoderPlot inizializza i valori di posizione velocit e tempo dei grafici e richiama le funzioni di creazione del grafico e delle curve EncoderPlot EncoderPlot Init Global Variable timerInterval 10 dataCount 0 setUpPlot setUpCurves Time for int i 0 i lt MaxDataSize i time i i timerInterval La funzione setUpPlot crea e configura l area del grafico la funzione setUpCurves crea le curve di posizione e velocit IL PENDOLO INVERSO Configura il plot void EncoderPlot setUpPlot Size setMinimumSize 400 400 Dummy Title setTitle Title Legend plotLegend new QwtLegend insertLegend plotLegend QwtPlot TopLegend Background Background b
5. statusLabel gt setIndent 3 statusBar gt addWidget statusLabel 109 110 IL PENDOLO INVERSO 30 giugno 2009 Crea il pannello con i grafici me void MainWindow createPlotPanel plotCarrello new EncoderPlot plotCarrello gt setTitle Carrello plotPendolo new EncoderPlot plotPendolo gt setTitle Pendolo QHBoxLayout plotBox new OHBoxLayout plotBox gt addWidget plotPendolo plotBox gt addWidget plotCarrello plotPanel new QWidget plotPanel setLayout plotBox Crea il pannello con i comandi di controllo ui void MainWindow createControlPanel QGridLayout layout new QGridLayout QLabel controlLabel new QLabel font size 8 gt Controllo lt font gt controlLabel gt setAlignment Qt AlignHCenter layout gt addWidget controlLabel 0 0 1 2 IL PENDOLO INVERSO 30 giugno 2009 controlGo new QPushButton Avvia connect controlGo SIGNAL clicked this SLOT control layout gt addWidget controlGo 1 0 controlStop new QPushButton Ferma connect controlStop SIGNAL clicked this SLOT stopControl layout gt addWidget controlStop 1 1 controlPanel new QWidget controlPanel gt setMaximumSize 400 100 controlPanel gt setMinimumSize 400 100 controlPanel gt setLayout layout Crea il pannello con i coman
6. Figura 2 2 Equilibri Nel nostro caso il punto di equilibrio scelto sar la posizione da cui vogliamo che il pendolo non si sposti cio la posizione verticale verso l alto per 0 0 Sappiamo gi che si tratta di un punto di equilibrio instabile in quanto possiamo subito verificare che applicando un minimo disturbo il sistema tender ad allontanarsi da tale stato Per quanto riguarda la posizione della slitta il punto di equilibrio che utilizzeremo corrisponder al punto medio della corsa della slitta cos da evitare di raggiungere il fine corsa che comprometterebbe la stabilit IL PENDOLO INVERSO 30 giugno 2009 Figura 2 3 Stati di equilibrio possibili 2 3 Modello del Sistema Procediamo dunque a linearizzare il sistema attorno al punto di equilibrio che vogliamo controllare Per linearizzare applichiamo le seguenti trasformazioni che valgono per piccole oscillazioni del pendolo cos 1 sin0 0 9 0 Otteniamo quindi il seguente sistema b si 6 s K K x e R Cerchiamo di rappresentare il sistema nella forma canonica dei controlli automatici Consideriamo come ingresso la coppia motrice e come stati la posizione del carrello la sua velocit l angolo del pendolo e la velocit angolare di rotazione otterremo il vettore di stato z Partendo dallo stato z o x x e dall ingresso u C Z Az Bu y Cz Du eh IL PENDOLO INVERSO 30 giugno 2009 Per il nostro progetto ci interes
7. IL PENDOLO INVERSO 30 giugno 2009 Bode Diagram Magnitude dB 10 10 10 10 10 Frequency rad sec Figura B 1 Diagramma del modulo Bode Diagram Phase deg do 10 10 10 Frequency rad sec Figura B 2 Diagramma della fase Notiamo che superata frequenza di taglio il filtro comincia ad attenuare il modulo delle frequenze Scelta la frequenza di taglio calcoliamo la costante di tempo 7 come 3 TO c I segnali fisici come il voltaggio o la corrente variano con continuit nel tempo assumono perci un valore per ogni istante di tempo reale t questi segnali sono chiamati analogici I controllori elettronici invece lavorano su segnali discretizzati per 131 Oo N IL PENDOLO INVERSO 30 giugno 2009 cui il segnale assume un valore solo in certi istanti di tempo separati da un periodo T Questi segnali sono chiamati digitali Per poter filtrare i segnali di posizione letti dall encoder o la coppia data al sistema con l ausilio del motore i quali vengono letti o scritti una volta per periodo nel nostro caso ogni 10 millisecondi avremo bisogno di trasformare 1 nostri filtri analogici in filtri digitali attraverso una conversione Questo procedimento viene chiamato campionamento mentre l inverso chiamato tenuta Trasformiamo perci la nostra funzione di trasferimento continua nella variabile s in una funzione di trasferimento discreta nella variabile z Per fare ci abbiamo diversi
8. lt valore gt In base ai comandi utilizzati le flag assumeranno un determinato significato La flag obj m indica che il Makefile un kbuild Makefile utilizzato per la creazione del kernel linux La flag indica al compilatore gli oggetti da creare il valore m indica che gli oggetti saranno dei moduli kernel a differenza del valore y che indica che gli oggetti saranno incorporati nel kernel La flag EXTRA_CFLAGS ci permette di aggiungere dei parametri al compilatore stesso in questo caso la dicitura I indica i path aggiuntivi da cui verranno caricati gli headers mentre mhard float indica un opzione per l utilizzo dei valori float necessario per il nostro modulo I comandi sono inseriti con la seguente forma lt sezione gt lt comandi gt Le sezioni possono essere richiamate singolarmente se viene passato il nome della sezione come parametro al comando make La sezione all esegue a sua volta il comando make modules nel Makefile della creazione del kernel per il sistema corrente passando come cartella dei moduli la cartella corrente La sezione clean cancella i file creati cos da permettere una nuova compilazione obj m pendolo o acquisizione o controllo o EXTRA CFLAGS I usr realtime include I usr include I usr local include mhard float IL PENDOLO INVERSO 30 giugno 2009 all make C lib modules shell uname r build M PWD modules clean make C lib modules
9. yes leaden aye acne 134 UU eee Leila 136 IL PENDOLO INVERSO 30 giugno 2009 Ringraziamenti Desidero innanzitutto ringraziare il Professor Paolo Righettini per i preziosi insegnamenti che mi hanno permesso di scrivere questo documento e per le ore dedicate alla mia tesi Inoltre ringrazio l Ingegnere Alberto Oldani per il suo supporto durante l intero tirocinio ed il Professor Roberto Strada per la disponibilit nel derimere i dubbi durante il completamento di questo lavoro Ringrazio Nicola Pasta per il lavoro svolto assieme durante questi mesi nello svolgimento del tirocinio Desidero poi ringraziare con affetto tutte le persone che mi hanno sostenuto e mi sono stati vicini in questi anni la mia famiglia la mia ragazza Federica e tutti i miei amici in particolare Dario Simon Priscilla e i membri dei Turks Nn 6 IL PENDOLO INVERSO 30 giugno 2009 Prefazione Il documento che avete tra le mani descrive l esperienza di tirocinio che ho svolto durante l anno accademico 2008 2009 legata al corso di Sistemi Meccatronici nel laboratorio di meccatronica del centro di ricerca Point dell Universit di Bergamo situato a Dalmine Il progetto consiste nello sviluppo di un algoritmo di controllo di un pendolo inverso e nella sua implementazione in un sistema real time in ambiente Linux utilizzando software open source come RTAI e Comedi L obiettivo di questo progetto mantenere in equilibrio il pendolo in
10. 8 Implementazione Il controllore verra implementato attraverso un task real time il quale all inizio di ogni periodo si occuper di leggere i dati del sistema elaborarli e fornire il comando in coppia al motore in base alla funzione desiderata Per ottenere le funzionalit hard real time RTAI richiede che il programma venga caricato come modulo kernel cos da poter usufruire di uno spazio di memoria controllabile Abbiamo creato perci tre moduli kernel caricabili attraverso programmazione in C La divisione in diversi moduli stata effettuata per ottenere una virtualizzazione del software che perci composto da tre strati Ci ci permetter di rendere l applicazione pi portabile in quanto sar necessario modificare solamente un modulo per trasferire l applicazione su di un sistema diverso I moduli utilizzati sono e pendolo modulo principale contiene le funzioni di gestione dei task real time controllo modulo che implementa il controllore e acquisizione modulo che si occupa dell acquisizione dei dati Di seguito analizziamo pi approfonditamente i moduli pendolo acquisizione _ eL_ IL PENDOLO INVERSO 30 giugno 2009 8 1 Modulo pendolo Il modulo pendolo il modulo principale contenente le funzioni per la creazione esecuzione e distruzione del task real time Questo modulo si occupa anche di richiamare le funzioni dei moduli sottostant
11. La procedura per la creazione di software real time prevede dei passi molto pi semplici rispetto alla programmazione diretta in C di moduli kernel come fatto da noi Per creare un programma solamente necessario avviare Scilab e Scicos con la patch di RTAI fornita con la distribuzione di RTAI lab creare graficamente il programma desiderato utilizzando i blocchi di Scicos ed utilizzare il comando generate real time code per ottenere il codice gi pronto Infine avviando il programma successivamente IL PENDOLO INVERSO 30 giugno 2009 compilato possiamo connetterlo ad Xrtailab per visualizzare i dati ricevuti in modo grafico Sfortunatamente per una questione di sviluppi differenti dei progetti Scilab Scicos ed RTAI il supporto ad RTAI lab venuto a mancare per le ultime versioni di tali programmi che sono ora incompatibili tra di loro Da notare la creazione di Scicoslab un programma dei creatori di Scicos che tenta di mantanere una versione stabile del binomio Scilab Scicos ma che non supportato da RTAI fino alla versione 3 7 Per questo motivo abbiamo invece utilizzato codice creato da noi sia per quanto riguarda la creazione dei moduli kernel che l interfaccia utente grafica Ultimamente nato anche un altro progetto denominato Hart che cerca di coniugare il sistema RTAI con Scicoslab e Comedi integrando il tutto Questo progetto per ancora in fase di partenza IL PENDOLO INVERSO 30 giugn
12. make install make dev echo export PATH SPATH usr realtime bin gt gt bashrc RTAI configuration first step Comedi Support Won t Work Configuration ed SSRC DIR mkdir rtai build cd rtai build make f SRTAI DIR makefile xconfig Build make make install Comedi cd SPROG SRC DIR comedi autogen sh IL PENDOLO INVERSO 30 giugno 2009 configure with linuxdir S LINUX DIR with rtaidir usr realtime make make install depmod a cp include linux comedi h include linux comedilib h usr include cp include linux comedi h include linux comedilib h usr local include ln s usr include comedi h usr include linux comedi h ln sS usr include comedilib h usr include linux comedilib h ln s usr local lib libcomedi a usr lib libcomedi a Configure Libraries echo include usr local lib gt gt etc ld so conf ldconfig RTAI configuration second step Add Comedi Support and RtaiLab and MATH Make sure Comedi Dir is usr and NOT usr local Configuration od SSRC DIR cd rtai build make f SRTAI DIR makefile xconfig Build make make install 66 IL PENDOLO INVERSO 30 giugno 2009 7 9 Inizializzazione del sistema Di seguito abbiamo lo script setup sh il quale si occupera di ripristinare 1 devices nodes che potrebbero scompa
13. ret rtf create FIFO IN 8000 if ret gt OK ret rtf create handler FIFO IN handleCommands if ret gt OK ret rtf create FIFO OUT sizeof Lettura 200 TT 78 IL PENDOLO INVERSO 30 giugno 2009 return ret EXPORT SYMBOL init control int end control Scrittura scrittura int ret OK ret rtf destroy FIFO IN if ret OK ret rtf destroy FIFO OUT scrittura gt coppia 0 gEnable 0 scrittura gt enable 0 return ret EXPORT SYMBOL end control Inizializzazione dei filtri yf void initFilters filtro a 80 Hz y 0 0 1855 y 2 0 8615 y 1 0 5117 u 2 1 023 u 1 0 5117 u 0 filter80Hz coefY 0 0 0 filter80Hz coefY 1 0 8615 filter80Hz coefY 2 0 1855 IL PENDOLO INVERSO filtro a 20 Hz ilter80Hz coefU 0 ilter80Hz coefU 1 ilter80Hz coefU 2 30 giugno 2009 0 5117 1 023 0 5117 y 0 0 0521 y 2 0 4565 y 1 0 1489 u 2 0 2978 u 1 0 1489 u 0 filter20Hz coefU filter20Hz coefU filter20Hz coefU filter20Hz coefY filter20Hz coefY filter20Hz coefY 0 1 2 0 i 2 filtro a 8 Hz 0 0 0 4565 0 0521 0 1489 0 2978 0 1489 y 0 0 358 y 2 1 197 y 1 0 04034 u 2 0 08068 u 1 0 04034 u 0 c ilter8Hz coefY c ilter8Hz coef
14. setUpGui IL PENDOLO INVERSO 30 giugno 2009 La funzione createActions inizializza le azioni che utilizzeremo legandole a delle shortcut e assegnando ad ognuna uno slot All innesco trigger di un azione verra mandato un segnale allo slot corrispondente attivandolo Inizializza le Azioni my void MainWindow createActions Start startAction new QAction S amp tart this startAction gt setShortcut Qt CTRL Qt Key T connect startAction SIGNAL triggered this SLOT start Stop stopAction new QAction Sto amp p this stopAction gt setShortcut Qt CTRL Qt Key P stopAction gt setEnabled false connect stopAction SIGNAL triggered this SLOT stop La funzione setUpGui crea i pannelli dell interfaccia e li dispone nella finestra principale Oltre ad una barra degli strumenti superiore e ad una barra di stato vengono creati i pannelli dei grafici del controllo del movimento e dell azzeramento Inizializza la MainWindow con tutti i vari componenti i void MainWindow setUpGui 107 IL PENDOLO INVERSO 30 giugno 2009 Creazione Pannelli createToolBar createStatusBar createPlotPanel createControlPanel createMovePanel createZeroPanel Creazione Main Widget QWidget mainWidget new QWidget this gt setCentralWidget mainWi
15. agendo direttamente sul codice sorgente di Linux Il metodo pi comunemente usato consiste nel minimizzare il tempo di esecuzione del codice non soggetto a pre emption Questo approccio ha per delle limitazioni Le garanzie sulla latenza sono dettate da casi generali e non possono essere in alcun modo assolute in quanto effettuare il controllo del codice sorgente del kernel per via del suo continuo mutare sarebbe proibitivo La manutenzione del kernel resa molto pi difficile in quanto chiunque voglia aggiungere del codice al kernel Linux deve tenere conto della pre emption necessaria al funzionamento real time del sistema IL PENDOLO INVERSO 30 giugno 2009 Le modifiche al sorgente del kernel sono ampie ci aumenta la possibilit di bug ed inconsistenze nel funzionamento del kernel stesso Gli sforzi combinati di TimeSys e Linux kernel preemption project vanno verso questa direzione 5 1 2 Interrupt abstraction Questa tecnica si basa sull aggiunta di uno strato di astrazione software al di sotto del kernel Linux che gestisce le funzioni chiave del processore Il codice sorgente di Linux praticamente lasciato inalterato cos che il funzionamento del kernel e dei moduli collegati a seguito di modifiche sempre garantito Le limitazioni di questo approccio sono le seguenti I processi real time devono essere creati come moduli kernel caricabili il che porta a difficolt aggi
16. comuni I driver sono implementati con un modulo kernel per Linux principale che provvede alle funzioni comuni e con specifici moduli di basso livello per ogni scheda Comedilib una libreria user space che consente di avere un interfaccia pi accessibile ai device Comedi Nella distribuzione di Comedilib inclusa la documentazione utility di configurazione e calibrazione e programmi dimostrativi Kcomedilib un modulo kernel per Linux distribuito con Comedi che fornisce la stessa interfaccia con alcune limitazioni di Comedilib per il kernel space cosi da permetterne l utilizzo in processi real time Per il nostro progetto utilizzeremo le API di Kcomedilib e i driver forniti da Comedi per comunicare con il sistema fisico attraverso la scheda di acquisizione dati che abbiamo scelto la Sensoray s626 6 1 Configurazione Comedi permette di effettuare una configurazione della scheda e di associarla ad un device di linux In seguito verr eseguito l accesso a tale scheda attraverso questo device node Per effettuare la configurazione Comedi fornisce un comando chiamato comedi_ config E ed comedi config dev comedi0 s626 IL PENDOLO INVERSO 30 giugno 2009 Il primo parametro corrisponde al device node a cui viene associata la scheda il secondo parametro il codice della scheda cosi che Comedi possa riconoscerla La scheda s626 non necessita di altri parametri per la configurazione in quanto
17. det 0 0 0 s l C 0 0 s s00 C 0 0 s det O s O det O0 s 1 0 0 0 s C 0 s Ricaviamo il polinomio caratteristico st C s 0 s s C 0 s s JC s c 0 Risolvendo il polinomio caratteristico ricaviamo gli autovalori del sistema 5 0 s 0 SER nes Dalla teoria sulla stabilit dei sistemi sappiamo che un equilibrio asintoticamente stabile se i suoi autovalori hanno tutti parte reale in quanto in tale caso la matrice A degli stati converge asintoticamente verso zero e la soluzione del sistema converge verso il valore asintotico Dato che abbiamo un autovalore positivo siamo certi che il nostro equilibrio instabile IL PENDOLO INVERSO 30 giugno 2009 Figura 3 1 Instabilita del pendolo 3 2 Posizionamento dei poli Per stabilizzare un sistema instabile possiamo ricorrere alla tecnica del posizionamento dei poli Questa tecnica consiste nel controllare l ingresso del sistema attraverso lo stato passato tramite una matrice di guadagni G in modo da cambiare il valore dei poli del sistema i quali come abbiamo visto determinano la stabilit Il controllo si attua chiudendo ad anello il sistema in modo da retroazionare lo stato all ingresso come possibile vedere in figura 3 2 u C MR D D C GX X AX B GX X A BG X X AX Queste equazioni varrebbero se il sistema fosse lineare ma noi ci concentreremo intorno al punto di equilibrio linearizzato per ovviare a questo proble
18. int res OK Dati Filtrati del Pendolo static double u 0 0 0 0 0 0 80 IL PENDOLO INVERSO 30 giugno 2009 static double y 0 0 0 0 0 0 u 0 p_enc_in u 0 u 0 if res OK filter filter80Hz u y gStatoAng y 0 gStatoOme y 0 y 1 DELTA_T return res Aggiorna le variabili globali di stato e ne ritorna i valori corretti in offset e modulo sf int getStato double pos double vel double ang double ome lsampl t m enc lsampl t p enc double angolo int res aggiornaStatoSlitta m_enc if res OK res aggiornaStatoPendolo p enc pos gStatoPos gOffsetPos 1000 mm m vel gStatoVel 1000 mm s m s angolo gStatoAng gOffsetAng angolo angolo floor angolo 2 PI 2 PI if angolo gt PI angolo 2 PI 81 IL PENDOLO INVERSO 30 giugno 2009 ang angolo ome gStatoOme return res 8 2 4 Controllo Azzeramento ed Acquisizione Queste funzioni eseguono il calcolo della coppia da erogare per ottenere diversi risultati Le funzioni vengono eseguite una volta per periodo dal controllore cosi da creare un ciclo con vincoli temporali precisi x La funzione di controllo principale getFeedbackCoppia abilitata quando vogliamo che il pendolo inverso sia controllato in feedback Questa funzione calcola la coppia necessaria da immettere al sistema moltiplicando
19. metodi lineari di primo ordine Eulero in avanti Eulero all indietro e metodo di Tustin Utilizzeremo il metodo di Tustin il quale permette una migliore approssimazione del segnale alla funzione continua Effettuiamo perci la conversione dalla funzione continua alla funzione discreta che utilizzeremo T tempo di campionamento 2 z 1 s gt Usiamo MATLab per effettuare il calcolo velocemente function F discrete lowpass 2 cutF Tc Ritorna un filtro passa basso di secondo ordine Dati in input oe cutF frequenza di taglio Hz oe Tc tempo di campionamento s IL PENDOLO INVERSO 30 giugno 2009 sys 1 1 tau s 2 F c2d sys Tc Tustin Otteniamo una funzione di trasferimento discretizzata nella forma seguente Y z S Qr U z Bs Bs By Trasformiamo questa funzione nell equazione ricorsiva e calcoliamo antitrasformata di Laplace che utilizzeremo nelle librerie per applicare il filtro Y z Bs Bs By U x as a Byy k 2 By k 1 By k 2 qu k 1 aqu K v k eue 2 Fe kA By 2 DI U IL PENDOLO INVERSO 30 giugno 2009 Conclusioni Svolgendo questo progetto abbiamo acquisito la conoscenza di diversi ambienti di sviluppo affrontato problemi pratici riguardanti la meccanica e l elettronica ed affrontato i problemi legati all automatica Nel capitolo primo abbiamo perci analizzato i diversi componenti acquisen
20. setEnabled false t17 118 IL PENDOLO INVERSO 30 giugno 2009 Lo slot control avvia la funzione di controllo inviando il comando CONTROLLA al task Lo slot stopControl ferma il controllo Slot avvia il controllo RI void MainWindow control Comando comando CONTROLLA write fifoOut amp comando sizeof comando Slot ferma il controllo f void MainWindow stopControl Comando comando FERMA write fifoOut amp comando sizeof comando Lo slot move avvia il movimento inviando il comando MUOVI ed i parametri di posizione e tempo I parametri vengono aggiornati attraverso gli slot setMovePos controllato da uno slider e setMoveTime controllato da un box di input Slot avvia il movimento ud IL PENDOLO INVERSO 30 giugno 2009 void MainWindow move Comando comando MUOVI write fifoOut amp comando sizeof comando write fifoOut amp comando sizeof comando write fifoOut amp comando sizeof comando Slot settala posizione finale del movimento void MainWindow setMovePos int pos newMovePos pos Slot setta il tempo di percorrimento del movimento void MainWindow setMoveTime double time newMoveTime time Lo slot autoZero avvia l azzeramento automatico inviando il comando AZZERA Lo slot manualZero avvia l azzeramento manuale inviando il comando
21. shell uname r build M PWD clean Una volta compilati i moduli utilizzando il comando insmod possiamo caricare 1 tre moduli nel kernel cos da avviare il task real time 102 IL PENDOLO INVERSO 30 giugno 2009 9 Interfaccia utente Mentre il task real time verr eseguito ciclicamente nello spazio kernel l utente pu aver bisogno di ricevere informazioni sul sullo stato del controllore e sui dati rilevati dalla scheda inoltre avr bisogno di inviare comandi diretti al controllore per compiere le operazioni desiderate Per risolvere questa problematica abbiamo creato un interfaccia utente grafica la quale girer nello spazio utente utilizzando le librerie Qt e Qwt per C 9 1 Interfaccia grafica Presentiamo di seguito l interfaccia grafica utilizzata m Pendulum CE Start Stop Posizione Velocita Posizione Velocita Pendolo Carrello 4 4 3 3 2 2 1 1 afe pai 4 4 2 2 3 3 4 4 5 5 TETTE TETTE ro 300 400 500 600 700 800 900 1 000 1 100 1 200 300 400 500 600 700 800 900 1 000 1 100 1 200 Movimento 5 Controllo Ferma c Avvia Posizione 7 Azzeramento Tempo 1 0 E Muovi Auto Manuale Status Controllo in corso E L Figura 9 1 interfaccia Pendulum L interfaccia presenta i seguenti componenti A Grafico dell angolo e della velocit angolare del pendolo visualizzati i
22. 0 for i 1 i lt 3 i y 0 f coefY i y i for i 0 i lt 3 i y 0 f coefUl i u i Shift Ingressi u 2 ull ull u 0 Filtra la coppia del motore ui double filtraCoppia double coppia Dati Filtrati 0 0 0 0 0 0 0 0 0 0 0 0 static double ul static double y u 0 coppia filter filter8Hz u y return y 0 IL PENDOLO INVERSO 30 giugno 2009 8 3 Modulo acquisizione Il modulo che si occupa dell acquisizione contiene le funzioni che comunicano direttamente con la scheda di acquisizione dati Per questo motivo nel caso si volesse utilizzare una scheda differente bisognerebbe modificare solamente questo modulo I canali di acquisizione corrispondenti ai pin che utilizzeremo sono salvati in alcune variabili all inizio del file rendendone immediata la modifica Questo modulo utilizza le librerie kcomedilib per l acquisizione dei dati Canali di acquisizione comedi_t device int range 0 int aref AREF_GROUND Encoder Motore COUNTER int m_enc_subdev 5 int m_enc_chan 0 double m_maxdata Encoder Pendolo COUNTER int p_enc_subdev 5 int p_enc_chan 1 double p_maxdata Pulsante Emergenza DIGITAL INPUT int emerg_subdev 3 int emerg_chan 14 Attivazione Enable DIGITAL OUTPUT 94 IL PENDOLO INVERSO 30 giugno 2009 int
23. 0 rt_printk Azzeramento della slitta completato n return ESEGUI_AZZERAMENTO_PENDOLO break return ESEGUI AZZERAMENTO SLITTA Aggiorna l offset dell angolo del Pendolo in modo automatico ritorna FINE_AZZERAMENTO quando finisce 7 int autoAzzeraPendolo void 86 IL PENDOLO INVERSO 30 giugno 2009 static double ang_max ang_min static int cont 0 rt_printk Azzeramento del pendolo in corso n if cont gt 2 2 PI WO DELTA_T gOffsetAng ang_max ang_min 2 PI cont 0 return 2 else if cont 0 ang_max gStatoAng ang_min gStatoAng else if gStatoAng gt ang_max ang_max gStatoAng else if gStatoAng lt ang_min ang_min gStatoAng cont rt printk Azzeramento del pendolo completato n return FINE AZZERAMENTO Possiamo utilizzare la funzione azzeraManuale per azzerare gli encoder manualmente nel caso di problemi con l azzeramento automatico Azzeramento Manuale void azzeraManuale void gOffsetPos gStatoPos gOffsetAng gStatoAng PI IL PENDOLO INVERSO 30 giugno 2009 La funzione di movimento move si occupa di aggiornare una variabile di stato globale la quale sar un offset da sommare alla posizione della slitta In questo modo il controllo aggiorner ad ogni periodo la nuova posizione di oscillazione e sposter la slitta sulla corsa
24. 56 TA COD AI la 56 Ta RIAI passo pio sa Lilla 57 FONMEEE Pii UU NO IE EE ooo I S 57 To 2 Ilio RN te 58 os blister 58 Joe uum ale illa 60 Id REAI P ASS0 60010 61 E ooo com TT 62 7 9 Imizializzazione del sister cose 67 8 Implem nazioni siate 69 Sl Modulo Pend Glo aria 70 IL PENDOLO INVERSO 30 giugno 2009 8 2 Modulo Gnocca 74 2 1 F nzi n e pincip le nenti 74 8 2 2 Inizializzazione e Emalizzazione anna iaia 77 525 3 El borazione SEL io re rt oe ERE Pt e I RENE eel 79 8 2 4 Controllo Azzeramento ed AcquiISsIzione iii 82 8 2 5 Controllo dell emergenza csv lana 88 8 2 6 Funzioni di COMUMCAZIONE crei 89 8 2 7 Punzioni SUsIDatie eie ee laica 9 5 Modulo acqguistzlOlle scrl 94 Mi viui E 99 E Minelli 101 9 irae ERU alla 103 9 1 Tnt rfaccia uci S ooo 103 ITA AVViO c 104 SIT AO lana 104 9 1 3 Sm NE 104 Sie Movindalo lele 105 ITS SPEECH alal 105 92 ode 106 9 2 1 Craezione interfaccia SralcA cina 106 9 2 Comunicazione con il task real time eee 113 9 53 Handlerdelune Lea E EE 115 Sr MEE OL sda ina E 116 gura Aggiornamento dello stato ete te nita tm ua im I SM MEER 120 9 2 0 Grabcidell encode coppe 122 PRP TUM crea 128 U IL PENDOLO INVERSO 30 giugno 2009 PE TR IHU M 128 bollo 130 nsi CT
25. AZZERA_MANUALE Slot avvia l azzeramento automatico 119 IL PENDOLO INVERSO 30 giugno 2009 ui void MainWindow autoZero Comando comando AZZERA write fifoOut amp comando sizeof comando Slot avvia l azzeramento manuale si void MainWindow manualZero Comando comando AZZERA MANUALE write fifoOut amp comando sizeof comando 9 2 5 Aggiornamento dello stato La funzione updateStatus visualizza lo stato del sistema sotto forma di un messaggio nella barra dello stato Aggiorna la barra dello stato ai void MainWindow updateStatus static int statoCont 0 switch stato case FERMO statusLabel gt setText Sistema in attesa break 120 IL PENDOLO INVERSO 30 giugno 2009 case AZZERAMENTO if statoCont m 0 statusLabel gt setText Azzeramento in corso else L statoCont 10 statusLabel gt setText Azzeramento in corso else Lf statoCont 20 statusLabel gt setText Azzeramento in corso statoCont if statoCont 30 statoCont 0 break case CONTROLLO if statoCont 0 statusLabel gt setText Controllo in corso else if statoCont 10 statusLabel gt setText Controllo in corso else if statoCont 20 statusLabel gt setText Controllo in corso statoCont if statoCont 30 statoCont 0 break case MOVIMENTO
26. Comedi si occupera di configurarla correttamente in modo automatico 6 2 Device driver Utilizziamo Comedi per ottenere 1 dati della scheda e la corrispondenza tra i pin sull hardware e i canali del driver I device driver in Comedi sono divisi in sotto devices ognuno dei quali contiene pit canali Comedi fornisce un comando comedi_test che esegue dei test sulla scheda di acquisizione a patto che sia stata configurata precedentemente comedi_test t info Questo comando con l opzione t info visualizza su schermo i dati della scheda associata al device Di default questo device dev comedi0 overall info version code 0x00074c driver name s626 board name s626 number of subdevices 6 subdevice 0 type 1 analog input flags 0x00419000 number of channels 16 max data value 16383 ranges all chans 5 5 10 10 48 IL PENDOLO INVERSO command start now ext int scan begin follow timer ext convert now timer ext Scan end count stop none count command fast lchan start now 0 scan_begin follow 0 convert timer 200000 scan_end count 1 stop count 2 subdevice 1 flags 0x00030000 type 2 analog output number of channels 4 max data value 16383 ranges all chans 10 10 command not supported subdevice 2 type 5 digital flags 0x00030000 number of channel max data value ranges all chans
27. HOWTO 9 Sito ufficiale progetto Comedi www linux org 10 Sito ufficiale Scilab www scilab org 11 Sito ufficiale Scicos WWW SCiCOS Org 12 Sito ufficiale Scicoslab www scicoslab org 13 Sito ufficiale Hart toolbox hart sourceforge net 14 Sito ufficiale librerie Qt www gtsoftware com 15 Sito ufficiale librerie Qwt qwt sourceforge net 136
28. S LINUX VERSION rtai 64 IL PENDOLO INVERSO In s linux LINUX_VERSION rtai cd SSRC DIR linux linux 30 giugno 2009 patch N pl SRTAI DIR base arch x86 patches hal linux SLINUX VERSION x86 2 2 06 patch cp arch x86 Kconfig config make oldconfig make xconfig Build make clean make bzImage make modules make modules install Setup mkinitramfs o boot initrd img L J cp arch x86 boot bzImage boot vml cp System map boot System map SL ln s boot System map SL Grub Setup cd boot grub echo gt gt menu lst echo This entry added by RTAI menu lst NUX_VERS NUX_VERSION rtai linuz LINUX_VERSION rtai INUX_VERSION rtai ON rtai boot System map kernel installer gt gt echo title RTAI Ubuntu 8 10 kernel SLINUX_VERSION rtai gt gt menu lst echo uuid SUUID gt gt menu lst echo kernel boot vmlinuz LINUX_VERSION rtai root UUID SUUID ro quiet splash gt gt menu lst echo initrd boot initrd img LINUX_VERSION rtai gt gt menu lst IL PENDOLO INVERSO 30 giugno 2009 echo quiet gt gt menu lst Xorg Fix for Mouse and Keyboard cd STXT_DIR cat xconf_fix txt gt gt etc X11 xorg conf Comedilib cd SPROG_SRC_DIR comedilib autogen sh configure with udev hotplug lib sysconfdir etc make
29. di ignorare gli interrupt e regolare i vincoli temporali di esecuzione dei diversi processi L intero kernel Linux sar relegato ad un processo di RTAI con minima priorit cos da garantire che anche in presenza di interrupt i processi real time giungeranno a buon fine entro i vincoli imposti In pratica Linux sar considerato come idle task cos che la sua esecuzione sar permessa solamente quando non ci sono processi real time in attesa Questo meccanismo di emulazione software dell hardware di controllo degli interrupt garantisce che il kernel Linux non potr mai bloccare gli interrupt o rendersi invulnerabile alla pre emption interrupt interrupt Kernel hardware software task I processi real time vengono creati attraverso moduli caricabili del kernel in modo da sfruttare il kernel space RTAI fornisce una API non standard creata appositamente per il progetto Le funzioni fornite sono contenute in moduli kernel i quali devono essere caricati nel kernel all accensione del sistema per poter essere utilizzati Di seguito presentiamo i moduli da noi utilizzati e r ai sched ko Fornisce le funzioni primarie per la creazione l esecuzione ed il controllo dei processi real time Fornisce inoltre le funzioni dei timer dei semafori dei messaggi delle mailbox e delle RPC Remote Procedure Call e rtai ko Fornisce le funzioni per la gestione degli interrupt contiene il layer HAL e r ai fifos F
30. dividono in due categorie encoder assoluti ed encoder incrementali Quelli assoluti sono in grado di dirci quale la posizione attuale leggendo un valore di n bit dal disco La risoluzione di questo tipo di encoder dipende dal numero di anelli che rappresentano un bit d informazione disposti sul disco Lo svantaggio maggiore IL PENDOLO INVERSO 30 giugno 2009 che per aumentare la risoluzione si ha un maggiore ingombro e un elevato numero di LED fotodiodi necessari a leggere le tracce Sorgente comgoreni L altro tipo di encoder quello luminosa DEL ff fotosensibili Z Qo incrementale non legge un valore di posizione ma in grado di rilevare 0 li Albero un singolo step di rotazione del uota I _ dentata Disco forato disco Come si pu intuire questo Figura 1 7 Schema di un encoder incrementale encoder necessita di un solo rilevatore LED fotodiodo due se vogliamo sapere anche in che direzione sta ruotando il disco e quindi occupa meno spazio e richiede un circuito pi semplice rispetto a quello assoluto Per ricavare la posizione dobbiamo avere un angolo di riferimento zero che pu essere fornito direttamente da una traccia con un solo foro oppure pu essere stabilito dal controllore durante l avvio del sistema tramite un procedimento di azzeramento Per capire se il disco sta ruotando in senso orario o antiorario si usano due anelli sfasati l uno dall altro di un quar
31. fino alla posizione desiderata La posizione desiderata ed il tempo di percorrimento verranno inseriti dall utente Sposta la posizione di oscillazione del pendolo ritorna FINE_MOVIMENTO quando finisce if int move double new_pos double time RTIME i static RTIME init_tick 0 static int stato 0 static double h init_pos double tau q switch stato case 0 Init init tick i init_pos gStatoPos h new pos init pos stato 1 break case 1 Calcolo q tau 1 0 i init tick DELTA T time if tau lt 1 0 3 0 87 IL PENDOLO INVERSO 30 giugno 2009 q 9 0 4 0 tau tau else if tau lt 2 0 3 0 q 3 0 2 0 tau 1 0 4 0 else if tau lt 1 0 q 9 0 4 0 tau tau 9 0 2 0 tau 5 0 4 0 else stato 0 return FINE_MOVIMENTO gPosOscil h q init pos Modifico Offset break return ESEGUI_MOVIMENTO 8 2 5 Controllo dell emergenza La funzione di controllo dell emergenza si occuper semplicemente di fermare il controllo e l erogazione di coppia e di chiudere l applicazione int controlloEmergenza lsampl t emerg IL PENDOLO INVERSO 30 giugno 2009 if emerg 0 FERMA TUTTO gEnable 0 return EMERGENZA else return OK 8 2 6 Funzioni di comunicazione Le funzioni di comunicazione si occupano della comunicazione tra ta
32. lo zero questa volta associato alla posizione verticale instabile del pendolo Due variabili di stato una per il pendolo ed una per la slitta terranno in memoria il valore dell offset calcolato per lo zero dei due encoder Questi valori verranno sommati al valore letto per ottenere la posizione corretta relativa allo zero prescelto Aggiorna l offset di posizionamento della Slitta in modo automatico ritorna ESEGUI_AZZERAMENTO_PENDOLO quando finisce ura int autoAzzeraSlitta double coppia static int stato 0 cont 0 static double pos_sx pos_dx switch stato IL PENDOLO INVERSO 30 giugno 2009 case 0 Init rt_printk Azzeramento della slitta corso n cont 0 stato 1 break case 1 Sinistra coppia COPPIA AZZERAMENTO cont if cont gt 50 amp amp fabs gStatoVel MIN_VEL Fine Corsa Sx pos_sx gStatoPos stato 2 cont 0 break case 2 Destra coppia COPPIA AZZERAMENTO cont if cont gt 50 amp amp fabs gStatoVel MIN_VEL Fine Corsa Dx pos_dx gStatoPos stato 3 cont 0 break case 3 gOffsetPos pos_dx pos_sx 2 0 in lt lt IL PENDOLO INVERSO 30 giugno 2009 coppia COPPIA AZZERAMENTO if fabs gStatoPos gOffsetPos lt MIN_POS coppia 0 stato 4 cont 0 break case 4 cont coppia 0 if cont gt 100 stato
33. m1 0 2 6 Riscriviamo i coefficienti della 2 5 e della 2 6 in modo da semplificare la scrittura IL PENDOLO INVERSO 30 giugno 2009 K m J mJ J K m l m l J J K m m m 4 E R Raccogliamo la 2 6 e la 2 5 a sistema e abbiamo K K xcos K gsin K 0 cos 0 K x Cu Ke sin me R 2 2 Stato di equilibrio Dal sistema 2 7 ricavato passiamo al modello in forma matriciale i 2 8 K K co0 8 en K cos9 K 7 Cu K sing Questo sistema viene detto non lineare perch alcune delle variabili di stato presenta dei legami di tipo seno e coseno inoltre c la presenza di una variabile di secondo grado Calcoliamo prima di tutto lo stato di equilibrio cio il valore costante delle variabili di stato a cui il sistema si assester applicando un ingresso costante potremo cos pensare di costruire un controllore che mantenga questo equilibrio stabile Di conseguenza le derivate delle variabili vengono poste a zero 6 x 0 x 0 Per trovare lo stato di equilibrio del sistema non lineare calcoliamo la variazione di energia potenziale del sistema rispetto a 0 e x ed eguagliamola a zero U m l gcos m l g cos 20 IL PENDOLO INVERSO 30 giugno 2009 dU sinO m l g m 1 g 0 26 m l g mg aUo dx 0 0 oppure O 2 Vxe R Avremo perci due stati di equilibrio uno per 9 0 ed uno per 0 7 in entrambi i casi d 7 0 VE Equilibrio instabile Equilibrio stabile
34. nostri programmi di trovare le librerie ln s usr include comedi h usr include linux comedi h IL PENDOLO INVERSO 30 giugno 2009 ln sS usr include comedilib h usr include linux comedilib h ln s usr local lib libcomedi a usr lib libcomedi a Apriamo il file etc ld so conf ed aggiungiamo la linea include usr local lib Eseguiamo successivamente il comando ldconfig Questo accorgimento permetter alle nuove librerie di essere riconosciute Comedi ora installato e configurato correttamente nel nostro sistema 7 7 RTAI passo secondo Configuriamo nuovamente RTAI come abbiamo fatto precedentemente questa volta abilitiamo per il supporto di Comedi Comedi support over LXRT Assicuriamoci che la cartella di Comedi indicata sia usr e non usr local 43 Applications Places System BAA e mer lug 1 17 10 root EE Sar File Option Help IINE Option Option General ER Real Time COMEDI support in user space RTAI Documentation COMEDI installation directory usr Machine x86 Din kernel C support Base system Real Time Driver Model over RTAI scheduling options Supported services _ Other features Maicon Drivers 4 RTAI Lab Real Time COMEDI support in user space RTAI_COMEDI_LXRT RTAI offers a unified kcomedilib interface to kernel user space real time applications A kernel module will be built and a library will be provided
35. pendolo La realizzazione del controllo del pendolo come abbiamo detto non stata solo teorica ma implementata su un sistema resoci disponibile dall universit Il sistema consiste in un banco pendolo collegato ad un computer che implementa il controllo attraverso una scheda di acquisizione dati In figura possiamo vedere il pendolo da vicino e i vari componenti che costituiscono il banco di particolare rilevanza sono il motore con l azionamento gli encoder di cui uno integrato direttamente nel motore e la base che ci permette di collegare il computer all apparecchiatura elettromeccanica Figura 1 4 banco del pendolo P Carrello del pendolo N Encoder M Motore Brushless U Azionamento I Interruttore generale T Gruppo di trasformazione A Base di Acquisizione dati B Line receiver F Fine Corsa E Pulsante d emergenza 9L IL PENDOLO INVERSO 30 giugno 2009 Il pendolo che ci viene fornito costituito da vari blocchi che possiamo vedere segnati nella figura precedente Notiamo subito il pendolo fisico costituito da un asta incernierata ad un carrello da una parte e portante una massa nota dall altra Il carrello scorre per mezzo di carrelli a ricircolo di sfere su un binario a basso coefficiente d attrito Esso collegato ad un motore di tipo brushless che viene comandato in coppia dal nostro controllore contenente al suo interno un resolver Montato su
36. programmi utilizziamo delle strutture dati comuni tra i diversi moduli Per evitare incongruenze a causa di modifiche successive queste strutture condivise sono raccolte in un file a parte chiamato strutture h 99 100 IL PENDOLO INVERSO 30 giugno 2009 Le strutture che utilizziamo sono e Lettura rappresentante gli ingressi e Scrittura rappresentante le uscite e Comando tipo enumerativo che elenca i comandi che possiamo inserire e Stato tipo enumerativo che elenca gli stati in cui il controllore pu trovarsi ifndef RTAI COMEDI H typedef unsigned int lsampl t fendif typedef struct Lettura lsampl_t m_enc lsampl_t p_enc lsampl_t emerg Lettura typedef struct Scrittura lsampl_t enable double coppia Scrittura typedef enum AZZERA CONTROLLA MUOVI DISABILITA ABILITA FERMA AZZERA MANUALE ESCI 9 Comando typedef enum AZZERAMENTO CONTROLLO MOVIMENTO FERMO Stato const int EMERGENZA 2 IL PENDOLO INVERSO 30 giugno 2009 const int ERRORE 1 const int OK 0 8 5 Makefile Per compilare i moduli creati utilizziamo il comando make il quale permette di compilare pi sorgenti in modo efficiente attraverso dei comandi contenuti all interno di un Makefile La struttura del Makefile prevede della flag e dei comandi Le flag vengono inserite all inizio del file e hanno la forma lt flag gt
37. tutta la durata del movimento Valori troppo bassi di tempo legati a valori elevati di spostamento possono portare all instabilit del sistema 9 1 5 Spegnimento Il sistema pu essere fermato utilizzando il pulsante Stop sulla barra dell avvio In questo modo qualsiasi erogazione di coppia verr fermata ed il sistema smetter di leggere i dati degli encoder Alternativamente il pulsante rosso di emergenza situato vicino al banco del pendolo ci permetter di bloccare l intero sistema nel caso di rischi alla sicurezza di persone e oggetti IL PENDOLO INVERSO 30 giugno 2009 9 2 Codice x L interfaccia stata creata con codice nel linguaggio C utilizzando la suite di sviluppo QtCreator come editor e sfruttando le librerie grafiche Qt e Qwt Di seguito analizziamo il codice generato 9 2 1 Craezione interfaccia grafica Il codice presenta una funzione principale main il cui scopo semplicemente quello di avviare l applicazione grafica e mostrare la finestra principale include lt QtGui QApplication gt include mainwindow h int main int argc char argv QApplication a argc argv MainWindow w w show return a exec x La classe MainWindow contenuta nel file mainwindow cpp Il costruttore di MainWindow si occupa di creare le azioni e preparare l interfaccia grafica GUI MainWindow MainWindow QWidget parent QMainWindow parent createActions
38. 0 5 command not supported subdevice 3 type 5 digital S 1 0 48 1 0 30 giugno 2009 IL PENDOLO INVERSO 30 giugno 2009 flags 0x00030000 number of channels 16 max data value 1 ranges all chans 0 5 command not supported subdevice 4 type 5 digital 1 0 flags 0x00030000 number of channels 16 max data value 1 ranges all chans 0 5 command not supported subdevice 5 type 6 counter flags 0x10030000 number of channels 6 max data value 16777215 ranges all chans 0 1 command not supported Dai dati visualizzati ricaviamo il seguente rapporto tra pin sulla scheda e canali del driver RO 49 L 50 IL PENDOLO INVERSO 30 giugno 2009 I O Digitale 15 1 J2 e 47 33 J3 6 3 Collegamento Il nostro progetto prevede diversi ingressi e uscite utilizzeremo le seguenti configurazioni Subt 0 Output Analogico per la coppia immessa nel sistema Sub 14 Input Digitale per il pulsante di emergenza Output Digitale per l abilitazione del driver CO EL 6 4 Comedi RTAI All avvio del sistema real time sar necessario caricare i moduli del kernel di Comedi I moduli necessari sono i seguenti e comedi ko il modulo di default contenente le funzioni base di comedi e comedi_fc ko un modulo utilizzato dai driver e kcomedilib ko il modulo contenente le librerie in kernel space e s626 ko il modulo specifico per la sched
39. IL PENDOLO INVERSO 30 giugno 2009 Indice L ICI VATE Ta 151010 REA RAR er pat RR ener A ARIE 3 PE 6 l I pendoloinmerno crolli 8 Ll Banco del pendolo sala 9 LX Motore BrashlesS oii kersesesssaseiissnua sisenes rosnie ae ena ea aK R Tei ER NEA 10 i oco 12 1 4 Scheda di acquisizione ys a Glare ii 14 PME Boii Mec 17 2 1 Dinamica del pendolo inverso lariana 17 2 2 Sio 19 25 Modello del Sistema insects ceases sca ester tsa meurt aaner n a i aE 21 2 4 Simulazione MATLab SimMalnk c cia 23 i slo ree ae ee ee ear E ee eer eee 27 3 1 Studio della stabilit dell equilibrio ninna ati 27 3 2 Posizionamento dei pollaio 29 3 3 Calcolo della matrice dei guadagni iii 31 34 Simulazione in MATLab Simulink ia 33 di saMOVNolo ascesa 35 il Louis Ec 35 4 2 Calcolo del profilo di moto 37 4 3 Simulazione MATLab Simulink Lea 39 MEL iE M Gi 42 IL PENDOLO INVERSO 30 giugno 2009 5 1 1 Precmpiioitimprovenmietit eni 42 5 1 2 Interrupt ASO olii 43 53 P rch dl c 43 52 Remi 44 5 2 1 Hard real time e Soft real time uode ed ree tbe aan es lada 45 0 POL 46 Ol Connie 46 6 2 Deyice driver csreiisiiinsp isinsi onina ni n E AAEE ae Ea e aeiaai iis 47 M MEE C I ruo ct 50 64 Conero 50 T D ub tT 51 TA Vanilla Cum SI T2 Configurazione del Kernel lariana 52 7 3 Compilazione del Kernel uude iie atat audaci quanta quo gorda etta ata dira 55 ted iis
40. The kernel modules is called rtai_comedi o and must be loaded if you want to use the libkcomedilxrt a library root tesio8o Pendulum Fi Pendulum Qt s FINALpendolo 2 controllo c E root tesiogo rootGtesi080 M Pendulum T aconf CH Figura 7 2 Configurazione RTAI 61 62 IL PENDOLO INVERSO 30 giugno 2009 Salviamo la nuova configurazione e compiliamo nuovamente RTAL Se tutto andato a buon fine il sistema ora pronto per compilare ed eseguire i nostri programmi in real time 7 8 Megabatch Per rendere i nostri programmi pi portabili e pi facilmente utilizzabili abbiamo creato un file batch contenente comandi per la shell di Linux Questo file si occuper di eseguire in automatico la preparazione del nostro sistema L utente avr il solo compito di configurare il kernel in base alle specifiche della propria macchina Assieme al file megabatch l utente trover una cartella denominata packages contenente i sorgenti necessari In caso l utente volesse utilizzare versioni differenti dei programmi dovr modificare i file nella cartella packages e le versioni corrispondenti nel file megabatch Il file megabatch strutturato nel seguente modo e all inizio delle costanti contenenti le directory e le versioni dei programmi da compilare e installare e successivamente i comandi per installare tutti i prerequisiti software scaricandoli dai repository e
41. Y E ed Ju lter8Hz coefY ilter8Hz coefU ilter8Hz coefU ilter8Hz coefU 8 2 3 Elaborazione dati NO FPF o N P o 0 0 1 197 0 358 0 04034 0 08068 0 04034 I dati acquisiti vengono elaborati dalla funzione getStato la quale richiama le funzioni di aggiornamento del pendolo e della slitta Queste funzioni aggiorneranno le variabili di stato del sistema trasformando i dati con funzioni di filtro e conversione Le variabili di stato verranno utilizzate successivamente per l esecuzione del controllo sono perci delle variabili globali disponibili a tutte le funzioni del modulo Queste variabili rimangono perci in memoria ad ogni esecuzione e non vengono rimosse al termine di ogni periodo Solamente a queste funzioni permesso l aggiornamento delle variabili di stato IL PENDOLO INVERSO 30 giugno 2009 Aggiorna le variabili globali associate alla slitta xf int aggiornaStatoSlitta lsampl t m enc in int res OK Dati Filtrati della Slitta static double u 0 0 0 0 0 0 static double y 0 0 0 0 0 0 u 0 m_enc_in u 0 r2mm u 0 angolare gt lineare if res OK filter filter20Hz u y gStatoPos y 0 gStatoVel y 0 y 1 DELTA T return res Aggiorna le variabili globali associate al pendolo Li i int aggiornaStatoPendolo lsampl t p enc in
42. a di acquisizione Sensoray 626 Ovviamente l ultimo modulo cambier in base alla scheda di acquisizione utilizzata RTAI pu essere configurato per garantire il supporto a Comedi In tal caso tra i moduli di RTAI che sar necessario caricare all avvio del sistema avremo anche rtai_comedi ko Questo modulo garantisce le funzioni dei moduli di Comedi per l utilizzo con il kernel RTAI IL PENDOLO INVERSO 30 giugno 2009 7 Kernel Setup Per ottenere un sistema operativo hard real time abbiamo bisogno di effettuare diverse operazioni di setup queste operazioni sono solitamente molto delicate in quanto vanno a modificare la base stessa del sistema e di conseguenza necessitano di una cura e di una rifinitura particolare Per il nostro setup abbiamo utilizzato un PC con processore Pentium 4 e la distribuzione Ubuntu Linux versione 8 10 Nel seguente capitolo utilizzeremo le versioni dei programmi in nostro possesso Per utilizzare gli stessi comandi con altre versioni sar necessario sostituire le nostre versioni con quelle pi adatte 7 1 Vanilla Kernel Per prima cosa scarichiamo RTAI dal sito ufficiale www rtai org Noi abbiamo usato RTAI 3 7 Scompattiamo ora il file con il comando tar lt file gt C lt destinazione gt Una volta scompattato il file in una cartella a nostra scelta noi useremo e consigliamo usr src apriamo il seguente percorso cambiare x86 in caso si usi una diversa architettura
43. anandosi di gran lunga dallo zero gt SE PPP ABB BAR Figura 2 5 Grafici della simulazione del pendolo IL PENDOLO INVERSO 30 giugno 2009 3 Controllo Nel capitolo 1 abbiamo modellizzato il sistema slitta pendolo inverso scrivendo le relazioni che legano gli ingressi immessi e gli stati raggiunti dal sistema attraverso le matrici A e B X AX Bu 0 a 0 a 0 dat Pay tC a 0 4 0 aX T A FDC x a 0 a 0 a x Fa xr WC a 0 a 0 aX t aX t b C Ora che abbiamo tutte le informazioni necessarie per comprendere il sistema in ogni istante di tempo possiamo progettare un controllore che ci permetter di mantenere il pendolo inverso in posizione verticale 3 1 Studio della stabilit dell equilibrio Il nostro sistema linearizzato perci non ha senso parlare di stabilit del sistema dovremo perci analizzare la stabilit dell equilibrio Possiamo gi verificare che il nostro punto di equilibrio instabile in quanto possiamo controllare fisicamente che con una piccola spinta il pendolo si allontaner dalla posizione di equilibrio Verifichiamo comunque la stabilit dell equilibrio attraverso il calcolo degli autovalori del sistema i quali ci forniranno le informazioni necessarie a stabilire se l equilibrio stabile o instabile Analizziamo perci il polinomio caratteristico della matrice 57 A N N IL PENDOLO INVERSO 30 giugno 2009 s 10 0 CG s 0 0 det s A
44. aranno presi come zero dei due encoder Bisogna inoltre assicurarsi di tenere il pendolo in posizione di riposo fermo verso il basso prima di avviare l azzeramento manuale 9 1 3 Controllo Utilizziamo il pulsante Controlla nel pannello del controllo per avviare il controllore il motore comincer a fornire una coppia e la slitta si muover per mantenere l equilibrio IL PENDOLO INVERSO 30 giugno 2009 del pendolo Il controllo verr attivato solo entro un certo angolo rispetto allo zero del pendolo in questo modo si evita che il controllore immetta una coppia elevata per mantenere un equilibrio ormai pregiudicato rischiando di compromettere la sicrezza delle persone e di surriscaldare il motore Prima di avviare il controllo necessario eseguire l azzeramento Premendo il tasto Ferma il controllo verr spento 9 1 4 Movimento Con il pannello del movimento possiamo spostare il punto di equilibrio della slitta in un qualsiasi punto della corsa limitato per per evitare di spostare il punto di equilibrio troppo vicino ai fine corsa Utilizzando lo slider di posizione selezioniamo il punto di arrivo assoluto della slitta tra 350 e 350 millimetri la lunghezza totale della corsa 800 mentre utilizzando il box del tempo selezioniamo il tempo di percorrimento tra 1 e 10 secondi Premendo ora il pulsante Muovi la slitta comincer a spostarsi verso il punto indicato e il controllore rimarr attivato durante
45. azione ci assestiamo sul nuovo punto di equilibrio A seguito di diverse simulazioni con il sistema fisico abbiamo notato che il nostro controllore riesce a mantenere stabile il sistema anche per uno spostamento di 10 centimetri in 1 secondo 42 IL PENDOLO INVERSO 30 giugno 2009 5 RTAI RTAI RealTime Application Interface un progetto open source nato al Politecnico di Milano che permette la creazione e l esecuzione di applicazioni con ristretti vincoli temporali in ambiente Linux creando di fatto un sistema operativo real time Il sistema operativo Linux non permette l esecuzione di task con vincoli temporali in quanto il normale funzionamento del sistema operativo prevede routines di interrupt scelte di scheduling e pre emption che seguono regole diverse dai sistemi real time e perci non possiamo essere sicuri che un processo venga eseguito entro la sua deadline cio il termine temporale massimo entro il quale l esecuzione di un processo deve terminare con successo Questo limite mandatorio per le deadline hard mentre preferibile per le deadline soft 5 1 Alternative per un sistema Linux real time Esistono due diversi approcci per l implementazione di un sistema real time in ambiente Linux 5 1 1 Preemption improvement Questa tecnica tende a migliorare la pre emption del sistema operativo Linux In pratica ci viene realizzato modificando l algoritmo di pre emption del kernel
46. cd usr src rtai 3 7 base arch x86 patches Qui troveremo una lista di patch RTAI per Kernel linux cerchiamo la versione pi recente del kernel la quale andremo poi a scaricare Nel nostro caso scegliamo la patch hal linux 2 6 28 7 x86 2 2 06 patch il che significa che useremo il kernel 2 6 28 7 Scarichiamo ora il kernel dal sito http www kernel org pub linux kernel v2 6 e scompattiamo Nn IL PENDOLO INVERSO 30 giugno 2009 anche questo nella cartella usr src Useremo una versione del kernel detta vanilla ci sta a significare che il kernel nella sua versione base senza modifiche in quanto tutte le diverse distribuzioni di Linux applicano loro modifiche al kernel Questo accorgimento ci permetter di avere un kernel pi stabile e compatto e ci assicurer che la patch di RTAI non entrer in conflitto con modifiche precedenti Siamo ora pronti per la creazione del kernel 7 2 Configurazione del Kernel Per prima cosa accertiamoci di avere i seguenti programmi installati automake autoconf libtool bison doxygen patch libgt3 mt dev g In caso contrario scarichiamoli dai repository con il comando apt get install lt nome_programma gt Apriamo la cartella dei sorgenti del kernel usr src linux 2 6 28 7 e applichiamo la patch patch N pl lt usr src rtai3 7 base arch x86 patches hal linux 2 6 28 7 x86 2 2 06 patch La patch sar cos applicata ai sorgenti del kernel Linux pe
47. cita i valori di coppia e di abilitazione L esecuzione della funzione desiderata controllata da delle variabili di stato Ad ogni esecuzione verr richiamata la funzione necessaria la quale ritorner un valore di stato che determiner il passo successivo E da notare il fatto che l esecuzione del task real time corrisponde di per s ad un ciclo continuo per questo motivo non verranno inseriti cicli for o while all interno del controllo int controllo Lettura lettura Scrittura scrittura int ret double coppia 0 0 static int statoAzzeramento ESEGUI_AZZERAMENTO_SLITTA static int statoMovimento ESEGUI_MOVIMENTO IL PENDOLO INVERSO 30 giugno 2009 double pos vel ang ome Inizializza ret controlloEmergenza lettura emerg if ret EMERGENZA return EMERGENZA ret externStato lettura if ret lt 0 return ERRORE getStato amp pos amp vel amp ang ome lettura m enc lettura p enc Controlla switch gFunzione case FERMO break case AZZERAMENTO LE statoAzzeramento ESEGUI _AZZERAMENTO_SLITTA statoAzzeramento autoAzzeraSlitta amp coppia else if statoAzzeramento m ESEGUI AZZERAMENTO PENDOLO statoAzzeramento autoAzzeraPendolo else statoAzzeramento ESEGUI_AZZERAMENTO_SLITTA gFunzione FERMO break case CONTROLLO CA 76 IL PENDOLO INVERSO amp coppia
48. d costituito da un asta teoricamente senza peso le cui estremit sono una incernierata e l altra fissata ad una massa L asta libera di ruotare nell estremit opposta alla massa dando cosi al pendolo un grado di libert Un sistema di questo tipo sotto l azione della gravit presenta due punti di equilibrio statico uno di questi stabile mentre l altro un punto di equilibrio instabile Noi ci occuperemo di un pendolo che si trovi nell intorno della M z 1 1 Pendolo semplice seconda condizione ovvero che abbia la massa al di sopra d del centro di rotazione Posizioniamo il fulcro del pendolo su di un carrello mobile controllato da un motore in grado di spostarsi lungo un solo asse Abbiamo implementato cosi quello che viene definito un pendolo inverso questo sistema a differenza del pendolo semplice presenta due gradi di libert Il problema dell equilibrio del pendolo inverso rappresenta uno dei problemi classici del controllo automatico 1 1 Segway Pure essendo un problema abbastanza astratto la sua risoluzione porta a svariate applicazioni pratiche ed industriali Ne sono esempio il Segway in cui viene integrata IL PENDOLO INVERSO 30 giugno 2009 la conoscenza di questo tipo di controllo per avere un mezzo di trasporto auto bilanciato oppure il meccanismo di controllo delle grandi gru nelle zone portuali di carico scarico dei container 1 1 Banco del
49. dget Disposizione Componenti QGridLayout guiBox new QGridLayout QSpacerItem spacer new QSpacerItem 300 100 0SizePolicy Minimum QSizePolicy Minim um guiBox gt addWidget plotPanel 0 0 1 3 guiBox gt addWidget movePanel 1 0 2 1 guiBox gt addItem spacer 1 1 2 1 guiBox gt addWidget controlPanel 1 2 guiBox addWidget zeroPanel 2 2 guiBox addWidget statusBar 3 0 1 3 guiBox gt setSpacing 10 guiBox gt columnStretch 2 mainWidget gt setLayout guiBox Le funzioni di creazione dei pannelli inserisce i pulsanti le etichette e gli altri widget necessari all interno dei pannelli designati Inoltre i segnali di attivazione dei pulsanti 108 IL PENDOLO INVERSO 30 giugno 2009 vengono collegati agli slot corrispondenti e le azioni di start e stop vengono abilitate nella barra degli strumenti Crea la barra degli strumenti ui void MainWindow createToolBar toolBar addToolBar Toolbar toolBar gt addAction startAction toolBar addAction stopAction Crea la barra dello stato void MainWindow createStatusBar statusBar new QStatusBar QLabel statusTitle new QLabel Status statusBar gt addWidget statusTitle statusLabel new QLabel statusLabel gt setAlignment Qt AlignHCenter statusLabel gt setMinimumSize statusLabel gt sizeHint
50. di di movimento ul void MainWindow createMovePanel QGridLayout layout new QGridLayout QLabel moveLabel new QLabel lt font size 8 gt Movimento lt font gt moveLabel gt setAlignment Qt AlignHCenter layout gt addWidget moveLabel 0 0 1 2 QLabel positionLabel new QLabel Posizione layout addWidget positionLabel 1 0 movePosition new QSlider Qt Horizontal movePosition setRange 350 350 111 IL PENDOLO INVERSO 30 giugno 2009 movePosition gt setTickInterval 50 movePosition setTickPosition QSlider TicksAbove layout gt addWidget movePosition 1 1 QLabel timeLabel new QLabel Tempo layout addWidget timeLabel 2 0 moveTime new QDoubleSpinBox moveTime setRange 1 0 10 0 moveTime setDecimals 1 moveTime setSingleStep 0 5 layout gt addWidget moveTime 2 1 moveDo new QPushButton Muovi connect movePosition SIGNAL valueChanged int this SLOT setMovePos int connect moveTime SIGNAL valueChanged double this SLOT setMoveTime int connect moveDo SIGNAL clicked this SLOT move layout gt addWidget moveDo 3 0 1 2 movePanel new QWidget movePanel setMaximumSize 400 200 movePanel setMinimumSize 400 200 movePanel gt setLayout layout Crea il pannello con i comandi di azzeramento ur void MainWindow crea
51. di seguito i comandi per estrarre i file sorgenti nelle cartelle designate e infine i comandi per eseguire l installazione del sistema Durante l esecuzione di megabatch si aprir la finestra di configurazione del kernel Una volta scelte le opzioni corrispondenti l utente dovr chiudere la finestra salvando il file config usr bin bash Notes We ll put software in usr local src linux and RTAI sources in usr src IL PENDOLO INVERSO 30 giugno 2009 Constants SRC_DIR usr src PROG_SRC_DIR usr local src RTAI_VERSION 3 7 RTAI_DIR SRC_DIR rtai SRTAI_VERSION LINUX_VERSION 2 6 28 7 LINUX DIR SSRC DIR linux S LINUX VERSION INSTALL DIR pwd UUID cat cmdline awk print substr 0 AUR length 0 27 Software Requirements General apt get y install automake autoconf libtool bison doxygen Compiling apt get y install patch libqt3 mt dev g Comedilib apt get y install swig flex Extracting Sources cd SINSTALL_DIR packages tar xzf linux SLINUX_VERSION C SRC_DIR tar x bzip2 f rtai SRTAI VERSION C SSRC DIR tar xzf comedilib tar gz C SPROG SRC DIR tar xzf comedi tar gz C SPROG SRC DIR RTAI kernel compilation Configuration cd SSRCDIR mv linux SLINUX VERSION linux
52. do una conoscenza pi approfondita dell elettronica utilizzata e dei motivi che ci hanno spinto ad usarla Nel capitolo secondo abbiamo affrontato la dinamica del sistema calcolandone le equazioni dello stato e gli equilibri verificando infine attraverso simulazioni il comportamento del nostro pendolo inverso Il capitolo terzo ci ha permesso di affrontare le problematiche legate all automazione studiando la stabilit dell equilibrio selezionando un controllore adeguato e creandolo per poi simularne il comportamento Nel capitolo quarto abbiamo affrontato la tematica del movimento analizzando matematicamente le equazioni del moto e simulando la funzione finale Con il capitolo quinto abbiamo presentato il progetto RTAI studiandone la struttura e le funzionalit ed applicandole al nostro sistema L utilizzo di Comedi nel capitolo sesto ci ha permesso di affrontare il problema dell acquisizione dei dati con un software dedicato sfruttandone la compatibilit con RTAL Nel capitolo settimo abbiamo presentato i passaggi effettuati per la creazione del sistema affrontando le problematiche risultanti dall utilizzo del sistema operativo Linux e sfruttando le sue potenzialit Con il capitolo ottavo abbiamo implementato il controllore con dei moduli kernel che gestiscono il task real time utilizzato sfruttando la conoscenza del linguaggio C IL PENDOLO INVERSO 30 giugno 2009 Infine nel capitolo nono abb
53. e degli avvolgimenti gestita come abbiamo detto dall unit di comando Possiamo vedere il motore da noi utilizziamo in figura 1 6 Il motore presenta due canali di comunicazione Figura 1 6 Dettaglio Motore uno per il comando in coppia alimentazione e l altro per la lettura del resolver integrato Questi segnali vengono letti da un unit di comando SLVDIND che elabora le informazioni e controlla in retroazione che il motore si comporti in modo corretto 1 3 Encoder Gli encoder sono dei trasduttori di posizione angolare cio sono dispositivi in grado di convertire un movimento di rotazione in un segnale elettrico In figura 1 7 si pu vedere un semplice schema di encoder che in generale costituito dalle seguenti parti e Un disco ruotante sul proprio asse che presenta dei fori distribuiti in modo circolare sulla parte esterna e Uno o pi LED accoppiati a un corrispondente numero di fotodiodi che permettono di leggere la presenza di un foro La sequenza di fori come abbiamo detto va a formare degli anelli concentrici al disco stesso Ad ogni anello associata una coppia LED fotodiodo per poter leggere il segnale proveniente da esso Il segnale in uscita dai fotodiodi di tipo digitale e pu rappresentare diversi schemi di codifica binari il codice Gray il pi utilizzato in quanto diminuisce i problemi di lettura poich ogni valore differisce dal successivo di un solo bit Gli encoder si
54. e i seguenti canali e 48 canali digitali di input ed output e 16 canali analogici di input e 4canali analogici di output e 6 canali encoder I canali sono distribuiti su cinque jumper e Jl 48 pin e J2 48 pin e J3 48 pin e J4 26 pin e 5 26 pin IL PENDOLO INVERSO 30 giugno 2009 Canali Pin Input Output Digitale 1 48 dispari 1 48 dispari Input Analogico 4 36 pari tranne il 20 Output Analogico 42 48 pari Encoder 1 26 1 26 1 pin quadrati corrispondono al numero 1 Suddivisi in gruppi di 6 pin corrispondenti ad A A B B I I oltre a vari pin di GROUND e 5V TE 160 ane oe A D amp D A L mmimmmmmmmmim L ui a 60 70 g a mW 3 u22 H C25 u24 uM uo go m v v 1 A a m n x paske wassal ee RN2 1 w 28 smo km MOCO TELI le no iil STITT siu e DI RN3 E 2 ee ATTI ol ree Tu BE MADE IN USA o do um gg e TI ww Figura 1 9 Layout della scheda 15 IL PENDOLO INVERSO 30 giugno 2009 Figura 1 10 Scheda DAQ Sensoray s626 due Le IL PENDOLO INVERSO 30 giugno 2009 2 Il modello m 1 gt m 1 0 4 C a LN x Mu Oy Figura 2 1 Schema del pendolo inverso In figura possiamo vedere lo schema del pendolo inverso da noi utilizzato co
55. enable subdev 3 int enable chan 15 Coppia ANALOG OUTPUT int coppia subdev 1 int coppia chan 0 La funzione di inizializzazione si occupa di aprire il device node creato precedentemente al setup del sistema e di inizializzare i canali di comunicazione necessari configurando i canali digitali per l input o per l output ed utilizzando un istruzione di configurazione per inizializzare gli encoder Salviamo inoltre il valore massimo che l encoder ci pu fornire cosi da poter implementare una conversione in complemento a 2 int init acquisizione int ret Inizializzazione del device per la scheda device comedi open dev comedi0 Inizializzazione dei canali di comunicazione ret x comedi dio config device emerg subdev emerg chan COMEDI OUTPUT comedi dio write device emerg subdev emerg chan 0 if ret gt OK ret comedi dio config device emerg subdev emerg chan COMEDI INPUT 1f ret gt OK ret comedi_dio_config device enable subdev enable chan COMEDI OUTPUT 96 IL PENDOLO INVERSO 30 giugno 2009 Configurazione degli encoder instr insn INSN_CONFIG instr n 1 instr data amp initvalue instr subdev p_enc_subdev instr chanspec CR_PACK p_enc_chan range aref comedi_do_insn device amp instr instr insn INSN_CONFIG instr n 1 instr data amp initvalue instr subdev
56. etColor const QColor amp color QColor c color c setAlpha 150 setPen c 127 128 IL PENDOLO INVERSO 30 giugno 2009 Appendici A RTAI Lab Il processo per la creazione di programmi real time utilizzando Linux RTAI difficile e tedioso in quanto il programmatore costretto a creare dei moduli kernel che prevedono l utilizzo di librerie e funzioni particolari e comunque diverse da quelle user space Inoltre la creazione dell interfaccia grafica un altra attivit dispendiosa in quanto a tempo Per ovviare a queste problematiche stato creato RTAI Lab una catena di strumenti open source per aiutare il programmatore nella creazione e gestione di software real time L utilizzo di RTAI Lab ci permetter di creare facilmente applicazioni real time e verificarne lo stato attraverso un interfaccia grafica pre impostata RTAI lab si compone di e Linux RTAI il sistema operativo real time per eseguire i task creati cos come fatto da noi durante la durata del progetto e Comedi il progetto per l utilizzo di driver di acquisizione dati per potersi interfacciare con il sistema fisico e Scilab un pacchetto open source di software scientifico per la computazione numerica in diretta concorrenza con Matlab e Scicos un programma grafico open source di modellazione di sistemi e simulazione molto simile a Simulink e Xrtailab un oscilloscopio interattivo creato con le librerie Mesa ed Efltk
57. ettura IL PENDOLO INVERSO 30 giugno 2009 if ret lt OK rt printk ERRORE Lettura fallita Terminazione del task n cleanup module return ERRORE Controllo ret controllo lettura amp scrittura if ret ERRORE rt_printk ERRORE Controllo fallito Terminazione del task n cleanup module return ERRORE else if ret EMERGENZA rt printk ERRORE Emergenza attivata Ueoueoueoueoueoueo Terminazione del task n cleanup module return EMERGENZA Il Scrittura ret scrittura dati scrittura if ret OK rt printk ERRORE Scrittura fallita Terminazione del task n cleanup module return ERRORE rt task wait period Attendi la fine del periodo N Go 74 IL PENDOLO INVERSO 30 giugno 2009 8 2 Modulo controllo Il modulo di controllo si occupa di elaborare i dati ricevuti e restituire il valore di coppia da immettere nel sistema inoltre contiene diverse funzioni di utilit Questo modulo contiene anche le funzioni di comunicazione tra sistema real time e sistema Linux cos da permettere un controllo utente dell applicazione 8 2 1 Funzione principale La funzione principale del modulo di controllo viene richiamata dal task ad ogni periodo Questa funzione si occupa di eseguire l elaborazione dei dati ricevuti e di richiamare la funzione desiderata tra azzeramento controlo e movimento La funzione fornisce in us
58. g new Background bg gt attach this Axis enableAxis QwtPlot yRight setAxisScale QwtPlot xBottom 0 MaxDataSize setAxisScale QwtPlot yLeft 5 5 1 Grid plotGrid new QwtPlotGrid p plotGrid enableX false plotGrid gt attach this 30 giugno 2009 1000 lotGrid gt setMajPen QPen Qt gray 0 Qt DotLine 124 IL PENDOLO INVERSO 30 giugno 2009 Configura le curve void EncoderPlot setUpCurves Position Curve posCurve new EncoderCurve Posizione posCurve gt setColor Qt blue posCurve gt attach this Speed Curve speCurve new EncoderCurve Velocita SpeCurve setColor Qt red SpeCurve setZ posCurve z 1 SpeCurve attach this La funzione addValue trasla i valori nel tempo ed aggiunge il nuovo valore alla curve inserito come parametro Infine la funzione aggiorna l asse dei tempi e ridisegna il grafico void EncoderPlot addValue double value if dataCount MaxDataSize Shift Valori for int i 0 i lt MaxDataSize i position i position i 1 speed i speed i 1 time i timerInterval IL PENDOLO INVERSO 30 giugno 2009 if dataCount lt MaxDataSize dataCount Nuovi Valori position dataCount 1 value double prevPos 0 0 if dataCount gt 1 prevPos position dataCount 2 speed dataCount 1 1000 0 value
59. i cos da permetterne la comunicazione Come modulo kernel caricabile questo modulo contiene due funzioni principali le funzioni di inizializzazione e di chiusura del modulo le quali verranno richiamate rispettivamente al caricamento e alla rimozione del modulo La funzione init_module si occupa di richiamare le funzioni di inizializzazione dei moduli di controllo e di acquisizione creare il task real time ed inizializzare il timer periodico La costante TICK_PERIOD imposta a 10 millisecondi il valore del periodo del nostro task real time TASK_PRIORITY imposta a 1 il vaore pi alto di priorit int init module void Funzione chiamata quando il modulo inserito int ret OK RTIME tick_period Inizializzazione della scheda di acquisizione ret init_acquisizione if ret lt OK rt printk ERRORE inizializzione della scheda di acquisizione fallita n return ERRORE else rt printk Scheda di acquisizione inizializzata n IL PENDOLO INVERSO 30 giugno 2009 Inizializzazione del controllore con vettore dei guadagni GAIN ret init_control 1 1805 5 9737 1 1007 2 5818 if ret lt OK rt printk ERRORE inizializzione del controllo fallita n return ERRORE else rt printk Controllo inizializzato n Inizializzazione del task realtime rt set periodic mode rt task i
60. i per i file system e per i device dei dischi fissi 7 4 Comedilib Effettuiamo l installazione di Comedilib le librerie utente del progetto Comedi Per prima cosa scarichiamo i file sorgente di Comedilib dal sito www comedi org ed estraiamoli in una cartella a nostra scelta Per il nostro progetto utilizzeremo usr local src cartella in cui metteremo tutti i sorgenti dei programmi utilizzati La versione di Comedilib da noi utilizzata la 0 8 1 Prima di eseguire l installazione assicuriamoci di avere i seguenti programmi installati swig flex In caso contrario utilizziamo il comando apt get install per procurarceli IL PENDOLO INVERSO 30 giugno 2009 Successivamente seguendo le istruzioni fornite con la distribuzione di Comedilib utilizzeremo 1 comandi autogen e configure presenti nella cartella contenente i sorgenti Infine usiamo il comando make per compilare i sorgenti ed installare le librerie cd SPROG_SRC_DIR comedilib autogen sh configure with udev hotplug lib sysconfdir etc make make install Usiamo ora il commando make dev per creare I device nodes nella cartella dev da associare alle schede di acquisizione Questi device nodes sono virtualizzazioni dei device hardware e ci permettono di accedere ad essi attraverso codice da Linux Comedilib ora installato correttamente nel nostro sistema 7 5 RTAI passo primo Configuriamo e installiamo ora RTAI cosi da creare 1 moduli neces
61. iamo creato un interfaccia utente per comunicare con il controllore real time sfruttando le librerie grafiche Qt e Qwt cos da generare un interfaccia grafica intuitiva Concludendo abbiamo visto che utilizzando un sistema Linux real time con RTAI possiamo creare programmi hard real time efficienti con un costo molto basso rispetto ad una soluzione con software proprietario come LabView della National Instruments inoltre abbiamo un controllo pi approfondito e possiamo modificare praticamente ogni aspetto del progetto Un altro vantaggio dato da questo approccio la possibilit di utilizzare un solo computer come host contenente i programmi utente e target contenente i task real time Il problema sta nella difficolt della programmazione nella necessit di conoscere molto bene il sistema utilizzato e nella pi ardua manutenibilit del codice Queste problematiche possono per essere superate con un adeguata preparazione del programmatore U CA IL PENDOLO INVERSO 30 giugno 2009 Bibliografia 1 P Bolzern Fondamenti di controlli automatici Mc Graw Hill 2004 2 Manuale di Istruzioni s626 3 J Blanchette C GUI programming with Qt 4 1st Edition 4 Linux Kernel archive www linux org 5 Sito ufficiale del progetto RTAI www rtai org 6 Tutorial RTAILab www rtai org RTAILAB RTAI Lab tutorial pdf 7 Linux Kernel archive www linux org 8 Loadable Module Kernel HOWTO tldp org HOWTO module
62. il valore delle variabili di stato per la matrice di gain ed aggiorna la coppia Ritorna la coppia per il feedback gli Algoritmi di controllo vengono implementati qui u int getFeedbackCoppia double ang double ome double pos double vel double coppia pos gPosOscil 1000 0 if fabs ang CONTROL LIMIT coppia 1 0 GAIN ang ang GAIN ome ome GAIN pos pos GAIN vel vel return 0 IL PENDOLO INVERSO 30 giugno 2009 Le funzioni di azzeramento si occupano di determinare lo zero degli encoder incrementali Inizialmente viene richiamata la funzione autoAzzeraSlitta la quale fornir una coppia di azzeramento per spostare la slitta prima al fine corsa sinistro poi al destro salvandone le posizioni assolute Facendo una media tra i due valori si trova perci il punto centrale della corsa il quale verr preso come zero della slitta La slitta verr portata in tale posizione Al termine di questi passi la funzione autoAzzeraSlitta ritorner il valore ESEGUI_AZZERAMENTO_SLITTA la variabile di stato associata all azzeramento verr aggiornata ed il task passer alla funzione di azzeramento del pendolo La funzione autoAzzeraPendolo lascia oscillare per un piccolo lasso di tempo il pendolo tenendo traccia dell angolo minimo e dell angolo massimo raggiunti Una media tra i due valori sommata a mezzo giro fornir nuovamente
63. l carrello c un encoder di tipo incrementale che misura la posizione angolare del pendolo mentre vicino agli estremi della guida abbiamo due sensori di fine corsa Il motore e i fine corsa sono collegati all azionamento che controlla il movimento del motore L azionamento e gli encoder sono collegati a delle basi di collegamento con la scheda di acquisizione dati Sulle basi convogliano tutti i segnali a bassa potenza del banco sia in ingresso che in uscita L alimentazione fornita dalla rete elettrica che colleghiamo tramite un interruttore generale e dall elettronica di protezione a un gruppo di trasformazione il quale ci da in uscita una corrente continua necessaria per la corretta alimentazione dei componenti Abbiamo infine un pulsante di emergenza da attivare in caso di pericolo per fermare l erogazione di coppia al motore 1 2 Motore Brushless Il motore Brushless un motore elettrico che possiamo descrivere come un evoluzione del motore in corrente continua L idea alla base del brushless come dice il suo stesso nome quella di eliminare le spazzole Queste sono necessarie al motore CC per commutare la corrente all interno dei suoi avvolgimenti che si trovano sul rotore tramite quello che viene chiamato collettore a lamelle Per eliminare le spazzole invertiamo i ruoli di statore e rotore rispetto a quelli assunti nel motore CC La componentistica del motore si semplifica ed esso risu
64. lta costituito da IL PENDOLO INVERSO 30 giugno 2009 e Tre o pi coppie di avvolgimenti posti sullo statore queste come vediamo nell esempio sono sfasate fra di loro di 120 e Un magnete permanente che costituisce il rotore Gli avvolgimenti non necessitano di un collegamento con collettore a lamelle perch in P questo caso quando il motore in azione trovandosi sullo statore non entrano in Figura 1 5 Fasi di un motore brushless rotazione Grossi vantaggi di questo sistema sono la riduzione degli attriti e l assenza delle scintille dovuto alla brusca inversione della corrente nei punti di contatto delle lamelle Altro vantaggio la migliore dissipazione del calore generato sullo statore Lo svantaggio principale di questi motori rispetto a quelli in corrente continua che necessitano di un elettronica di controllo pi sofisticata e quindi pi costosa Infatti per creare un campo magnetico rotante si deve commutare la corrente all interno degli avvolgimenti in modo elettronico In figura 1 5 possiamo vedere uno schema delle varie fasi del movimento del rotore Nella prima la bobina A1 e A2 sono alimentate in modo da generare un campo magnetico interno che guidi il rotore nella posizione indicata Le fasi successive rappresentano la commutazione delle bobine in una sequenza che poi si ripete da capo 11 IL PENDOLO INVERSO 30 giugno 2009 quando raggiungiamo l ultima fase L alimentazion
65. m_enc_subdev instr chanspec CR_PACK m_enc_chan range aref comedi_do_insn device amp instr Valore massimo degli encoder p_maxdata comedi get maxdata device p enc subdev p enc chan m maxdata comedi get maxdata device m enc subdev m enc chan return ret return ret EXPORT SYMBOL init acquisizione La funzione di lettura dei dati utilizza la funzione comedi dio read delle librerie kcomedlib per ottenere il dato dell ingresso ditigale di emergenza Utilizziamo delle IL PENDOLO INVERSO 30 giugno 2009 istruzioni di read per ottenere i dati degli encoder inoltre facciamo una conversione da step dell encoder in radianti int lettura_dati Lettura lettura int ret lsampl_t val double rad Encoder Motore instr insn INSN_READ instr n 1 instr data amp val instr subdev m_enc_subdev instr chanspec CR_PACK m_enc_chan range aref ret comedi_do_insn device amp instr if val lt m_maxdata 2 rad val if val gt m_maxdata 2 rad val m_maxdata rad 1 0 rad 256 2 PI lettura gt m_enc rad Encoder Pendolo instr insn INSN READ instr n 1 instr data amp val instr subdev p_enc_subdev instr chanspec CR PACK p enc chan range aref if ret OK ret comedi do insn device amp instr if val lt p maxdata 2 rad val if val gt p maxdata 2 rad val
66. ma 29 O2 IL PENDOLO INVERSO 30 giugno 2009 Trasformiamo il sistema nella sua forma canonica di raggiungibilit dove d a k 0 0 0 1 0 0 0 0 A wi 0 0 0 1 d d d d Dalla teoria delle matrici sappiamo che il polinomio caratteristico sar nella forma seguente A c d JA dA d 0 Mentre il polinomio caratteristico desiderato sar A t p JA pAt p 20 Da cui otteniamo p a k peri 0 n 1 Possiamo perci determinare i nuovi poli sommando un valore scelto ai poli di partenza Il nostro sistema avr come ingresso una coppia motrice perci sar quella la variabile che utilizzeremo per controllare Il nostro controllore si occuper di leggere lo stato del sistema e attraverso una matrice G dei guadagni fornir una coppia motrice dipendente dallo stato corrente Per posizionare i poli dobbiamo sceglierli in modo che siano tutti e quattro stabili Inoltre li posizioneremo a coppie di poli complessi coniugati due pi vicino all asse immaginario i quali ci forniranno i valori di velocit di risposta del sistema e due pi lontani che saranno praticamente ininfluenti Scegliamo come frequenza il valore del polo negativo moltiplicato per 1 2 e come smorzamento il valore 0 7 avremo perci il seguente grafico IL PENDOLO INVERSO 30 giugno 2009 Figura 3 3 Grafico dei poli 3 3 Calcolo della matrice dei guadagni Con l ausilio di MATLab calcoliamo la n
67. ma perci il comportamento hard real time del kernel garantito 60 IL PENDOLO INVERSO 30 giugno 2009 7 6 Comedi Effettuiamo l installazione di Comedi scaricando i sorgenti dal sito www comedi org e scompattandoli nella cartella prescelta useremo di nuovo usr local src Per il nostro progetto abbiamo utilizzato la versione 0 7 76 Cos come per l installazione di Comedilib eseguiamo nuovamente i seguenti passaggi dopo essere entrati nella cartella dei sorgenti di Comedi autogen sh configure with linuxdir S LINUX DIR with rtaidir usr realtime make make install Per permettere al comando modprobe di funzionare quando dovremo caricare I moduli di Comedi e Comedilib eseguiamo il comando depmod a L installazione di Comedilib fornir degli headers che verranno utilizzati per richiamare le librerie corrispondenti specificatamente il file comedilib h Questo file contiene per le chiamate alle librerie user space e se provassimo a utilizzare le funzioni dichiarate al suo interno con un programma in user space avremo un errore Comedi fornisce invece le librerie kcomedilib da utilizzare in kernel space dovremo perci sostituire gli headers precedenti con questi cp include linux comedi h include linux comedilib h usr include cp include linux comedi h include linux comedilib h usr local include Creiamo infine alcuni link per permettere ai
68. mento e T tempo impiegato t T T x H q sl T q Tm 4 3 Simulazione MATLab Simulink Anche in questo caso abbiamo costruito un modello in Simulink per poter simulare il comportamento del pendolo durante il movimento Notiamo l aggiunta rispetto al caso precedente della funzione di posizionamento che fornisce un offset alla posizione di controllo n pp angolo a posizione Feneulum Uscita Clock m posiziona MATLAB Function Figura 4 2 Modello Simulink Il modello fa uso della seguente funzione di MATLab creata appositamente per il movimento 40 IL PENDOLO INVERSO 30 giugno 2009 function x x_p x_pp pendulum position H T t o Ritorna un vettore con i valori per lo spostamento del pendolo Normalizzo il tempo tau t T o Verifico in quale terzo mi trovo if tau lt 1 3 q 9 4 tau 2 q p 9 2 tau q pp 9 2 else AF tau 2 3 q 3 2 tau 174 q p 3 2 q pP 0 else if tau 1 q 9 4 tau 2 9 2 tau 5 4 q_p 9 2 tau 9 2 q pp 9 2 else q 1 qp q_pp 0 end end x H q xp H T qp IL PENDOLO INVERSO 30 giugno 2009 x pp H T 2 q pp Di seguito possiamo vedere i risultati della simulazione di un movimento di 10cm Figura 4 3 Grafici del movimento Notiamo che l equilibrio del pendolo mantenuto durante tutto il movimento e che al termine della simul
69. n rappresentate le forze e le coppie agenti sulle componenti del sistema Notiamo in particolare la presenza delle forze gravitazionali delle forze di inerzia della coppia motrice e delle coppie d inerzia Da questo modello semplificato possiamo ricavare le equazioni che ne descrivono completamente la dinamica in modo da poter successivamente studiare 1l sistema 2 1 Dinamica del pendolo inverso Le prime due equazioni le ricaviamo isolando il sottosistema del carrello pendolo scrivendo il bilancio delle forze lungo l asse x e la sommatoria dei momenti nel punto di rotazione del pendolo 17 IL PENDOLO INVERSO 30 giugno 2009 F 0 2 1 mX m x m 1 6cos0 m 1 0 sin m x m L 6 cos 6 m 1 0 sin 0 gt 0 2 2 m l6 m amp l cos0 J 6 m gl sind m L m Xl cos6 J 6 m gl sin 0 Il sistema viene controllato dalla coppia del motore che non compare nelle equazioni precedenti scriviamo quindi un bilancio di potenza tra motore e carrello in modo da ottenerla Cy Oy Iy 5 Oy 0 Fx 0 2 3 Compare nella 2 3 la velocit angolare del motore che legata alla velocit del carrello x dal raggio della puleggia R X Oy Il bilancio di potenza ci fornisce quindi C duda F du gt aly 2 4 R R Combiniamo la 1 1 la 2 2 e la 2 4 ricavate in precedenza e otteniamo 0 cos m l m 1 in m m dati amp sinG m l mJ Cu 2 5 6 m 12 I m1 J cos m l m gsin m
70. n gradi e gradi al secondo 103 IL PENDOLO INVERSO 30 giugno 2009 B Grafico della posizione e della velocita della slitta visualizzati in millimetri e millimetri al secondo Pannello di azionamento del movimento Pannello di azionamento del controllo Pannello di azionamento dell azzeramento Barra dello stato Q mgA Barra dell avvio Questi oggetti ci permetteranno di utilizzare le diverse funzioni messe a disposizione dal nostro controllore real time 9 1 1 Avvio Per avviare l applicazione premere Start sulla barra dell avvio oppure digitare la combinazione CTRL T I grafici cominceranno cos a mostrare i valori letti dagli encoder e la barra di stato visualizzer il messaggio di pronto 9 1 2 Azzeramento Per avviare l azzeramento automatico utilizziamo il pulsante Auto sul pannello dell azzeramento La slitta comincer a muoversi a sinistra e a destra per poi fermarsi nel punto centrale della corsa Questa procedura necessaria per poter utilizzare gli encoder incrementali Durante l azzeramento la barra di stato ci comunicher che la funzione in fase di esecuzione Quando la barra di stato visualizzer nuovamente che il sistema in attesa esso sar pronto per essere controllato Utilizzando il pulsante Manuale possiamo determinare arbitrariamente il punto di azzeramento La posizione corrente della slitta e l angolo corrente del pendolo sommato a pigreco s
71. nde all area del trapezio sotteso alla funzione q z nell intervallo 0 1 Calcoliamo perci l altezza del trapezio cio la massima velocit dmax con la formula geometrica corrispondente iia B B b h 3 i Lila Ripetendo lo stesso ragionamento l integrale dell accelerazione nell intervallo o d uguale alla velocit per 7 T cio la q calcolata 37 IL PENDOLO INVERSO 30 giugno 2009 Questo integrale corrisponde all area del rettangolo sotteso alla funzione g r 1 nell intervallo 05 Calcoliamo perci l altezza del rettangolo corrispondente all accelerazione massima 4 3 13 1 9 2 G t Bh h gt h i ala ds Avremo perci la seguente legge d accelerazione a t ij g t 0 GEH i t 3 fer 2 3 Integrando la legge d accelerazione calcoliamo la legge di velocit sapendo che nell intervallo 2 peek a 3 la velocit dmax i r 5r ri 5 eei ale 3 5 1 2 3 3 gere CX 3 w Integrando questa ultima legge calcoliamo la legge di moto 9 Lr Te 4 1 3 1 1 2 r 24 42 t TREE 4 2 3 3 3 2 15 lp yig lt r lt l IL PENDOLO INVERSO 30 giugno 2009 Una volta trovata la nostra legge di moto adimensionalizzata dobbiamo applicarla al nostro sistema Per fare ci moltiplichiamo il risultato ottenuto per i coefficienti seguenti con f istante di tempo corrente H lunghezza totale del movi
72. nire alla slitta una legge di moto ad accelerazione costante cos da evitare improvvise impennate nella velocit e rischiare cos di destabilizzare il sistema controllato 4 1 Profili di Moto Vogliamo calcolare il nostro profilo di moto usando variabili adimensionali per il tempo tempo attuale periodo e per la posizione posizione attuale spostamento totale chiamate rispettivamente 1 e q Inoltre vogliamo usare la legge d accelerazione illustrata nel primo grafico che segue applicando un accelerazione fissa per un terzo del tempo zero per un altro terzo e una accelerazione uguale alla precedente ma negativa per il terzo restante cosi da avere un 99 CA IL PENDOLO INVERSO 30 giugno 2009 integrale sul periodo nullo e perci avere velocit nulla al tempo t 1 Gli altri grafici mostrano proprio la velocit e la posizione ottenute derivando l accelerazione Sapendo poi che le nostre variabili adimensionali q e t variano nell intervallo 0 1 calcoliamo attraverso passaggi geometrici l accelerazione che dobbiamo dare e integrando le leggi di moto accelerazione velocit IL PENDOLO INVERSO 30 giugno 2009 posizione 0 00 0 20 0 40 0 60 0 80 1 00 tau 4 2 Calcolo del profilo di moto Per prima cosa notiamo che l integrale della velocit tra 0 e 1 corrisponde alla posizione per t 1 cio q 1 Sappiamo che questo integrale corrispo
73. nit amp task task handler T STACK SIZE TASK PRIORITY 1 0 tick period start rt timer nano2count TICK PERIOD rt task make periodic amp task rt get time tick period tick period return ret La funzione cleanup module si occupa di fermare il timer cancellare il task real time e terminare il controllo Funzione di chiusura del modulo void cleanup module void 71 N IL PENDOLO INVERSO 30 giugno 2009 Funzione chiamata quando il modulo rimosso end control amp scrittura scrittura dati scrittura stop rt timer Ferma il timer rt task delete amp task return All inizio di ogni periodo cio ogni 10 millisecondi verr richiamata la funzione task_handler Questa funzione si occuper di acquisire i dati di stato del sistema e trasferirli al controllore ed infine di ricevere i dati elaborati dal controllore e trasferirli in scrittura Al termine dell esecuzione la funzione rt_task_wait_period indicher al task di attendere l inizio del prossimo periodo Utilizzando questa funzione saremo in grado di acquisire ed inviare i dati ad un momento preciso e prefissato la cui precisione garantita dall utilizzo di un sistema hard real time static int task handler int t Funzione chiamata dal task ad ogni esecuzione int ret while 1 Lettura ret lettura dati amp l
74. nte virtuale Effettuiamo tale simulazione con l ausilio del Simulink In figura 3 4 possiamo vedere il modello da noi utilizzato mentre in figura 3 5 i grafici della simulazione Colleghiamo il nostro blocco Pendulum il quale contiene il modello del sistema precedentemente creato alla matrice dei guadagni in retroazione per ottenere il posizionamento dei poli VR posizione Pendulum Uscita Figura 3 4 Modello Simulink IL PENDOLO INVERSO 30 giugno 2009 Figura 3 5 Grafici degli stati omega velocita angolo posizione Dai grafici ottenuti notiamo come dopo un piccolo transitorio il pendolo torna alla posizione di equilibrio E da notare che il sistema fisico presenter delle imperfezioni rispetto al nostro sistema virtuale che potrebbero compromettere i risultati IL PENDOLO INVERSO 30 giugno 2009 4 Movimento Ora che abbiamo un sistema stabile grazie al controllore vogliamo aggiungere nuove funzioni tra cui il movimento Vogliamo cio poter fornire al programma di controllo un tempo e una posizione finale e la slitta dovra percorrere lo spazio tra il punto di partenza e quello finale entro il tempo stabilito mantenendo il controllore attivo durante il movimento e perci mantenendo il pendolo nella sua posizione di equilibrio Raggiungeremo cos un nuovo punto di equilibrio stabile partenza arrivo Figura 4 1 Movimento Per effettuare tale spostamento decidiamo di for
75. o 2009 B Filtri Con i primi tentativi abbiamo visto che il sistema risponde in modo poco fluido a causa delle vibrazioni dell asta ed a problemi di derivazione numerica in quanto la lettura dei dati dell encoder fornisce un valore digitale e perci discontinuo La funzione di un filtro quella di attenuare alcune frequenze e lasciarne passare altre In particolare i filtri passa basso lasciano passare frequenze minori di una data frequenza detta frequenza di taglio mentre i filtri passa alto lasciano passare frequenze maggiori di Nel nostro caso utilizzeremo un filtro passa basso Il nostro filtro sar passivo in quanto non introdurr energia nel sistema Inoltre utilizzeremo un filtro di secondo grado cosi da avere un attenuazione maggiore sopra la frequenza di taglio Applicheremo i nostri filtri agli ingressi ed alle uscite analogiche vale a dire alla posizione dei due encoder e alla coppia in uscita I filtri sono solitamente applicati attraverso dei circuiti elettronici ma il loro comportamento puo essere anche simulato ad un programma o un circuito costruendo cosi un filtro digitale Noi seguiremo questa strada Un filtro passa basso di secondo grado avr una funzione di trasferimento con 2 poli reali non distinti la costante di tempo 7 corrisponde alla frequenza di taglio 22 AT E an 14 75 Il grafico di bode che otterremo sar simile a quello mostrato in figura e figura
76. omando sizeof Comando switch comando case AZZERA if gEnable 1 amp amp gFunzione FERMO gFunzione AZZERAMENTO break case CONTROLLA IL PENDOLO INVERSO 30 giugno 2009 if gEnable 1 amp amp gFunzione FERMO gFunzione CONTROLLO break case MUOVI if gEnable 1 amp amp gFunzione CONTROLLO gFunzione MOVIMENTO rtf get FIFO IN amp gNewPos sizeof int rtf get FIFO IN amp gTime sizeof int break case ABILITA gEnable 1 break case DISABILITA gEnable 0 gFunzione FERMO break case FERMA gFunzione FERMO break case AZZERA MANUALE azzeraManuale break 8 2 7 Funzioni ausiliarie Abbiamo infine delle funzioni secondarie di utilit funzioni di conversione per ottenere dati nell unit di misura desiderata e funzioni di filtro per ottenere dei dati filtrati hz 9 IL PENDOLO INVERSO 30 giugno 2009 Funzioni di Conversione Conversione da radianti a millimetri yf double r2mm double radianti return radianti RAGGIO Conversione da radianti a gradi mf double r2g double radianti return radianti 2 0 PI 360 0 Funzioni di Filtro Funzione Filtro void filter Filter f double u 3 double y 3 int i Shift Uscite IL PENDOLO INVERSO 30 giugno 2009 Calcola uscita filtrata y 0 0
77. ornisce le funzioni per la gestione delle FIFO IL PENDOLO INVERSO 30 giugno 2009 5 2 1 Hard real time e Soft real time Per il nostro progetto abbiamo bisogno di un sistema hard real time La differenza tra soft e hard real time sta nel rispetto delle deadline In un sistema soft real time il mancato completamento di un task entro la sua deadline non consigliabile ma comunque tollerabile Un esempio di sistema soft real time pu essere la riproduzione di un DVD dove una mancata esecuzione pu peggiorare la qualit del filmato ma non pregiudica l intero sistema In un sistema hard real time il mancato completamento di un task entro la sua deadline procura un danno irreparabile al sistema ed perci da evitare completamente Un esempio di sistema hard real time il sistema di controllo della temperatura del nocciolo di una centrale nucleare dove un piccolo errore porterebbe a danni enormi Per il nostro progetto abbiamo bisogno di un sistema hard real time in quanto la mancata esecuzione del task periodico del controllore pregiudicherebbe pesantemente l equilibrio del sistema CA 46 IL PENDOLO INVERSO 30 giugno 2009 6 Comedi Il progetto Comedi Control and Measurement Device Interface sviluppa driver strumenti e librerie open source per l acquisizione di dati Il progetto si divide in tre parti Comedi una collezione di driver open source per le schede di acquisizione dati pi
78. ostra matrice dei guadagni G imponendo degli autovalori stabili il che significa trovare il valore di G in modo che la matrice AJ A abbia autovalori nelle posizioni assegnate Prima di eseguire questo script necessario caricare i parametri nell ambiente di lavoro di MATLab tramite lo script init pendulum m visto nel capitolo 1 place poles m Riposiziona i poli del sistema pendolo o o crea nel Workspace la matrice G che contiente i guadagni o per stabilizzare il sistema del pendolo con il controllo in retroazione Go Go N IL PENDOLO INVERSO 30 giugno 2009 Den 1 P K2 2 P K1 P K3 Cl P K2 P K1 g Den C2 P K2 P K1 P K3 P r Den C3 P K2 2 P K1 P K3 g Den CA 1 P r P K3 Den Matrice del sistema A 0 100 oe C1000 0 00 1 c3 0 0 0 oe Matrice degli ingressi B 0 C2 0 C4 Poli old_poles eig A o Nuovi Parametri w0 1 2 old_poles 3 csi cos pi 4 Fattore di Cattiveria factor 2 pole 1 csi w0 i wO 1 csi 2 1 2 pole_2 csi wO i w0 1 csi 2 1 2 poles pole 1 pole 2 factor pole 1 factor pole 2 IL PENDOLO INVERSO 30 giugno 2009 G place A B poles 3 4 Simulazione in MATLab Simulink Prima di provare l algoritmo sviluppato nel mondo reale richiesta una simulazione teorica in un ambie
79. p maxdata 97 IL PENDOLO INVERSO rad 1 0 rad 1024 2 P1 lettura gt p_enc rad Emergenza 30 giugno 2009 if ret gt OK ret comedi_dio_read device emerg subdev emerg chan amp lettura emerg return ret EXPORT SYMBOL lettura dati La funzione di scrittura dei dati utilizza le funzioni write di kcomedilib per immettere il valore di coppia e l abilitazione al sistema Il valore della coppia trasformato prima in voltaggio poi nel suo valore in bit corrispondente alla scheda utilizzata int writeCoppia double coppia int ret double volt lsampl_t maxdata Conversione Coppia gt Volt volt 0 8 coppia 0 46 9 76 Saturazione if volt gt 9 76 volt 9 76 else if volt lt 9 76 volt 9 76 Conversione Volt gt bit maxdata comedi_get_maxdata device coppia chan F Dai coppia subdev volt volt 9 76 maxdata 9 76 2 98 IL PENDOLO INVERSO ret comedi_data_write device coppia_chan range aref volt return ret Scrittura dei dati dalla scheda ia int scrittura_dati Scrittura scrittura int ret Driver Enable ret comedi_dio_write device enable chan scrittura enable Coppia ret writeCoppia scrittura coppia return ret EXPORT_SYMBOL scrittura dati 8 4 Strutture dati 30 giugno 2009 coppia subdev enable subdev All interno dei nostri
80. p pendolo double amp motore unsigned int amp emergenza int ret ret read fifoIn amp motore sizeof motore ret read fifoIn amp pendolo sizeof pendolo ret read fifoIn amp emergenza sizeof emergenza ret read fifoIn amp stato sizeof stato return ret 1 Apre i canali di comunicazione bool MainWindow openComm fifoln open dev rt f0 O RDONLY if fifoIn 0 return false fifoOut open dev rtf1 O WRONLY if fifoOut 0 IL PENDOLO INVERSO 30 giugno 2009 return false return true 9 2 3 Handler del timer Gli eventi temporizzati vengono gestiti da un handler il quale viene richiamato ogniqualvolta il timer segna il passaggio ad un nuovo periodo La funzione timerEvent si occupa di leggere i dati dalla fifo di input aggiornare i grafici eseguire il controllo dell emergenza e aggiornare la barra di stato void MainWindow timerEvent QTimerEvent double pendolo motore unsigned int emergenza static int cont 0 lettura dei dati in input if readValues pendolo motore emergenza if cont 20 aggiornare i plot e lo stato plotPendolo gt addValue pendolo plotCarrello gt addValue motore cont 0 cont IL PENDOLO INVERSO 30 giugno 2009 controllo dell emergenza if emergenza 1 stop
81. posizione verticale Ogni capitolo descrive una fase del lavoro che ci ha portato alla realizzazione del sistema Nel capitolo primo introduciamo il pendolo inverso presentando le apparecchiature utilizzate ed i componenti del banco di lavoro Il capitolo secondo presenta il modello teorico del pendolo e le equazioni che ne determinano la dinamica e gli stati di equilibrio Nel capitolo terzo e quarto ci occupiamo della tematica del controllo della stabilizzazione e del movimento del pendolo Per mantenere stabile il sistema usiamo una tecnica detta di riposizionamento dei poli Il capitolo quinto descrive il progetto RTAI utilizzato per ottenere un sistema hard real time Nel capitolo sesto affrontiamo l argomento dell acquisizione dei dati analizzando il progetto Comedi IL PENDOLO INVERSO 30 giugno 2009 Il capitolo settimo riguarda l installazione e la configurazione del sistema utilizzato dalla creazione del kernel real time all inizializzazione del sistema Il capitolo ottavo descrive l implementazione del controllore attraverso l utilizzo di task real time Nel capitolo nono presentiamo l interfaccia utente creata con le librerie Qt e Qwt per il linguaggio C Nelle appendici forniamo informazioni aggiuntive su argomenti trattati durante lo sviluppo del progetto IL PENDOLO INVERSO 30 giugno 2009 1 Il pendolo inverso Il pendolo uno dei sistemi fisici pi semplici e
82. prevPos timerInterval setAxisScale QwtPlot xBottom time 0 time MaxDataSize 1 1000 Plotta posCurve setRawData time position dataCount SpeCurve setRawData time speed dataCount replot La funzione setTimerInterval utilizzata per inizializzare l intervallo temporale di aggiornamento del grafico Setta l intervallo temporale N MN 126 IL PENDOLO INVERSO 30 giugno 2009 void EncoderPlot setTimerInterval int timerInterval this gt timerInterval timerInterval Le classi Background ed EncoderCurve sono delle classi di utilit per lo stile grafico dello sfondo e delle curve include encoderplot h class Background public QwtPlotItem public Background setZ 0 0 virtual int rtti const return QwtPlotItem Rtti PlotUserItem virtual void draw QPainter painter const QwtScaleMap amp const QwtScaleMap amp yMap const QRect amp rect const QColor c Qt white ORect r rect IL PENDOLO INVERSO 30 giugno 2009 for int i 10 i gt 10 i 1 r setBottom yMap transform i 1 r setTop yMap transform i painter gt fillRect r c c c dark 102 class EncoderCurve public QwtPlotCurve public EncoderCurve const QString amp title OQwtPlotCurve title setRenderHint QwtPlotItem RenderAntialiased void s
83. r poter ospitare RTAI Prima di configurare il kernel abbiamo bisogno di un file di configurazione Possiamo scegliere fra varie alternative tra cui usare lo stesso file di configurazione del sistema che stiamo utilizzando per la creazione del kernel oppure un file per la configurazione di default Scegliamo invece di utilizzare un file di configurazione base il quale sar praticamente vuoto a parte le funzioni strettamente necessarie In questo modo possiamo aggiungere successivamente le funzioni che ci serviranno e non avremo un kernel troppo pesante ep arch xBb RKconfig config Utilizziamo il comando seguente per caricare la configurazione base dovremo rispondere a tutte le domande che ci vengono poste con N no Y si o M modulo IL PENDOLO INVERSO 30 giugno 2009 per ora selezioniamo i default mostrati con la lettera maiuscola oppure premendo il tasto invio senza immettere un alcun carattere make oldconfig Ora eseguiamo il comando seguente per far partire la schermata di configurazione in cui dovremo selezionare diverse opzioni make xconfig e mer lug 1 17 00 root Linux Kernel Prompt for development and or incomplete code drivers Local version append to kernel release rtai E Automatically append version information to the version string E Support for paging of anonymous memory swap System V IPC MPOSIX Message Queues OBSD Process Accounting O Export task p
84. ring Support 9P2000 Experimental Device Drivers Generic Driver Options O Connector unified userspace lt gt kernelspace linker O Memory Technology Device MTD support O Parallel port support E Block devices f Misc devices Silicon Labs C2 port support EXPERIMENTAL E ATA ATAPI MFM RLL support SCSI device support SCSI Transports Prompt for development and or incomplete code drivers EXPERIMENTAL Some of the various things that Linux supports such as network drivers file systems network protocols etc can be in a state of development where the functionality stability or the level of testing is not yet high enough for general use This is usually known as the alpha test phase among developers If a feature is currently in alpha test then the developers usually discourage uninformed widespread use of this feature by the general public to avoid Why doesn t this work type mail messages However active testing and use of these systems is welcomed Just be aware that it may not meet the normal level of reliability or it may fail to work in some special cases Detailed bug reports from people familiar with the kernel internals are usually welcomed by the developers before submitting bug reports please read the documents lt file README gt lt file MAINTAINERS gt lt file REPORTING BUGS gt lt file Documentation BUG HUNTING gt and lt file Documentation oops tracing txt gt in the kernel source
85. rire al riavvio del sistema caricare 1 moduli di RTAI Comedi e Comedilib e di configurare il device driver Questi comandi devono essere eseguiti ad ogni avvio del sistema real time bin bash rtai inode RTAI inode creation for UDEV systems creates dev rtf n rm f dev comedi dev rtf dev rtai shm for n in seq 0 9 do rm f dev rtf n mknod m 666 dev rtf n c 150 n done create shared memory inode mknod m 666 dev rtai_shm c 10 254 create Comedi inodes for i in seq 0 15 do rm f dev comediSi mknod m 666 dev comedi i c 98 i done loading modules insmod usr realtime modules rtai hal ko insmod usr realtime modules rtai_up ko or rtai lxrt ko insmod usr realtime modules rtai fifos ko insmod usr realtime modules rtai sem ko insmod usr realtime modules rtai mbx ko 67 68 IL PENDOLO INVERSO 30 giugno 2009 insmod usr realtime modules rtai_msg ko insmod usr realtime modules rtai_netrpc ko ThisNode 127 0 0 1 insmod usr realtime modules rtai_shm ko insmod usr realtime modules rtai_tasklets ko modprobe comedi modprobe kcomedilib modprobe comedi fc modprobe s626 acq card hardware specific insmod usr realtime modules rtai comedi ko insmod usr realtime modules rtai math ko librerie per le funzioni matematiche configuring device comedi_config v dev comedi0 s626 IL PENDOLO INVERSO 30 giugno 2009
86. rnel completo L initrd verr fornito al kernel dal bootloader mkinitramfs o boot initrd img 2 6 28 7 rtai Ora copiamo 1 file immagine e la tabella dei simboli nella cartella boot cp arch x86 boot bzImage boot vmlinuz 2 6 28 7 rtai cp System map boot System map 2 6 28 7 rtai ln s boot System map 2 6 28 7 rtai boot System map CA N IL PENDOLO INVERSO 30 giugno 2009 7 3 1 Grub setup Apriamo la cartella boot grub la quale conterr il nostro bootloader GRUB il programma che si avvier all accensione del PC e che ci permetter di avviare il sistema operativo da noi scelto Apriamo il file menu lst e scendiamo fino in fondo vedremo delle linee di testo simili alle seguenti le quali corrispondono ai diversi sistemi operativi caricati dal bootloader Aggiungiamo la seguente opzione title RTAI Ubuntu 8 10 kernel 2 6 28 7 rtai uuid lt valore_UUID gt Questo valore da copiare dalle altre opzioni kernel boot vmlinuz 2 6 28 7 rtai root UUID S lt valore_UUID gt ro quiet splash initrd boot initrd img 2 6 28 7 rtai quiet Riavviamo il PC e dovremmo vedere la nuova opzione apparire nella schermata di GRUB Selezioniamola e controlliamo che il boot del kernel vada a buon fine In caso contrario il problema sar molto probabilmente nella configurazione del kernel Sar opportuno perci riconfigurare il kernel con diverse opzioni stando ben attenti alle opzion
87. rocess statistics through netlink EXPERIMENTAL DAuditing support Kernel config support t Enable access to config through proc config gz 17 Kernel log buffer size 16 gt 64KB 17 gt 128KB O Control Group support O Group CPU scheduler E Create deprecated sysfs files O Kernel gt user space relay support formerly relayfs O Namespaces support initial RAM filesystem and RAM disk initramfs initrd support Initramfs source file s E Optimize for size E Disable heap randomization E Enable full sized data structures for core Enable futex support FA Configure standard kernel features for small systems Enable loadable module support Enable the block layer 10 Schedulers Processor type and features O Supported processor vendors Power management and ACPI options CPU Frequency scaling Bus options PCI etc O PCCard PCMCIA CardBus support E Support for PCI Hotplug Executable file formats Emulations Networking support Networking options O Network packet filtering framework Netfilter OThe DCCP Protocol EXPERIMENTAL iL The SCTP Protocol EXPERIMENTAL The TIPC Protocol EXPERIMENTAL O Distributed Switch Architecture support O QoS and or fair queueing Network testing DM Amateur Radio support I CAN bus subsystem support DIrDA infrared subsystem support O Bluetooth subsystem support Wireless ORF switch subsystem support i Plan 9 Resource Sha
88. sari ed avere a disposizione le diverse utilty 7 5 1 Configurazione Apriamo la cartella contenente i sorgenti di RTAI e creiamo una nuova cartella chiamata rtai build ci consigliato per evitare di mischiare i file sorgenti con i file creati in fase di compilazione cd usr src mkdir rtai build cd rtai build Effettuiamo ora la configurazione di RTAI con il comando make xconfig il quale ci mostrer una schermata molto simile a quella utilizzata per configurare il kernel di Linux N CA CA oo IL PENDOLO INVERSO 30 giugno 2009 Per ora non selezioniamo nulla controlliamo solo che la cartella dei sorgenti linux corrisponda a quella desiderata lasciamo infine come cartella di destinazione usr realtime Non selezioniamo assolutamente il supporto per Comedi a questo stadio della configurazione in quanto avremo errori di compilazione se lo facciamo Dovremo prima installare Comedi e poi abilitarne il supporto Molto ironicamente per installare Comedi avremo bisogno che RTAI sia installato 7 5 2 Installazione Compiliamo ed installiamo RTAI con i seguenti comandi make make install Aggiungiamo successivamente la linea export PATH SPATH usr realtime bin al file bashrc presente nella home Questa aggiunta permetter l utilizzo dei file eseguibili installati nella cartella usr realtime 7 5 3 Kernel test Ora che RTAI installato nel nostro sistema effettuiamo dei
89. sera la prima equazione la quale esplicita il legame tra lo stato corrente del sistema e l ingresso immesso rispetto alla variazione dello stato Esplicitiamo per prima cosa le incognite che ci interessano cio e X dalle equazioni di moto 0 2 gras yong la e 2 11 K K K RK Attraverso semplici passaggi matematici e di sostituzione possiamo ricavare i seguenti legami K K g 0 K Cu CEK CK KKESK A 2 12 K8 g Ki Cu KK K K K Kj R um 1 3 Semplifichiamo ulteriormente i coefficienti in modo analogo a quanto fatto prima _ K K8 Se K I 1 2 2 2 K K K K K K R K g K 1 2 C 2 K K K K K K R Come passo finale esplicitiamo le matrici del sistema ottenuto notando il semplice legame tra 0 e Oetraxe x 0 1 0 0 0 C 000 C A B 0 0 0 1 0 C 0 0 0 C 2 14 DD IL PENDOLO INVERSO 30 giugno 2009 2 4 Simulazione MATLab Simulink Durante tutta la progettazione facciamo uso del MATLab e del Simulink per poter simulare in un ambiente virtuale quello che abbiamo ricavato dalle varie sessioni di calcolo teorico In questo modo possiamo garantire una certa sicurezza prima di applicare 1 nostri programmi al sistema fisico e verificare la teoria in modo pi veloce ed efficace Il primo passo che compiamo per la simulazione caricare tutti i parametri del modello fisico in un file script di MATLab questo script dovr essere richiamato all inizio in modo da creare le costan
90. sk real time e processi Linux in pratica permette all utente di ricevere o inserire dei dati nel sistema attraverso delle FIFO condivise La FIFO del sistema real time viene associata ad un block device di Linux corrispondente rtf cosi da permetterne la lettura e la scrittura da entrambi i sistemi La funzione di lettura dei dati externStato si occupa di inserire i dati ricevuti dallo stadio di acquisizione in una FIFO di output cosi che essi possano essere elaborati successivamente dall utente per ottenere dati statistici o grafici La funzione handleCommands viene richiamata ogniqualvolta la FIFO di input viene scritta In questo modo l utente potr utilizzare un programma in user space per immettere dei comandi nel sistema Questa funzione utilizzata per determinare il comportamento del controllore Scrive nella FIFO i dati letti mf int externStato Lettura lettura IL PENDOLO INVERSO 30 giugno 2009 int ret OK if gEnable 1 ret rtf put FIFO OUT amp lettura m enc sizeof lsampl t ret rtf put FIFO OUT amp lettura p enc sizeof lsampl t ret rtf put FIFO OUT amp lettura emerg sizeof lsampl t ret rtf_put FIFO_OUT amp gFunzione sizeof gFunzione return ret Handler della FIFO di inserimento dei comandi xf void handleCommands void Comando comando rtf get FIFO IN amp c
91. teZeroPanel IL PENDOLO INVERSO 30 giugno 2009 QGridLayout layout new QGridLayout QLabel zeroLabel new QLabel lt font size 8 gt Azzeramento lt font gt zeroLabel gt setAlignment Qt AlignHCenter layout gt addWidget zeroLabel 0 0 1 2 autoZeroDo new QPushButton Auto connect autoZeroDo SIGNAL clicked this SLOT autoZero layout gt addWidget autoZeroDo 1 0 manualZeroDo new QPushButton Manuale layout gt addWidget manualZeroDo 1 1 connect manualZeroDo SIGNAL clicked this SLOT manualZero zeroPanel new QWidget zeroPanel gt setMaximumSize 400 100 zeroPanel gt setMinimumSize 400 100 zeroPanel gt setLayout layout 9 2 2 Comunicazione con il task real time La comunicazione con il task real time avviene attraverso delle FIFO condivise tra RTAI e Linux La funzione openComm si occupa di aprire i block device delle FIFO fifoIn in lettura e fifoOut in scrittura FifoIn il canale di input dei valori inviati da RTAI verso Linux mentre fifoOut il canale di output dei comandi da Linux a RTAI 114 IL PENDOLO INVERSO 30 giugno 2009 La funzione readValues effettua una lettura del canale di input ricevendo i dati della posizione dell encoder del pendolo e del motore dello stato di emergenza e dello stato del controllore Legge i valori dalla FIFO ai bool MainWindow readValues double am
92. test per controllare che il nuovo kernel real time non abbia problemi Riavviamo il sistema ed avviamo il kernel realtime poi carichiamo i moduli necessari al funzionamento di RTAI per poter effettuare il test insmod usr realtime modules rtai_hal ko insmod usr realtime modules rtai_up ko insmod usr realtime modules rtai_fifos ko IL PENDOLO INVERSO 30 giugno 2009 Apriamo ora il percorso usr realtime testsuite kernel latency ed avviamo il test con il comando run Nel nostro caso abbiamo il seguente output anche aprendo diverse applicazioni nel frattempo RTAI latency calibration tool period 100000 ns avrgtime s do not use the FPU start the timer timer_mode is oneshot RTAI Testsuite KERNEL latency all data in nanoseconds RTH lat min ovl min lat avg lat max ovl max overruns RTD 21171 1171 282 19507 19507 0 RTD 1171 1171 519 4309 19507 0 RTD 1179 1179 338 2464 19507 0 RTD 1166 1179 213 3116 19507 0 RTD 1156 1179 396 668 19507 0 RTD 1231 1231 344 4069 19507 0 RTD 1074 1231 157 2103 19507 0 RTD 1171 1231 355 2368 19507 0 RTD 1179 1231 382 661 19507 0 RTD 1177 1231 343 4153 19507 0 RTD 1181 1231 247 876 19507 0 RTD 1241 1241 327 1424 19507 0 RTD 1183 1241 227 2103 19507 0 Analizzando i dati ottenuti notiamo subito che l ultima colonna riporta sempre il valore zero ci significa che non si verificano overrun nel nostro siste
93. ti globali che useranno tutti gli altri script oe init pendulum m oe Carica nel Workspace i parametri del pendolo oe oe questo script necessario per poter usare simulazioni o e gli altri script Ripulisco l Ambiente close all clear all cle Costanti Globali global P g o g 9 80665 Accelerazione di gravita slm oe Definizione Masse P ms 1 304 Massa slitta kg P ma 0 17 Massa Asta kg P mc 0 365 Massa Concentrata le varie m s 2 kg IL PENDOLO INVERSO w WwW W U oe o oe uU U t y nuo U U Uu Uu DU 30 giugno 2009 Definizione Lunghezze e Raggi l6 la Dp Lo 800e 3 P lc 2 29 40e 3 P Dp 2 Definizione Inerzi 9010 92 P ga 10 6 116 Euge 0 63 9 048 PJE 105 57 12 134 4 15 P Jm 10 6 oe Lunghezza Asta m oe Diametro Pulegge m oe Raggio Pulegge m e oe Momento Inerzia Ja kgmm 2 oe kgm 2 oe Momento Inerzia Jc kgmm 2 oe kgm 2 Momento Inerzia Puleggia Folle kgmm 2 kgm 2 9 Momento Inerzia Puleggia Motrice kgmm 2 kgm 2 Costanti del Modello Fisico KL K2 KS P ma P 1a 2 P Ja P mc P lc 2 P Jc P ma P la P mc P lc P ms P ma P mc P Um P r 2 P Jf P r 2 Facciamo uso di una struttura di MATLab per contenere t
94. to di periodo Confrontando i due segnali possiamo capire la direzione di rotazione basandoci su quale dei due segnali risulta in ritardo Nel nostro sistema faremo uso di un encoder Figura 1 8 Encoder del pendolo incrementale montato sul pendolo e di un encoder virtuale fornito dal resolver integrato direttamente nel motore Il blocco B della figura 1 4 mostra la circuiteria che si occupa di leggere i segnali degli encoder e trasmetterli come valore di posizione angolare o posizione Interessante la tecnica usata per cercare di eliminare i disturbi sulle linee di collegamento il cui circuito direttamente integrato nella scheda di acquisizione Per fare ci il segnale viene trasmesso su due linee e Sulla prima passa il segnale digitale cosi come esce dall encoder S e Sulla seconda trasmettiamo il segnale negato S IL PENDOLO INVERSO 30 giugno 2009 Considerando che le linee sono molto vicine possiamo pensare che un eventuale disturbo D sar uguale su entrambe perci avremo e Linea positiva 5 D e Linea negativa S D S D Durante la ricezione effettuiamo la differenza dei due segnali ottenendo un segnale che teoricamente non ha disturbi e risulta amplificato di un fattore due infatti abbiamo che segnale S D S D 2S 1 4 Scheda di acquisizione Abbiamo utilizzato per questo progetto una scheda di acquisizione dati della Sensoray specificatamente la scheda s626 La scheda s626 possied
95. untive per il programmatore in quanto la programmazione di moduli diversa dalla programmazione di processi Linux e le API utilizzate differiscono dallo standard POSIX I processi possono essere creati solamente in kernel space il che pu portare a problemi in quanto il codice pu portare a disturbi nell esecuzione di altri processi aumentando il rischio di malfunzionamenti Ultimamente lo sviluppo si sta muovendo verso la possibilit di processi in user space attraverso il modulo LXRT Questo approccio sviluppato dai progetti RTLinux e RTAI 5 1 3 Perch RTAI Il nostro obiettivo consiste nell avere un sistema hard real time il quale ci garantisca il completo rispetto dei vincoli temporali Questo comportamento non garantito dall approccio preemption improvement il quale accettabile solo per sistemi soft real time Per questo motivo anche se prevede uno sforzo maggiore nella programmazione optiamo per l approccio interrupt abstraction ed in particolare per il progetto RTAI in quanto il suo sviluppo ancora attivo al giorno d oggi A Oo IL PENDOLO INVERSO 30 giugno 2009 5 2 Kernel Linux rtai RTAI consiste principalmente in una patch del kernel linux la quale introduce uno strato di astrazione tra l hardware e il sistema operativo Nel sistema operativo cos creato lo scheduling del processore e gli interrupt sono gestiti da RTAI non pi da Linux ci ci permette
96. upport o Kernel automonter e Kernel hacking o Assicuriamoci che l opzione Compile the kernel with frame pointers non sia abilitata in quanto fare conflitto con RTAI Possiamo aggiungere altre funzioni al nostro kernel come funzioni integrate oppure come moduli in base alle nostre necessit La differenza tra i due approcci sta nel fatto che i moduli possono essere caricati e rimossi dal kernel anche durante il suo utilizzo ci fornisce l indubbio vantaggio di poter utilizzare un kernel pi leggero e caricare i moduli solo quando ci necessario Inoltre in questo modo il modulo viene caricato in una zona di memoria diversa dal kernel stesso garantendo che in caso di IL PENDOLO INVERSO 30 giugno 2009 malfunzionamenti non venga pregiudicato l intero sistema caratteristica molto importante per i sistemi real time 7 3 Compilazione del Kernel Effettuiamo ora la compilazione i sorgenti verranno compilati per creare un immagine del kernel Eseguiamo i seguenti comandi che effettueranno successivamente la pulizia dei sorgenti la compilazione del kernel la compilazione dei moduli e l installazione dei moduli make make make make clean bzImage modules modules install x Creiamo ora un immagine initrd initial ram disk il quale un piccolo filesystem montato in memoria da Linux nella fase iniziale della procedura di boot il quale ci permetter di caricare successivamente il ke
97. utti i parametri denominata P mentre dichiariamo la gravit come costante a parte I coefficienti C presenti nella 2 14 saranno creati nel capitolo 3 che tratta il controllo in retroazione del pendolo IL PENDOLO INVERSO 30 giugno 2009 Figura 2 4 Modello Simulink del pendolo inverso Creiamo in simulink il blocco Pendulum il quale richiamer lo script pendulum model m ed effettuer un integrazione tramite un blocco integratore In quest ultimo blocco sono dichiarate inoltre le condizioni iniziali del sistema function PM pendulum model theta p x p theta x Cm oe Risolve il modello del pendolo oe oe Dati in input oe theta p velocita angolare oe X p velocita del carrello oe theta posizione angolare rispetto alla verticale zero rad verso l alto X posizione del carrello zero al centro Cm Coppia Motrice Applicata 9 x non viene utilizzata nei calcoli global P g MM P K1 P K2 cos theta 0 0 P K2 cos theta P K3 0 0 IL PENDOLO INVERSO 30 giugno 2009 0 0 1 0 0 0 0 1 BB P K2 g sin theta P K2 theta p 2 sin theta Cm P r theta p x p PM inv MM BB Per la nostra simulazione diamo un disturbo all angolo del pendolo di 0 1 radianti rispetto al punto di equilibrio Otteniamo i seguenti grafici notiamo che il pendolo in mancanza di coppia di controllo oscilla indefinitivamente allont
Download Pdf Manuals
Related Search
Related Contents
LightShow 37405 Instructions / Assembly Brickcom MD-100AE Max Caddy Owners Manual Weed Eater 164849 Owner's Manual Programação Não Linear Manual 610 D (fr) A Minha Autobiografia_v20 Kite® - Invacare Samsung PS51D6900DS manual de utilizador PRIMERGY IB HCAカード(40Gbps)(PG-HSC204)取扱説明書 Copyright © All rights reserved.