Indice Introduzione 3 1 Leggi anti-windup per manipolatori robotici 6 1.1 Definizione del problema . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2 Soluzione anti-windup non lineare . . . . . . . . . . . . . . . . . . . 9 1.3 Considerazioni sulla soluzione anti-windup 1.4 non lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Prestazione anti-windup . . . . . . . . . . . . . . . . . . . . . . . . 12 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 17 2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2 Formulazione di Eulero-Lagrange . . . . . . . . . . . . . . . . . . . 18 2.3 Cinematica e dinamica di un manipolatore . . . . . . . . . . . . . . 19 2.3.1 Coordinate omogenee . . . . . . . . . . . . . . . . . . . . . . 19 2.3.2 Link, giunti e loro parametri . . . . . . . . . . . . . . . . . . 21 2.3.3 Rappresentazione di Denavit-Hartenberg . . . . . . . . . . . 23 2.3.4 Trasformazione omogenea associata ad un link . . . . . . . . 24 2.3.5 Jacobiano geometrico . . . . . . . . . . . . . . . . . . . . . . 26 2.3.6 Derivata di una matrice di rotazione . . . . . . . . . . . . . 27 2.3.7 Calcolo dello Jacobiano geometrico . . . . . . . . . . . . . . 28 2.3.8 Energia cinetica di un corpo rigido tridimensionale che si 2.3.9 muove nello spazio . . . . . . . . . . . . . . . . . . . . . . . 29 Energia potenziale di un manipolatore . . . . . . . . . . . . 31 1 INDICE 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ . . 3 SimMechanics 32 49 3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.2 Che cos’è SimMechanics . . . . . . . . . . . . . . . . . . . . . . . . 49 3.3 Creare un modello SimMechanics . . . . . . . . . . . . . . . . . . . 50 3.4 Librerie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.5 Blocchi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.5.1 Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.5.2 Ground . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.5.3 Revolute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.5.4 Joint Actuator . . . . . . . . . . . . . . . . . . . . . . . . . 58 3.5.5 Joint Sensor . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.5.6 Joint Initial Condition Actuator . . . . . . . . . . . . . . . . 62 3.5.7 Continuous Angle . . . . . . . . . . . . . . . . . . . . . . . . 63 Modello SimMechanics del robot Siemens-Manutec r3 . . . . . . . . 64 3.6 4 Simulazioni 71 4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.2 Congruenza dei modelli del robot . . . . . . . . . . . . . . . . . . . 71 4.3 Anti-windup applicato al robot SM-r3 . . . . . . . . . . . . . . . . . 78 4.3.1 Soluzione non lineare . . . . . . . . . . . . . . . . . . . . . . 78 4.3.2 Soluzione anti-windup generallizzata . . . . . . . . . . . . . 83 5 Conclusioni 87 Bibliografia 89 INDICE 2 Introduzione L’automazione è un complesso di tecniche volte a sostituire l’intervento umano, o a migliorarne l’efficienza, nell’esercizio di dispositivi e impianti. Un importante settore della scienza dell’automazione o automatica è costituito dalla disciplina denominata controlli automatici. Esso si riferisce allo studio dei dispositivi (detti regolatori o dispositivi di controllo), mediante i quali si fanno variare automaticamente le grandezze liberamente manipolabili di un sistema (detto sistema controllato) in modo che subisca la migliore possibile evoluzione nel tempo: la maggiore o minore “bontà” dell’evoluzione nel tempo viene valutata con criteri che sono di volta in volta specificati e sui quali si basa il progetto dei dispositivi di controllo medesimi. Nell’ambito della progettazione dei dispositivi di controllo può accadere che un controllore funzioni ottimamente per una certa gamma di valori del segnale di riferimento, ma abbia una notevole perdita di prestazioni nel caso in cui il suddetto segnale sia anche di poco al di fuori di tale gamma. Ciò si verifica perché l’uscità del controllore è applicata a dispositivi di attuazione che presentano saturazione, cioè ammettono segnali di controllo contenuti in un intervallo di valori compresi tra un massimo ed un minimo. E’ opportuno evitare che, nel caso in cui la variabile di controllo saturi, si verfichi il cosiddetto fenomeno del “windup”. Il windup è particolarmente evidente se nel controllore è presente un’azione di tipo integrale, ciò è dovuto al fatto che nel controllore si continua ad integrare l’errore anche quando questo è molto grande per via della saturazione, facendo cosı̀ crescere eccessivamente i valori numerici assunti dalle variabili di stato. Il termine windup si riferisce proprio a questo comportamento delle variabili di stato, che crescono spropositatamente verso valori troppo elevati. Il windup provoca spesso 3 Introduzione l’insorgenza di fenomeni oscillatori molto marcati o, a volte, di risposte divergenti che possono presentarsi anche in assenza di azione integrale. Negli anni passati, particolare attenzione è stata rivolta allo studio del problama windup per processi lineari, in cui è nota la struttura del controllore che garantisce le proprietà di stabilità, asintotica globale ed esponenziale locale, del processo del sistema privo di saturazione. In questo tipo di problemi si cerca di eliminare la perdita di prestazioni e spesso l’instabilità che si manifestano non appena connettiamo il dispositivo di controllo in controreazione al processo lineare, che risente, in questo caso, della saturazione sugli ingressi. Sostanzialmente la soluzione consiste nella progettazione di un compensatore anti-windup che esplichi un’azione che sommata a quella del controllore consenta di: 1. preservare la risposta lineare del sistema lineare a ciclo chiuso senza saturazione finché non vengono raggiunti i limiti di saturazione; 2. garantire quanto più possibile il recupero della risposta del sistema lineare a ciclo chiuso qualora vengano raggiunti i limiti di saturazione. Un risultato simile a quello appena visto vale anche per i sistemi di controllo non lineari per processi non lineari, come ad esempio i manipolatori robotici. In questo caso anche se non consideriamo la saturazione abbiamo comunque a che fare con un processo non lineare. Tuttavia il sistema è spesso caratterizzato da alcune proprietà notevoli di linearizzabilità che suggeriscono delle interessanti tecniche per il progetto delle leggi di controllo non lineari, necessarie come prima per: 1. preservare la risposta detta unconstrained (del sistema non soggetto a saturazione), relativa al sistema a ciclo chiuso ottenuto dall’interconnessione del controllore e del processo non lineari, fintantoché non vengano raggiunti i limiti di saturazione imposti dagli attuatori dei dispositivi di controllo; 2. garantire quanto più possibile il recupero della risposta unconstrained del sistema non lineare a ciclo chiuso non appena vengano raggiunti i limiti di saturazione. Introduzione 4 Introduzione L’oggetto del presente lavoro di tesi è proprio lo studio simulativo di leggi antiwindup per manipolatori robotici, in particolare per il robot industriale SiemensManutec r3. Nel seguito il robot verrà descritto mediante un sistema di equazioni dinamiche ricavate tramite una procedura automatica di calcolo, implementata con il software per l’analisi simbolica e numerica, M aple 8.0. La scelta di questo particolare robot è legata alla possibilità di verificare la correttezza dei risultati forniti dalla procedura di calcolo automatico dei coefficienti dinamici delle equazioni di moto del manipolatore. All’interno di un file dimostrativo del toolbox MATLAB SimMechanics, si trova infatti un modello molto dettagliato del robot SiemensManutec r3. Inoltre, il fatto di poter verificare la “fedeltà” del modello ottenuto permette anche di garantire la validità e l’efficienza delle leggi anti-windup per i manipolatori robotici, le cui equazioni sono il risultato dell’applicazione diretta della formulazione di Eulero-Lagrange per sistemi non conservativi. Gli argomenti trattati nella tesi sono organizzati in quattro capitoli. Nel primo capitolo viene considerato in dettaglio il problema del windup per i manipolatori robotici e vengono forniti i risultati generali per la progettazione ed il tuning dei parametri caratteristici del compensatore anti-windup. Nel capitolo due viene invece richiamta la teoria della cinematica e dinamica di un manipolatore, per spiegare come è stata implementata la procedura di calcolo automatico dei coefficienti dinamici delle equazioni di moto di un manipolatore. Il terzo capitolo costituisce una breve guida introduttiva all’uso del toolbox MATLAB SimMechanics. Lo studio delle principali caratteristiche di questo programma è fondamentale per la comprensione del modello SimMechanics del robot Siemens-Manutec r3. L’ultimo capitolo è dedicato alle simulazioni delle leggi anti-windup applicate ai modelli del robot SM r3 e al commento dei risultati forniti dal simulatore Simulink 5.0, del M AT LAB R13. Introduzione 5 Capitolo 1 Leggi anti-windup per manipolatori robotici 1.1 Definizione del problema Si considera il problema della saturazione degli attuatori per i sistemi di controllo dei manipolatori robotici rigidi. Dato un manipolatore appartenente a questa categoria, se indichiamo con q ∈ Rn il vettore delle variabili di giunto e con q̇ ∈ Rn il vettore delle corrispondenti velocità di giunto, possiamo scrivere l’equazione dinamica che descrive il moto del robot come: B(q)q̈ + C(q, q̇)q̇ + R(q)q̇ + h(q) = τp (1.1) dove B(q) è la matrice generalizzata d’inerzia, C(q, q̇) rappresenta la matrice dei termini centrifughi e di Coriolis, h(q) è il vettore delle forze gravitazionali, τ p il vettore delle forze/coppie esterne applicate ai giunti del robot. Per dimostrare la soluzione del problema in esame, sono necessarie delle assunzioni sulla regolarità delle matrici che caretterizzano l’equazione (1.1). Le seguenti assunzioni derivano dai principi classici che governano i sistemi meccanici. Assunzione 1: 1. la matrice generalizzata d’inerzia q 7→ B(q) è simmetrica e differenziabile con derivata continua, inoltre esistono dei numeri positivi λM e λm tali che λm I ≤ B(q) ≤ λM I per ogni q ∈ Rn (I è la matrice identità); 2. la funzione (q, q̇) 7→ C(q, q̇) è continua; 6 § 1.1 Definizione del problema 3. il vettore delle forze gravitazionali q 7→ h(q) è localmente Lipschitziano; 4. la funzione q 7→ R(q) è localmente Lipschitziana e definita positiva. Per un manipolatore robotico descritto dalla (1.1), per il quale valgano le Assunzioni 1, il controllore, che d’ora in poi chiameremo ’unconstrained controller’ dovrà garantire, una volta connesso in controreazione al robot senza saturazione sugli ingressi, la stabilità asintotica globale (GAS) e la stabilità esponenziale locale (LES) del sistema a ciclo chiuso. L’unconstrained controller (1.2) è un controllore PID a controreazione linearizzante, che garantisce, quando non interviene la saturazione, il desiderato comportamento a ciclo chiuso (GAS,LES), e regola lo stato nel punto richiesto dal riferimento: ẋc = q − r τp = B(q) (−Kp (q − r) − Kd q̇ − Ki xc ) (1.2) +C(q, q̇)q̇ + R(q)(q̇) + h(q) dove xc ∈ Rn è lo stato del controllore e Kp , Kd , Ki sono delle matrici quadrate (tipicamente diagonali) scelte in maniera tale che la matrice: 0 I 0 0 0 I −Kp −Kd −Ki (1.3) che descrive il sistema (lineare) a ciclo chiuso (1.1), (1.2), sia Hurwitz. Quindi, sulla base del valore fornito in ingresso, dal riferimento di posizione r ∈ R n , il controllore (1.2) è in grado di garantire la stabilità asintotica globale del punto (q, q̇) = (r, 0) quando è interconnesso al robot (1.1). La scelta del tipo di controllore non è univoca, molte sono le alternative possibili. Effettivamente, l’unica condizione che il controllore deve soddisfare, è quella di garantire, quando non interviene la saturazione, la stabilità asintotica globale e la stabilità esponenziale locale. In alternativa, quindi, potremmo scegliere un controllore PD con compensazione della gravità, particolarmente adatto alla soluzione del problema di regolazione dei processi in un punto. Tuttavia in seguito ci Capitolo 1 Leggi anti-windup per manipolatori robotici 7 § 1.1 Definizione del problema riferiremo sempre alla struttuta del controllore (1.2), perchè è quello che permette di illustrare, nel modo migliore, le proprietà locali delle leggi di compensazione anti-windup. In questo contesto, per caratterizzare le nonlinearità dell’ingresso del manipolatore (1.1), viene usata la funzione vettoriale di saturazione simmetrica decentralizzata. La funzione di saturazione sat(.) : Rn → Rn : sat(u) = [σ1 (u1 ), · · · , σn (un )]T dove: ui ≥ m i mi −mi ui ≤ −mi σi (ui ) := ui −mi < ui < mi (1.4) descrive, per ogni attuatore dei giunti del robot, il valore massimo mi della coppia/forza associato alla corrispondente ’coppia motore’/’unità di potenza’. E’ necessario che i valori massimi, mi , delle coppie/forze applicate ai giunti del manipolatore, siano sufficienti per garantire agli attuatori un’adeguata potenza, che permetta di compensare le forze gravitazionali agenti sui link in ogni configurazione finale assunta dal robot (corrispondente a qualsiasi q ∈ Rn con q̇ = 0). Formalizziamo quanto appena detto con la seguente assunzione: Assunzione 2 :Dato il vettore delle forze gravitazionali h(·) del sistema robotico (1.1), e noti i limiti di saturazione mi , i = 1, ..., n, deve essere soddisfatta la condizione: hMi := sup |h(q)| < mi , i = 1, ..., n (1.5) q∈Rn In conclusione gli effetti tipici della saturazione sul comportamento del sistema a ciclo chiuso, sono due: 1. il sistema preserva il suo comportamento originale se non vengono raggiunti i limiti di saturazione dai segnali d’ingresso; 2. perdita di prestazione e spesso anche di stabilità quando i segnali diventano abbastanza grandi da far intervenire la saturazione. Capitolo 1 Leggi anti-windup per manipolatori robotici 8 § 1.2 Soluzione anti-windup non lineare 1.2 Soluzione anti-windup non lineare r uc Unconstrained yc Controller + + Saturation Nonlinearity up Robot x v1 Anti-windup Compensator + x v2 + Figura 1.1: Schema anti-windup per un manipolatore robotico. Con riferimento allo schema in figura 1.1, la soluzione al problema introdotto nel precedente paragrafo, consiste nell’inserzione di un ’compensatore anti-windup’ (AW ), che costituisce un’estensione dell’originale legge di controllo (1.2). In accordo con la figura 1.1, denotiamo con x := (q, q̇) ∈ R2n lo stato del robot, con yc ∈ Rn la coppia/forza comandata dal controllore e con uc = x + v2 ∈ R2n l’ingresso misurabile del controllore. Ricevuti in input l’uscita del controllore, lo stato e l’ingresso del processo, il compensatore anti-windup fornisce in output due segnali v1 , v2 che vengono rispettivamente immessi in ingresso ed in uscita al controllore. Se indichiamo con xe := (qe , q̇e ) ∈ R2n lo stato del compensatore anti-windup, possiamo scrivere la sua equazione dinamica come: q̈e = B −1 (q)(sat(yc + v1 ) − C(q, q̇)q̇ − R(q)q̇ − h(q)) − B −1 (q − qe )(yc − C(q − qe , q̇ − q̇e )(q̇ − q̇e ) (1.6) − R(q − qe )(q̇ − q̇e ) − h(q − qe )) Per i due segnali d’uscita dal blocco ’anti-windup compensator ’ si ha invece: v1 = β(x, xe ) := h(q) − h(q − qe ) − Kg sat(Kg−1 qe ) − K0 q̇e v2 = −xe = −(qe , q̇e ) (1.7) dove K0 e Kg sono due matrici diagonali e definite positive che rappresentano il cosiddetto ’tuning’ dei parametri della legge anti-windup. Gli elementi, k gi , che Capitolo 1 Leggi anti-windup per manipolatori robotici 9 § 1.2 Soluzione anti-windup non lineare sono sulla diagonale della matrice Kg , devono verificare la condizione: h Mi + k gi mi < m i , i = 1, ..., n (1.8) Si può facilmente notare, che se vale la condizione (1.5) dell’Assunzione 2, è sempre possibile trovare una matrice diagonale e definita positiva, Kg , che soddisfi la (4.1). Ricapitoliamo quanto finora detto scrivendo le equazioni dell’intero schema di controllo: ẋc = q − qe − r yc = B(q − qe ) (−Kp (q − qe − r) − Kd (q̇ − q̇e ) − Ki xc ) + C(q − qe , q̇ − q̇e )(q̇ − q̇e ) + R(q − qe )(q̇ − q̇e ) + h(q − qe ) q̈e = B −1 (q)((τ + v1 ) − C(q, q̇)q̇ − R(q)q̇ − h(q)) − B −1 (q − qe )(yc − C(q − qe , q̇ − q̇e )(q̇ − q̇e ) (1.9) − R(q − qe )(q̇ − q̇e ) − h(q − qe )) τ = sat(yc + v1 ) dove v1 è dato dall’espressione (1.7). Se si sceglie di usare un controllore diverso dall”unconstrained controller ’, sarà necessario sostituire le prime due equazioni della (1.9), relative alla dinamica stessa del controllore. Per concludere e meglio formalizzare l’effetto prodotto dall’inserzione del compensatore anti-windup sullo schema di controllo, commentiamo il seguente teorema (di cui non viene riportata la dimostrazione): Teorema 1. Supponiamo che valgano le Assunzioni 1,2 e che la ’legge antiwindup’ (1.7) soddisfi la condizione (4.1). Dato un segnale di riferimento costante r, indichiamo con (xl (t), xcl (t)) la risposta del sistema a ciclo chiuso, in assenza di saturazione e con condizioni iniziali (xl (0), xcl (0)). Indichiamo poi con ul (t) la corrispondente uscita del controllore. Con queste ipotesi il sistema a ciclo chiuso (1.1), (1.9), (4.1), risultante dall’inserzione del compensaore anti-windup, è tale che: 1. se ul (t) = sat(ul (t)), ∀t ∈ R e se (x(0), xc (0), xe (0)) = (xl (0), xcl (0), 0) Capitolo 1 Leggi anti-windup per manipolatori robotici 10 § 1.3 Considerazioni sulla soluzione anti-windup non lineare allora (x(t), xc (t), xe (t) = (xl (t), xcl (t), 0)), ∀t ∈ R, vale a dire il sistema preserva il suo comportamento originale; 2. se definiamo x∗ := (r, 0), esiste un vettore x∗c ∈ Rn tale che il punto (x∗ , x∗c , 0) è sia globalmente asintoticamente stabile che localmente esponenzialmente stabile. Il Teorema 1. stabilisce due importanti proprietà. La prima deriva dalle specifiche di progetto che definiscono lo stesso compensatore: sostanzialmente,la legge di compensazione anti-windup deve preservare la risposta originale del sistema ogni volta che non vengono raggiunti i limiti di saturazione imposti agli attuatori. La seconda proprietà indica che, il sistema a ciclo chiuso completato del compensatore anti-windup, deve essere globalmente asintoticamnte (e localmente esponenzialmente) stabile, cosı̀ da eliminare gli effetti di instabilità che spesso intervengono quando vengono raggiunti i limiti di saturazione. 1.3 Considerazioni sulla soluzione anti-windup non lineare Il paragrafo precedente garantisce interessanti proprietà per il sistema a ciclo chiuso comprensivo del compensatore anti-windup, ma non fornisce alcuna indicazione utile riguardo al comportamento transitorio del sistema, quando vengono raggiunti i limiti di saturazione. In questo caso, infatti, il Teorema 1 assicura solo che la triettoria del sistema a ciclo chiuso converga al punto di equilibrio desiderato, cioè q = r, q̇ = 0. Per avere informazioni più precise sul comportamento transitorio è conveniente modificare, come segue, il segnale v1 della legge anti-windup proposta precedentemente: v1 = sat(yc ) − yc + h(q) − h(q − qe ) − Kg sat(Kg−1 Kq qe ) − Kqd (qe , q̇e )q̇e (1.10) dove Kg è una matrice diagonale i cui elementi verificano la condizione (4.1), Kq è una matrice diagonale e definita positiva, Kqd (·, ·) è una matrice diagonale di funzioni , i cui elementi diagonali kqdi (·, ·), i = 1, ..., n sono funzioni scalari localmente Capitolo 1 Leggi anti-windup per manipolatori robotici 11 § 1.4 Prestazione anti-windup Lipschitziane tali che è possibile trovare delle opportune costanti positive, k qd , per cui vale la seguente espressione: kqdi (qe , q̇e ) ≥ k qd , ∀qe , q̇e ∈ Rn , ∀i ∈ {1, ..., n} (1.11) Con le modifiche appena introdotte generalizziamo il risultato fornito dal Teorema 1. Con riferimento al sistema a ciclo chiuso che deriva dall’interconnessione tra le (1.1), (1.9) e il nuovo segnale di compensazione (1.10), possiamo scrivere: Teorema 2. Se valgono le Assunzioni 1,2 e se il segnale 1.10 verifica le condizioni 4.1 e 1.11, allora per il sistema a ciclo chiuso (1.1,1.9, 1.10), completo del compensatore anti-windup, sono ancora valide le proprietà garantite dal Teorema 1. Per meglio compredere quanto finora detto, nel prossimo paragrafo, verrà fornita una formalizzazione matematica dei vantaggi introdotti dal compensatore antiwindup e verrà descritto come scegliere in modo opportuno i parametri Kg , Kq e Kqd . 1.4 Prestazione anti-windup La qualità della risposta del sistema a ciclo chiuso, può essere misurata in base alla deviazione che la traiettoria attuale x, presenta rispetto alla traiettoria (ideale) x l , del sistema a ciclo chiuso non soggetto agli effetti della saturazione. In particolare, siamo interessati al valore assunto, in ogni istante, dall’ampiezza del segnale (x(t) − xl (t)). In queste circonstanze, il Teorema 1 ci garantisce che, quando il segnale di controllo, τl , non raggiunge i limiti di saturazione imposti, l’ampiezza del segnale (x(t) − xl (t)) è identicamente uguale a zero. Tuttavia nessuna informazione viene fornita circa il possibile comportamento transitorio del segnale (x(t) − xl (t)) di una qualsiasi altra traiettoria. D’altra parte, in base alla continuità delle traiettorie rispetto alle condizioni iniziali su un intervallo di tempo compatto, e se consideriamo la proprietà 1 (GAS) garantita dal Teorema 1, possiamo ragionevolmente aspettarci che la traiettoria del sistema non soggetto a Capitolo 1 Leggi anti-windup per manipolatori robotici 12 § 1.4 Prestazione anti-windup saturazione, corrisponda alla traiettoria, del sistema a ciclo chiuso completo del compensatore anti-windup, che presenta piccoli valori del segnale (x(t) − xl (t)). Ancora una volta, però, il Teorema 1 garantisce solo delle proprietà a regime permanente. In questi casi il prossimo risultato costituisce un buon punto di partenza per avere informazioni circa il comportamento transitorio delle altre traiettorie, e per minimizzare in qualche modo il segnale (x(t) − xl (t)): Teorema 3. A prescindere dalla scelta di v1 , dato un qualunque segnale di riferimento r(t), t ≥ 0, se indichiamo con (xl (t), xcl (t)) la risposta del sistema a ciclo chiuso non soggetto alla saturazione, a partire dalle condizioni iniziali (x l (0), xcl (0)) e se indichiamo con (x(t), xc (t), xe (t)) la risposta del sistema a ciclo chiuso (1.1), (1.9), (1.7)), a partire dalle condizioni iniziali (x(0), xc (0), xe (0)) = (xl (0), xcl (0), 0) si ha che: xe (t) = xl (t) − x(t), ∀t ≥ 0. (1.12) Dimostrazione. Si considera il sistema a ciclo chiuso (1.1), (1.9) e si opera il cambiamento di coordinate (x, xc , xe ) → (x̃, xc , xe ), dove x̃ := x − xe . Dopodiché ˙ := x̃. Dopo aver eseguito le dovute semplificazioni si ottengono si definisce (q̃, q̃) le seguenti equazioni: ˙ q̃˙ + R(q̃)q̃˙ + h(q̃) − yc ) q̃¨ = −B −1 (q̃)(C(q̃, q̃) ẋc = q̃ − r (1.13) ˙ q̃˙ + R(q̃)q̃˙ + h(q̃) yc = B(q̃)(−Kp (q̃ − r) − Kd q̃˙ − Ki xc ) + C(q̃, q̃) q̈e = B −1 (q̃ + qe )(τ − C(q̃ + qe , q̃˙ + q̇e )(q̃˙ + q̇e ) − R(q̃ + qe )(q̃˙ + q̇e ) − h(q̃ + qe )) (1.14) ˙ q̃˙ + R(q̃)q̃˙ + h(q̃) − yc ) B −1 (q̃)(C(q̃, q̃) τ = sat(yc + v1 ) Capitolo 1 Leggi anti-windup per manipolatori robotici 13 § 1.4 Prestazione anti-windup I sistemi di equazioni (1.13), (1.14) rappresentano il sistema a ciclo chiuso come l’insieme di due sottosistemi. Il primo (corrispondente alla (1.13)) di coordinate (x̃, xc ) ’guida’ il secondo (corrispondente alla (1.14)) di coordinate xe . Si può notare che la dinamica del primo sottosistema coincide con quella del sistema a ciclo chiuso (1.1), (1.2) e che dato xe (0) = 0 si ha (x̃(0), xc (0)) = (x(0), xc (0)). Di conseguenza se la dinamica e le condizioni iniziali sono le stesse, si ha (x̃(t), xc (t)) = (xl (t), xcl (t)) ∀t ≥ 0. Dunque, dalla definizione, xl (t) = x̃(t) = x(t) − xe (t), ∀t ≥ 0, segue il risultato da dimostrare. L’importanza del Teorema 3, sta nel fatto che esso chiarisce il significato della scelta del segnale v1 , rispetto alla misura dell’errore espressa mediante la variabile xe = x − x̃. Infatti, se concentriamo la nostra attenzione sul sottosistema 1.14, possiamo notare che la scelta di v1 , secondo l’espressione (1.10), è particolarmente adatta a mantenere qe piccolo, e quindi a garantire che l’effettiva traiettoria del sistema q si avvicini il più possibile all’andamento della traiettoria ’ideale’ q̃. Prima di procedere oltre, ricordiamo che per il Teorema 2, se i parametri scelti soddisfano le condizioni (4.1), (1.11), è comunque garantita la stabilità asintotica globale (ed esponenziale locale) del sottosistema descritto dalla (1.14). Quindi, d’ora in poi, concentreremo tutta l’attenzione solo sullo studio dell’efficacia delle leggi anti-windup precedentemente introdotte, senza preoccuparci della stabilità, già garantita. Cominciamo con il precisare che, con riferimento alle equazioni (1.14), il termine yc costituisce un disturbo per la dinamica qe . Il segnale yc infatti, produce spesso, specialmente nei sistemi di controllo aggressivi, degli indesiderati picchi di sovraelongazione, che vanno ad interessare la risposta transitoria del sistema. Quindi per ridurre significativamente questo disturbo, all’interno dell’equazione (1.10), è stato introdotto il termine che trasforma il disturbo yc in sat(yc ). Ora, per capire meglio, che tipo di influenza ha la scelta del segnale v1 sulla dinamica dell’errore associata al sottosistema (1.14), sostituiamo i segnali v1 e τ all’interno della prima Capitolo 1 Leggi anti-windup per manipolatori robotici 14 § 1.4 Prestazione anti-windup equazione delle (1.14). Dalla sostituzione si ottiene: q̈e = B −1 (q̃ + qe )(−Kg sat(Kg−1 Kq qe ) − Kqd (qe )q̇e ) B −1 (q̃ + qe )(sat(yc ) − C(q̃ + qe , q̃˙ + q̃˙e )(q̃˙ + q̃˙e ) (1.15) − R(q̃ + qe )(q̃˙ + q̃˙e ) − h(q̃) − q̃¨ con q̃ = q − qe . E’ interessante notare che, quando (qe , q̇e ) è piccolo e sat(yc ) = yc , per continuità, se la saturazione (sulla prima riga della (1.15)) non è attiva, la seconda riga dell’equazione (1.15) è circa zero e si ha: B(q)q̈e ≈ −Kg sat(Kg−1 Kq qe ) − Kqd (qe , q̇e )q˙e (1.16) L’equazione (1.16) descrive la dinamica del sistema a ciclo chiuso come un doppio integratore controllato da un’azione proporzionale saturata e da un’azione derivativa, i cui guadagni sono associati alla scelta dei parametri Kq e Kqd (·, ·) (per costruzione, la matrice Kqd (·, ·) è diagonale e strettamente positiva, per qualsiasi valore del suo argomento). Data una matrice K0 diagonale e definita positiva, la funzione Kqd (·, ·) sarà data dalla seguente espressione: Kqd (qe , q̇e ) := ((I − D(qe , q̇e ))γE (qe ) + D(qe , q̇e ))K0 (1.17) dove γE (qe ) è diagonale e viene chiamato guadagno equivalente associato con la saturazione dell’azione proporzionale, e soddisfa la condizione: Kg sat(Kg−1 Kq qe ) = γE (qe )Kq qe ; D(qe , q̇e ) è una matrice diagonale i cui elementi, (di,i , i = 1, ..., n), vengono scelti nel modo seguente: di,i := dove (qei , q̇ei , 1, se qei q̇ei ≥ 0 0, altrimenti (1.18) i = 1, ..., n) sono, rispettivamente, le componenti dei vettori qe , q̇e . Quindi, con riferimento all’equazione (1.17), si ha che quando qei , q̇ei hanno lo stesso segno, Kqd (qe , q̇e ) = K0 , indipendentemente dall’ampiezza dei segnali qei e q̇ei . Capitolo 1 Leggi anti-windup per manipolatori robotici 15 § 1.4 Prestazione anti-windup Mentre, se qei e q̇ei , hanno segno opposto, Kqd (qe , q̇e ) = γE (qe )K0 e il termine derivativo dell’espressione (1.16) esercita una forza/coppia frenante che viene modulata dall’ampiezza del segnale saturato all’interno del termine proporzionale. Questa modulazione permette quindi di recuperare l’azione di controllo nei casi in cui qe diventa ragionevolmente grande e l’azione di saturazione fa si che il termine proporzionale diventa troppo piccolo per ’limitare’ l’azione dovuta al termine derivativo. In conclusione, dalle equazioni (1.10), (1.17) segue che, se qe è abbastanza piccolo da rendere trascurabile il secondo termine di saturazione dell’equazione (1.10), si ha γE (qe ) = I e che l’equazione della dinamica (1.16) si trasforma nell’equazione dinamica semplificata: B(q)q̈e ≈ −Kq qe − K0 q̇e (1.19) Da ciò deriva direttamente che la matrice Kqd (·, ·) è Lipschitziana. Inoltre l’equazione (1.19) suggerisce di scegliere gli elementi diagonali delle matrici Kq e K0 in modo quasi disaccoppiato (’quasi’ per la presenza del termine B(q)), per garantire le prestazioni di ciascun giunto. Sostanzialmente si segue la stessa procedura usata per la determinazione dei guadagni di un controllore PD. Ricapitolando, la strategia consigliata per la progettazione del compensatore antiwindup è la seguente: 1. Si sceglie v1 secondo le equazioni (1.10), (1.17); 2. si determina una matrice Kg i cui elementi soddisfino la condizione (4.1) (nota che Kg < I per definizione); 3. si scelgono gli elementi delle matrici Kq e K0 cercando di garantire il miglior andamento transitorio su ciascun giunto, e seguendo una strategia di selezione simile a quella adottata per i guadagni di un controllore PD. Capitolo 1 Leggi anti-windup per manipolatori robotici 16 Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 2.1 Introduzione La dinamica di un robot tratta le formulazioni matematiche delle equazioni del moto del manipolatore. Le equazioni dinamiche del moto di un manipolatore costituiscono un sistema di equazioni matematiche che ne descrivono il comportamento dinamico. Tali equazioni sono utili per la simulazione al calcolatore del movimento del braccio e per formulare le equazioni per il controllo dello stesso. Lo scopo del controllo di un manipolatore guidato da un calcolatore è far sı̀ che la sua risposta dinamica soddisfi le prestazioni ipotizzate in fase di progetto. In generale, le prestazioni di un manipolatore dipendono direttamente dall’efficienza dell’algoritmo di controllo e del modello dinamico del manipolatore. Il modello dinamico di un robot si ottiene da note leggi fisiche. Questo conduce allo sviluppo delle equazioni dinamiche del movimento per i vari giunti articolati del manipolatore in relazione ai parametri geometrici e inerziali specifici dei link. In questo capitolo verrà quindi descritta una procedura automatica, sviluppata al calcolatore e basata sulla ’Formulazione di Eulero-Lagrange’, che fornisce quelli che vengono chiamati ’coefficienti dinamici del manipolatore’, che caratterizzano appunto le equazioni dinamiche del moto. 17 § 2.2 Formulazione di Eulero-Lagrange 2.2 Formulazione di Eulero-Lagrange Grazie all’applicazione diretta della formulazione di Eulero-Lagrange per sistemi non conservativi si possono esprimere convenientemente le equazioni di moto generali di un manipolatore. L’applicazione diretta della formulazione dinamica di Lagrange, insieme alla rappresentazione delle coordinate dei link di DenavitHartenberg, dà come risultato una formulazione algoritmica conveniente e compatta delle equazioni di moto del manipolatore. L’algoritmo viene espresso tramite operazioni matriciali e ciò semplifica sia l’analisi che l’implementazione su calcolatore. La derivazione delle equazioni dinamiche di un manipolatore a n gradi di libertà è basata sulla comprensione delle seguenti nozioni: • La matrice di trasformazione 4x4 in coordinate omogenee,i−1 Qi ,che descrive la relazione spaziale tra i sistemi di coordinate dei link i -esimo e (i−1)-esimo. Essa mette in relazione un punto stabilito sul link i, espresso in coordinate omogenee rispetto al sistema di coordinate i -esimo, col sistema di coordinate (i − 1)-esimo. • L’equazione di Eulero-Lagrange: d ∂L ∂L − = τi dt ∂ q˙i ∂qi i = 1, 2, ..., n dove: L = funzione lagrangiana = energia cinetica T - energia potenziale U T = energia cinetica totale del manipolatore U = energia potenziale totale del manipolatore qi = coordinate generalizzate del braccio q˙i = derivata prima rispetto al tempo delle coordinate generalizzate, qi τi = forza generallizata (o momento) applicata al sistema al giunto i per muovere il link i Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 18 § 2.3 Cinematica e dinamica di un manipolatore Dalla precedente equazione di Eulero-Lagrange, per prima cosa viene richiesto di scegliere un insieme di coordinate generalizzate atte a descrivere il sistema, cioè un insieme di coordinate che rappresenti lo stato di un sistema (posizione e orientamento) rispetto a un sistema di coordinate di riferimento. Per descrivere un manipolatore si possono trovare diversi insiemi di coordinate generalizzate. Comunque, dal momento che le posizioni angolari dei giunti sono rapidamente ottenibili perchè possono essere misurate con potenziometri o encoder o altri sensori, esse hanno una ovvia corrispondenza con le coordinate generalizzate. Questo, in effetti, corrisponde alle coordinate generalizzate con la variabile del giunto definita in ognuna delle matrici di trasformazione 4x4 delle coordinate dei link. Cosı̀, nel caso di giunto rotazionale, qi ≡ θi , rotazione del giunto; per un giunto prismatico, qi ≡ di , distanza percorsa dal giunto. Infine, la formulazione di Eulero-Lagrange richiede la conoscenza dell’energia potenziale e dell’energia cinetica del sistema fisico, che a sua volta richiede la cognizione della velocità di ogni giunto. Nel seguito dopo aver proposto un richiamo teorico per introdurre una formulazione algoritmica delle equazioni dinamiche, verrà spiegato come ricavare le suddette grandezze e illustrata per ciscuna, la procedura che ne permette il calcolo automatico al computer. 2.3 2.3.1 Cinematica e dinamica di un manipolatore Coordinate omogenee Con riferimento alla figura 2.1, dato un punto P nello spazio e dati due sistemi di riferimento (Oxyz )0 e (Oxyz )1 , se le coordinate del punto o1 rispetto al sistema di riferimento (Oxyz )0 sono rappresentate dal vettore d, e se q0 e q1 denotano le coordinate del punto P nei due sistemi di riferimento, allora la seguente relazione può essere verificata con semplici considerazioni geometriche di composizione di vettori: q0 = 0 R1 q1 + d Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore (2.1) 19 § 2.3 Cinematica e dinamica di un manipolatore Figura 2.1: Rappresentazione di un punto in diversi sistemi di coordinate. dove 0 R1 è la matrice di rotazione (nella spiegazione si suppone nota la forma delle matrici 3x3 di rotazione e di traslazione) del sistema di riferimento (Oxyz )1 rispetto al sistema di riferimento (Oxyz )0 . Per rappresentare in maniera più compatta il generico spostamento rigido (2.1), invece delle coordinate cartesiane [ x y z ]T si utilizzano le coordinate omogenee: [ ωx ωy ωz ω ]T , costituite non più da tre ma da quattro componenti, di cui la quarta costituisce il fattore di scala per cui le componenti x, y, z sono moltiplicate e può essere utilizzata per risalire alle coordinate cartesiane. Sulla base delle coordinate omogenee si definiscono le trasformazioni omogenee, rappresentate da matrici appartenenti allo spazio R 4x4 che consentono la rappresentazione compatta non solo di rotazioni (come avveniva per le matrici nella spazio R4x4 ) ma anche di traslazioni. La forma più generale per la trasformazione omogenea è data dalla seguente formula: ω 1 q1 R d ω 0 q0 = ω1 ω0 f s (2.2) dove R ∈ R3x3 è la matrice di rotazione, d ∈ R3 è il vettore di posizione, f ∈ R1x3 è il vettore di trasformazione prospettica e S ∈ R è il fattore di scala. Nelle applicazioni robotiche (nel nostro caso), si considera sempre f = [ 0 0 0 ] e s = 1, quindi le coordinate omogenee associate ad un punto di coordinate cartesiane [ x y z ]T saranno sempre definite come [ x y z 1 ]T (il fattore di scala e il vettore di trasformazione prospettica sono usati, ad esempio, in applicazioni di computer grafica). Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 20 § 2.3 Cinematica e dinamica di un manipolatore Sulla base della struttura delle trasformazioni omogenee descritta dall’equazione (2.2), si possono scrivere le seguenti matrici di rotazioni cos(θ) − sin(θ) 0 0 sin(θ) cos(θ) 0 0 Qz,θ := 0 0 1 0 0 0 0 1 1 0 0 0 0 cos(θ) − sin(θ) 0 Qx,θ := 0 sin(θ) cos(θ) 0 0 0 0 1 cos(θ) 0 sin(θ) 0 0 1 0 0 Qy,θ := − sin(θ) 0 cos(θ) 0 0 0 0 1 e la matrice di traslazione omogenea fondamentale 1 0 0 dx 0 1 0 dy Qtr,d := 0 0 1 dz 0 0 0 1 omogenee fondamentali : (2.3) (2.4) (2.5) (2.6) dove d = [ dx dy dz ]T costituisce un generico spostamento traslatorio. Il vantaggio delle coordinate e trasformazioni omogenee sta nel fatto che l’equazione (2.1), caratterizzante un generico spostamento rigido, può essere descritta in forma matriciale come segue, tramite la trasformazione omogenea 0 Q1 : 0 0 R d R q + d q q0 1 1 1 1 0 = = Q1 P 1 = P0 = 0 0 0 1 1 1 1 (2.7) e, analogamente a quanto accadeva per le rotazioni (descritte da matrici in R3x3 ), gli spostamenti rigidi si possono comporre, consentendola rappresentazione compatta di catene di sistemi di riferimento in relazione l’uno con l’altro. In particolare, se P0 = 0 Q1 P1 e P1 = 1 Q2 P2 , allora si può sostituire e ottenere: P 0 = 0 Q1 P 1 = 0 Q1 1 Q2 P 2 = 0 Q2 P 2 2.3.2 Link, giunti e loro parametri Un manipolatore meccanico consiste in una sequenza di segmenti rigidi chiamati link, connessi da giunti prismatici o di rotazione. Ogni coppia giunto-link, rappresenta un grado di libertà. Dunque, per un manipolatore con N gradi di libertà ci Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 21 § 2.3 Cinematica e dinamica di un manipolatore sono N coppie giunto-link con il link 0 (non considerato parte del robot) ancorato a una base di appoggio dove di norma è stabilito un sistema di coordinate inerziale; all’ultimo link è collegato un utensile. I giunti e i link sono numerati in successione partendo dalla base; cosı̀ il giunto 1 costituisce il punto di connessione fra il link 1 e la base di supporto. Ogni link è connesso al più a due altri link perchè non si formino catene chiuse. In generale, due link sono collegati fra loro con un giunto di prima specie, e di questi, solo i giunti rotazionali e prismatici sono comuni nei manipolatori. I primi sono giunti associati ad uno spostamento angolare dei link adiacenti, mentre i secondi sono associati ad uno spostamento lineare dei link adiacenti. L’asse di un giunto si definisce come l’asse di rotazione o di traslazione individuato dal movimento del giunto. Questo asse avrà due normali, una per ogni link. Si faccia riferimento alla figura 2.2. Il significato dei link, considerati in un’ot- Figura 2.2: Sistemi di coordinate dei link e loro parametri. tica cinematica, è che essi mantengono una configurazione fissa tra i loro giunti che può essere caratterizzata da due parametri ai , αi . Il parametro ai rappresenta la distanza più breve misurata lungo la normale comune tra gli assi dei giunti (cioè gli assi zi−1 e zi rispettivamente per i giunti i e i+1 ), e αi è l’angolo compreso tra gli assi dei giunti su un piano perpendicolare ad ai . Cosı̀ ai e αi possono essre chiamati, rispettivamente, lunghezza e angolo di twist del link i. Essi sono associati alla struttura del link. Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 22 § 2.3 Cinematica e dinamica di un manipolatore Dato l’asse zi , la posizione relativa dei due link adiacenti (i−1) e i è data da di , che è la distanza misurata lungo l’asse del giunto fra la normale proveniente dall’asse del giunto i e la normale che va al giunto i + 1 (ovvero, il segmento ai ). L’angolo θi del giunto è l’angolo formato dalle 2 normali, misurato su un piano ortogonale all’asse del giunto. Dunque, di e θi possono essere chiamati rispettivamente distanza e angolo di giunto, fra due link adiacenti. Essi sono associati alla posizione relativa tra i due link. Riassumento a ciascuna coppia giunto/link di un manipolatore sono associati quattro parametri: ai , αi , di , θi . Una volta stabilita una convenzione di segno per ognuno di essi, questi costituiscono un insieme sufficiente a determinare completamente la configurazione cinematica di ciascun anello della catena articolata del braccio. In base alla caratterizzazione precedente, dato un manipolatore, sulla base dei quattro parametri ai , αi , di , θi , si può compilare una tabella: dove ogni link (giunto) Link/giunto 1 2 . . . N αi α1 α2 . . . αN ai a1 a2 . . . aN θi θ1 θ2 . . . θN di d1 d2 . . . dN Tabella 2.1: Tabella dei parametri per un robot generico. corrisponde ad una riga su cui sono presenti i parametri caratteristici del link e del giunto i. Questa tabella sarà utile per il calcolo della cinematica diretta del robot, ovvero della funzione che trasforma le coordinate del sistema di effettore (o della mano) nel sistema di coordinate di base. 2.3.3 Rappresentazione di Denavit-Hartenberg Per descrivere le relazioni di rotazione e traslazione tra link adiacenti, Denavit e Hartenberg (1955) hanno proposto un metodo matriciale per stabilire sistematicamente un sistema di coordinate per ogni link di una catena articolata. La rappre- Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 23 § 2.3 Cinematica e dinamica di un manipolatore sentazione di Denavit-Hartenberg (D-H) consiste in una matrice di trasformazione omogenea i−1 Qi ∈ R4x4 che rappresenta il sistema di coordinate del link i rispetto al riferimento del link precedente (i − 1). Pertanto, attraverso trasformazioni sequenziali, l’estremità dell’effettore, espresso nell’ultimo sistema di coordinate, può essere trasformata nelle ’coordinate di base’ che costituiscono il sistema di riferimento inerziale di questo sistema dinamico. Come già accennato, il robot è individuato da un sistema di riferimento inerziale (Oxyz )0 , detto di base, da un sistema di riferimento di effettore (Oxyz )e (anche detto “della mano”) e dai sistemi di riferimento intermedi, ognuno assocciato ad un link (e ad un giunto). Per ognuno di questi N sistemi di riferimento (dove N sono i gradi di libertà della catena cinematica), la procedura di D-H, fornisce delle regole di tracciamento (che in questo contesto non verranno illustrate) in termini di: 1. posizione dell’asse zi 2. posizione del centro oi 3. posizione dell’asse xi e stabilisce una convenzione per la determinazione dei quattro parametri ai , αi , di , θi , di ciascun giunto, necessari a compilare la tabella (vedi tabella 1.1) di DenavitHartemberg. 2.3.4 Trasformazione omogenea associata ad un link Stabilito il sistema di coordinate di D-H per ogni link, si può sviluppare facilmente una matrice di trasformazione omogenea che metta in relazione il sistema di coordinate i -esimo col sistema di coordinate (i − 1)-esimo. Per ottenere la suddetta matrice, bisogna prima sovrapporre il sistema di riferimento (Oxyz )i al sistema di riferimento (Oxyz )i−1 , poi effettuare le seguenti operazioni elementari per riportare (Oxyz )i nella sua posizione originaria: 1. traslare lungo l’asse zi−1 di una lunghezza pari a di per portare l’origine oi sul punto di intersezione tra il segmento ai e l’asse zi−1 ; Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 24 § 2.3 Cinematica e dinamica di un manipolatore 2. ruotare intorno all’asse zi−1 di un angolo θi per allineare l’asse xi con il segmento ai ; 3. traslare lungo l’asse xi di una lunghezza pari ad ai per portare oi nella posizione originaria; 4. ruotare intorno all’asse xi di un angolo pari ad αi per portare l’asse zi nella posizione originaria. Le prime due trasformazioni sono riferite al sistema di riferimento (i − 1) e corrispondono dunque alla premoltiplicazione per le matrici Qtr,[0,0,di ] e Qz,θi , rispettivamente. Le ultime due trasformazioni, sono invece riferite al sistema di riferimento i e corrispondono alla postmoltiplicazione per le matrici Qtr,[ai ,0,0] e Qx,αi , rispettivamente.In sintesi la trasformazione i−1 Qi si costruisce secondo la seguente sequenza: i−1 Qi = Qz,θi Qtr,[0,0,di ] Qtr,[αi ,0,0] Qx,αi (2.8) cos(θi ) −cos(αi )sin(θi ) sin(αi )sin(θi ) ai cos(θi ) sin(θi ) cos(αi )cos(θi ) −sin(αi )cos(θi ) ai sin(θi ) i−1 Qi = 0 sin(αi ) cos(αi ) di 0 0 0 1 (2.9) Poichè la (2.9) è di valore generale, essa può essere applicata iterativamente sostituendo i dati della tabella 2.1 per ottenere in maniera immediata la matrice 0 Qe (e ≡ N ) della cinematica diretta. Dunque, il calcolo della cinematica diretta, si scompone in una procedura costituita dai seguenti passi: 1. Si analizza la struttura del manipolatore posizionando tutti i sistemi di riferimento secondo la procedura di Denavit-Hartemberg; 2. In base alla posizione dei sistemi di riferimento, si ricavano i parametri di D-H, compilando la tabella 2.1; 3. Si sostituiscono i valori della riga i -esima della tabella nella corrispettiva matrice di trasformazione i−1 Qi e si semplificano le moltiplicazioni; Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 25 § 2.3 Cinematica e dinamica di un manipolatore 4. Si moltiplicano tutte le matrici ricavate al punto precedente per ricavare la matrice finale: P 0 = 0 Qe P e = 0 Q1 1 Q2 · · · 2.3.5 N −1 Qe P e Jacobiano geometrico Si consideri un manipolatore ad N gradi di mobilità. Sia nota l’equazione cinematica diretta nella forma: 0 in cui q = q1 . . . q i Qi (q) = T 0 Ri (q) d0i (q) 0T 1 (2.10) è il vettore delle variabili di giunto. Per semplificare le cose supponiamo i = N . Al variare di q variano sia la posizione che l’orientamento dell’organo terminale del manipolatore. Obiettivo della cinematica differenziale è quello di determinare la relazione tra velocità ai giunti e velocità lineare e angolare dell’organo terminale. In altri termini, si vogliono esprimere come vettori liberi la velocità lineare d˙ e la velocità ω dell’organo terminale in funzione delle velocità delle variabili di giunto mediante relazioni del tipo: d˙ = Jp (q)q̇ (2.11) ω = Jω (q)q̇ (2.12) Nella (2.11) Jp è la matrice (3 × N ) relativa al contributo delle velocità dei giunti alla velocità lineare d˙ dell’organo terminale, mentre nella (2.12) Jω è la matrice (3 × N ) relativa al contributo delle velocità dei giunti alla velocità angolare ω dell’organo terminale. In forma compatta, i legami (2.11),(2.12) possono essere scritti come v= d˙ ω = J(q)q̇ (2.13) che rappresenta l’equazione cinematica differenziale del manipolatore. La matrice J (6 × N ) è lo Jacobiano geometrico del manipolatore, che in generale risulta funzione delle variabili di giunto. Per effettuare il calcolo dello Jacobiano geometrico è opportuno richiamare delle proprietà delle matrici di rotazione e alcuni importanti risultati di cinematica dei corpi rigidi. Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 26 § 2.3 Cinematica e dinamica di un manipolatore 2.3.6 Derivata di una matrice di rotazione L’equazione cinematica diretta di un manipolatore (2.10) descrive, se (i = N ), la posizione e l’orientamento dell’organo terminale, in funzione delle variabili di giunto, in termini di un vettore di posizione diN e di una matrice di rotazione 0 RN . Se l’obiettivo è quello di caratterizzare velocità lineare e angolare dell’organo terminale, è opportuno analizzare in primo luogo la derivata di una matrice di rotazione rispetto al tempo. Si supponga che la matrice di rotazione vari nel tempo, ovvero R = R(t). Dalla proprietà di ortogonalità di R si ha la relazione: R(t)RT (t) = I che, derivata rispetto al tempo, fornisce l’identità: Ṙ(t)RT (t) + R(t)ṘT (t) = 0 Posto: S(t) = Ṙ(t)RT (t) (2.14) la matrice (3 × 3) S risulta essere anti-simmetrica in quanto: S(t) + S T (t) = 0 (2.15) Moltiplicando da destra ambo i membri della (2.14) per R(t), si ottiene: Ṙ(t) = S(t)R(t) (2.16) che consente di esprimere la derivata temporale di R(t) in funzione della matrice stessa. La relazione (2.16), che lega la matrice di rotazione R alla sua derivata attraverso l’operatore anti-simmetrico S, ammette una interessante interpretazione fisica. Si considerino un vettore costante p0 ed il vettore p(t) = R(t)p0 . La derivata temporale di p(t) risulta: ṗ(t) = Ṙ(t)p0 Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 27 § 2.3 Cinematica e dinamica di un manipolatore che per la (2.16) può scriversi: ṗ(t) = S(t)R(t)p0 Se con il vettore ω(t) si indica la velocità angolare della terna R(t) all’istante di tempo t rispetto alla terna di riferimento, dalla meccanica è noto che: ṗ(t) = ω(t) × R(t)p0 Pertanto l’operatore matriciale S(t) descrive il prodotto vettoriale tra il vettore ω e il vettore R(t)p0 . La matrice S(t) è tale che i suoi elementi simmetrici rispetto alla diagonale princiT nella forma: pale rappresentano le componenti del vettore ω(t) = ωx ωy ωz 0 −ωz ωy 0 −ωx S = ωz (2.17) −ωy ωx 0 che giustifica la notazione S(t) = S(ω(t)). Inoltre, se R rappresenta una matrice di rotazione, si può dimostrare che vale la seguente relazione: RS(ω)RT = S(Rω) (2.18) che tornerà utile in seguito. 2.3.7 Calcolo dello Jacobiano geometrico Nota l’equazione cinematica diretta nella forma: R1,1 (q) R1,2 (q) R1,3 (q) dx (q) 0 R (q) d (q) R2,1 (q) R2,2 (q) R2,3 (q) dy (q) i 0i 0 Qi (q) = = T 0 1 R3,1 (q) R3,2 (q) R3,3 (q) dz (q) 0 0 0 1 in cui q = q1 . . . q i T (2.19) è il vettore delle variabili di giunto, il calcolo delle matrici Jp e Jω può essere cosı̀ eseguito: ∂dx (q) ∂dx (q) Jp = ∂q1 ∂dy (q) ∂q1 ∂dx (q) ∂q1 ∂q2 ∂dy (q) ∂q2 ∂dz (q) ∂q2 . . . . . . . . . ∂dx (q) ∂qi ∂dy (q) ∂qi ∂dz (q) ∂qi Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore (2.20) 28 § 2.3 Cinematica e dinamica di un manipolatore con i = 1 . . . N . Per Jω si avrà: 0 Si = 0 Ṙi 0 RiT calcolata la matrice 0 Si (ω), dalla 2.17 si ottiene il vettore ω(t) = ωx ωy ωz T della velocità angolare della terna 0 Ri (t) all’istante di tempo t. Quindi possiamo ora calcolare Jω : Jω = ∂ωx (q̇) ∂ q̇1 ∂ωy (q̇) ∂ q̇1 ∂ωz (q̇) ∂ q̇1 ∂ωx (q̇) ∂ q̇2 ∂ωy (q̇) ∂ q̇2 ∂ωz (q̇) ∂ q̇2 . . . . . . . . . ∂ωx (q̇) ∂ q̇i ∂ωy (q̇) ∂ q̇i ∂ωz (q̇) ∂ q̇i (2.21) con i = 1 . . . N e dove q̇ è il vettore delle velocità angolari dei giunti. 2.3.8 Energia cinetica di un corpo rigido tridimensionale che si muove nello spazio Figura 2.3: Posizione e orientamento di un corpo rigido Si dimostra come può essere calcolata l’energia cinetica di un corpo rigido tridimensionale (es. link di un robot) che si muove nello spazio. Con riferimento alla figura 2.3, definiamo: 1. il sistema di riferimento inerziale (Oxyz); 2. il sistema di riferimento (Oxyz)0 solidale al corpo, ed avente l’origine O 0 che coincide con il baricentro G del corpo medesimo. Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 29 § 2.3 Cinematica e dinamica di un manipolatore Identifichiamo con P = x y z T = p 1 T le coordinate omogenee del T puntoP rispetto al sistema di riferimento inerziale, e con P 0 = x0 y 0 z 0 1 = 0 T p 1 le coordinate omogenee dello stesso punto rispetto al sistema di riferimeto (Oxyz)0 . Nota l’equazione cinematica diretta nella forma: R d Q= 0 1 per la (2.7) possiamo scrivere: P = QP 0 ⇒ p = Rp0 + d (2.22) deriviamo (la 2.22), si ottiene: ṗ = Ṙp0 + d˙ = SRp0 + d˙ ⇒ ṗT = p0T RT S T + d˙T ora possiamo scrivere l’energia cinetica associata al corpo rigido come: Z Z 1 1 T p0T RT S T SRp0 + d˙T d + 2d˙T SRp0 dV T = ρ ṗ ṗdV = ρ 2 V 2 V (2.23) (2.24) la (2.24) si può scomporre nella somma di tre contributi: Z Z 1 1 1 0T T T 0 p R S SRp dV, T2 = ρ d˙T ddV, T3 = ρd˙T d + 2d˙T SRp0 dV T1 = ρ 2 V 2 V 2 (2.25) semplifichiamo i tre contributi: 1. si può dimostrare, che se O 0 ≡ G, allora T3 = 0; 2. 1 T2 = ρ 2 Z V 1 M d˙T d dV = R 2 V dv Z V 1 d˙T d dV = M d˙T d 2 (2.26) per la cinematica differenziale, d˙ = Jp q̇ e quindi: 1 1 T2 = q̇ T (M JpT Jp )q̇ = q̇ T Bt q̇ 2 2 (2.27) 3. 1 T1 = T 1 = ρ 2 Z p0T RT S T SRp0 dV (2.28) V Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 30 § 2.3 Cinematica e dinamica di un manipolatore p0T RT S T SRp0 = p0T RT S T ISRp0 = p0T RT S T RRT SRp0 per la (2.18), cioè RT S(ω)R = S(RT ω) = S(ω 0 ), si ha: p0T RT S T RRT SRp0 = p0T S T (RT ω)S(RT ω)p0 p0T S T (ω 0 )S(ω 0 )p0 = traccia(S(ω 0 )p0 p0T S T (ω)) quindi: 1 T1 = ρtraccia(S(ω 0 ) 2 Z p0 p0T dV S T (ω 0 )) V posto: J= Z p0 p0T dV S T (ω 0 )) V si può scrivere: 1 1 T1 = ρtraccia(S(ω 0 )JS T (ω 0 )) = ω 0T Iω 0 2 2 I si chiama matrice di inerzia e dipende univocamente da J secondo la relazione: Jxx Jxy Jxz J = ∗ Jyy Jyz , ∗ ∗ Jzz Jyy + Jzz −Jxy −Jxz ∗ Jxx + Jzz −Jyz (2.29) I= ∗ ∗ Jxx + Jyy Infine per la 2.12, ω = Jω q̇ possiamo scrivere: 1 1 1 T1 = ω T RIRT ω = q̇ T [JωT RIRT Jω ]q̇ = q̇ T Bω q̇ 2 2 2 2.3.9 (2.30) Energia potenziale di un manipolatore Sia U l’energia potenziale di un braccio e sia Ui l’energia potenziale di ogni suo link. Con riferimento all’equazione cinematica R1,1 (q) R1,2 (q) R2,1 (q) R2,2 (q) 0 Qi (q) = R3,1 (q) R3,2 (q) 0 0 diretta nella forma: R1,3 (q) dx (q) R2,3 (q) dy (q) R3,3 (q) dz (q) 0 1 si ha che: Ui = −Mi gdz (q) i = 1, 2, ..., N Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore (2.31) 31 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ L’energia potenziale totale del braccio può essere ottenuta sommando le energie potenziali di tutti i link: U= N X Ui (2.32) i=1 dove g è la costante gravitazione diretta lungo l’asse z ed Mi è la massa del link i-esimo. 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ La procedura per il calcolo automatico delle equazioni e dei coefficienti dinamici del manipolatore, è implementata con il software, per l’analisi simbolica e numerica, Maple 8.0 della Waterloo Maple Inc. corporation. Sulla base delle informazioni fornite dal paragrafo precedente, viene ora presentato l’algoritmo di calcolo usato per ricavare i coefficienti dinamici del robot SiemensManutec R3 . Al fine di rendere più comprensibile la lettura del codice del programma, gli step dell’algoritmo, vengono descritti uno alla volta, con il corrispondente codice: 1. Si analizza la struttura posizionando tutti i sistemi di riferimento secondo la procedura di Denavit-Hartemberg; 2. In base alla posizione dei sistemi di riferimento, si ricavono i parametri di D-H e si compila la tabella 2.1: Giunto 1 2 3 4 5 6 αi 90◦ 0 −90◦ 90◦ −90◦ 0 ai 0 0.5 0 0 0 0 θi q1 q2 q3 q4 q5 q6 di 0.4 0 0 0.73 0 0.275 gxi gyi 3. Si calcolano le coordinate del baricentro del linki , Gi = gzi gx i g y i g z i rispetto all’origine del sistema di riferimento, solidale al linki . Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore T , 32 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ Le suddette coordinate vanno a completare le informazioni fornite dalla tabella di D-H: Giunto 1 2 3 4 5 6 αi 90◦ 0 −90◦ 90◦ −90◦ 0 ai 0 0.5 0 0 0 0 θi q1 q2 q3 q4 q5 q6 di 0.4 0 0 0.73 0 0.275 gxi 0 −0.295 0 0 0 0 gyi −0.05 0 0.064 −0.41 0 0 gzi 0 −0.172 −0.034 0 0.023 −0.0625 codice maple: Procedura che data in ingresso la matrice di Denavit-Hartemberg (estesa) calcola le equazioni di Eulero-Lagrange e restituisce i coefficienti dinamici del corrispondente robot: > restart:#riavvia una sessione maple senza uscire Dichiara che q è un vettore che varia nel tempo > alias(q=q(t)); q Vettore (’di appoggio’) delle variabili di giunto > papp:=[p[1],p[2],p[3],p[4],p[5],p[6]]: Vettore (’di appoggio’) delle velocità angolari di giunto > vapp:=[v[1],v[2],v[3],v[4],v[5],v[6]]: Vettore (’di appoggio’) delle accelerazioni di giunto > aapp:=[a[1],a[2],a[3],a[4],a[5],a[6]]: > with(linalg): #carica la libreria linalg Warning, the protected names norm and trace have been redefined and unprotected Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 33 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ Tabella di Denavit-Hartemberg del manipolatore Siemens-Manutec r3 > DH:=array(1..6,1..7,[[90,0,q[1]*180/Pi,0.4,0,-0.05,0] > ,[0,0.5,q[2]*180/Pi,0,-0.295,0,-0.172], > [-90,0,q[3]*180/Pi,0,0,0.064,-0.034], > [90,0,q[4]*180/Pi,0.73,0,-0.41,0], > [-90,0,q[5]*180/Pi,0,0,0,0.023], > [0,0,q[6]*180/Pi,0.275,0,0,-0.0625]]); 180 q1 90 0 0.4 0 −0.05 0 π 180 q2 0 0.5 0 −0.295 0 −0.172 π −90 0 180 q3 0 0 0.064 −0.034 π DH := 180 q 4 90 0 0.73 0 −0.41 0 π 180 q 5 −90 0 0 0 0 0.023 π 180 q6 0 0 0.275 0 0 −0.0625 π 4. Si sostituscono i valori della riga i -esima della tabella di D-H nella corrispettiva matrice di trasformazione i−1 Qi e si semplificano le moltiplicazioni (vedi 2.8); 5. Per il calcolo dell’energia cinetica di ciascun link è neccessario conoscere la matrice di trasformazione, i−1 Q0i , che metta in relazione il sistema di riferi- mento di base con quello solidale al linki , e avente l’origine nel barcicentro del corpo, Gi . Quindi per ogni link si esegue la trasformazione: 0 0 0 0 Ri d0i I Gi Ri d0i 0 0 0 0 Qi = Qi Qi = = 0 1 0 1 0 1 (2.33) dove I è la matrice identità (3x3); codice maple: > > > Procedura per il calcolo delle matrici di trasformazione associate ad un link, e delle matrici Bw e Bt > Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 34 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > JpJwBt:=proc(DH,nrighe) local Q, QDH, QG, Qt, Qt1, Qgp, ar, tr, ar1, tr1, ai, di, a1, d1, a1i, d1i, R, Rt, Rd, S, omega, Jw, Jp, Bt, Bw, B, II, T, U, L, v, i, i1, i2, i3, i4, i5, i6, i7, j, j1, j2, k3, k4, k5, gxi, gyi, gzi; v:=array(1..nrighe,1..1,[]); #Calcolo della matrice di trasformazione Q[0,j] dalla tab.DH# for i from 1 to nrighe do ar:= convert(DH[i,1], units, degrees, radians); tr:= convert(DH[i,3], units, degrees, radians); ai:=DH[i,2]; di:=DH[i,4]; Q[i-1,i]:=array(1..4,1..4,[[cos(tr),-cos(ar)*sin(tr),sin(ar)* sin(tr),ai*cos(tr)],[sin(tr),cos(ar)*cos(tr),-sin(ar)*cos(tr) ,ai*sin(tr)],[0,sin(ar),cos(ar),di],[0,0,0,1]]); gxi:=DH[i,5]; gyi:=DH[i,6]; gzi:=DH[i,7]; Qgp[i]:=array(1..4,1..4,[[1,0,0,gxi],[0,1,0,gyi],[0,0,1,gzi], [0,0,0,1]]); end do; # Calcolo delle matrici di trasformazione Q[0,i] # Qt1[0,1]:=evalm(Q[0,1]); for j from 2 to nrighe do Qt1[0,j]:=evalm(Qt1[0,j-1]&*Q[j-1,j]); evalm(Qt1[0,j]); end do; # Calcolo delle matrici di trasformazione Q’[0,i] (Q’=Qt) # for k4 from 1 to nrighe do Qt[0,k4]:=evalm(Qt1[0,k4]&*Qgp[k4]); end do; 6. Usando le formula 2.20,2.21 si calcolano ,per ogni link del robot, Jpi e Jωi ; codice maple per il calcolo di Jpi : > > > > > > for j1 from 1 to nrighe do Jp[j1]:=array(1..3,1..nrighe,[]); for i1 from 1 to nrighe Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 35 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ > > > > > > > do Jp[j1][1,i1]:=diff(Qt[0,j1][1,4],q[i1]); Jp[j1][2,i1]:=diff(Qt[0,j1][2,4],q[i1]); Jp[j1][3,i1]:=diff(Qt[0,j1][3,4],q[i1]); end do; end do; codice maple per il calcolo di Jωi : > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > for j2 from 1 to nrighe do R[0,j2]:=submatrix(Qt[0,j2], 1..3, 1..3); Rt[0,j2]:=transpose(R[0,j2]); Rd[0,j2]:=array(1..3,1..3,[]); for i2 from 1 to 3 do for i3 from 1 to 3 do Rd[0,j2][i2,i3]:=sum(’diff(R[0,j2][i2,i3],q[k])*v[k,1]’, ’k’=1..nrighe); end do; end do; S[0,j2]:=evalm(Rd[0,j2]&*Rt[0,j2]); omega[j2]:=Vector(1..3,[]); omega[j2][1]:=S[0,j2][3,2]; omega[j2][2]:=S[0,j2][1,3]; omega[j2][3]:=S[0,j2][2,1]; Jw[j2]:=array(1..3,1..nrighe,[]); for i4 from 1 to 3 do for k5 from 1 to nrighe do Jw[j2][i4,k5]:=diff(omega[j2][i4],v[k5,1]); end do; end do; end do; 7. Noti Jpi e Jωi , sempre per ogni link, si calcolano: T Bωi = [JωTi R0i Ii R0i Jωi ], Bti = Mi JpTi Jpi (2.34) codice maple: > > > > > > > # Calcolo delle matrici Bt, Bw # for i5 from 1 to nrighe do Bt[i5]:=m[i5]*evalm(transpose(map(simplify,Jp[i5],trig)) &*map(simplify,Jp[i5],trig)); II[i5]:=array(1..3,1..3,[[Ixx[i5],0,0],[0,Iyy[i5],0], Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 36 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ > > > > > > > > > [0,0,Izz[i5]]]); Bw[i5]:=evalm(evalm(evalm(evalm(transpose(map (simplify,Jw[i5],trig)) &*map(simplify,R[0,i5],trig))&*II[i5])&* transpose(map(simplify,R[0,i5],trig)))&*map (simplify,Jw[i5],trig)); end do; semplificando e sommando tutti i contributi Bωi , Bti , si ottiene la matrice generalizzata d’inerzia B: B= N X (Bti + Bωi ) (2.35) i=1 codice maple: > > > > > > > > > > > BT[1]:=evalm(Bt[1]+Bw[1]): BT[2]:=evalm(Bt[2]+Bw[2]): BT[3]:=evalm(Bt[3]+Bw[3]): BT[4]:=evalm(Bt[4]+Bw[4]): BT[5]:=evalm(Bt[5]+Bw[5]): BT[6]:=evalm(Bt[6]+Bw[6]): B:=evalm(BT[1]+BT[2]+BT[3]+BT[4]+BT[5]+BT[6]): Bn:=array(1..6,1..6,[]); Bn := array(1..6, 1..6, []) > > > > > > > > > > > > > > > > > > > > > > > Semplifico la matrice B e assegno il risultato a Bn for l1 from 1 to 6 do Bn[1,l1]:=simplify(B[1,l1],trig); end do: for l2 from 1 to 6 do Bn[2,l1]:=simplify(B[12,l2],trig); end do: for l3 from 1 to 6 do Bn[3,l3]:=simplify(B[3,l3],trig); end do: for l4 from 1 to 6 do Bn[4,l4]:=simplify(B[4,l4],trig); end do: Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 37 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ > > > > > > > > > > > > > for l5 from 1 to 6 do Bn[5,l5]:=simplify(B[5,l5],trig); end do: for l6 from 1 to 6 do Bn[6,l6]:=simplify(B[6,l6],trig); end do: evalm(Bn): # MATRICE B(q) SEMPLIFICATA 8. Si calcola l’energia cinetica totale del manipolatore: 1 T = q̇ T B q̇ 2 (2.36) codice maple: > T:=(1/2)*evalm(evalm(evalm(transpose(v))&*B)&*v); 9. Si calcola l’energia potenziale del manipolatore: U= N X −Mi gd0z0i (2.37) i=1 codice maple: > U:=sum(’m[k2]*g*evalm(Qt[0,k2][3,4])’,’k2’=1..nrighe); 10. Note T e U si calcola la funzione lagrangiana: L=T −U (2.38) codice maple: > L:=evalm(T)-evalm(U); > evalm(L) quindi dall’equazione di Eulero-Lagrange: d ∂L ∂L − = τi dt ∂ q˙i ∂qi i = 1, 2, ..., N (2.39) si ricavano le equazioni dinamiche del moto del manipolatore, che possiamo scrivere in forma algebrica compatta come: B(q)q̈ + C(q, q̇)q̇ + R(q)q̇ + h(q) = τ Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore (2.40) 38 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ in realtà per il nostro robot, non avendo considerato le forze di attrito la 2.40 diventa: B(q)q̈ + C(q, q̇)q̇ + h(q) = τ (2.41) dove B(q) è la matrice generalizzata d’inerzia, C(q, q̇) rappresenta la matrice dei termini centrifughi e di Corilios, h(q) è il vettore delle forze gravitazionali, τ il vettore delle forze/coppie esterne applicate ai giunti del robot. codice maple: Calcolo delle equazioni dinamiche del manipolatore: > > > > for i9 from 1 to 6 do Ldq[i9]:=map(diff,L,q[i9]); end do: > for i10 from 1 to 6 do Ldv[i10]:=map(diff,L,vapp[i10]); end do: for i11 from 1 to 6 do Ldvold[i11]:=Ldv[i11]; Ldqold[i11]:=Ldq[i11]; for i12 from 1 to 6 do Ldvnew[i11]:=subs(vapp[i12]=diff(q[i12],t) ,evalm(Ldvold[i11])); Ldvold[i11]:=Ldvnew[i11]; Ldqnew[i11]:=subs(vapp[i12]=diff(q[i12],t) ,evalm(Ldqold[i11])); Ldqold[i11]:=Ldqnew[i11]; end do; end do: for i13 from 1 to 6 do Ldvt[i13]:=map(diff,Ldvnew[i13],t); end do: > Eqn:=array(1..6,[]); > > > > > > > > > > > > > > > > > > > > Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 39 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ > > > > Eqn := array(1..6, []) for i14 from 1 to 6 do Eqn[i14]:=evalm(Ldvt[i14])-evalm(Ldqnew[i14]); end do: Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 40 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ 11. Riferendoci alla forma dell’equazione 2.41 e considerando nullo il vettore τ calcoliamo i coefficienti dinamici, cioè gli elementi delle matrici B(q), C(q, q̇), h(q): (a) B(i, j): for i from 1 to N do for j from 1 to N do B(i, j) = ∂Equazionei ∂qj end do end do (b) C(i, j): for i from 1 to N do for j from 1 to N do C(i, j) = 1 ∂Equazionei 2 ∂ q̇j end do end do (c) Il vettore h(q) si ottiene valutando la 2.41 in q̈ = 0,q = 0 codice maple: > Binv:=array(1..6,1..6,[]); Binv := array(1..6, 1..6, []) Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 41 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ > for i16 from 1 to 6 do Binv[1,i16]:=(map(diff,Eqnnewb[1],aapp[i16]))[1,1]; end do: for i16 from 1 to 6 do Binv[2,i16]:=(map(diff,Eqnnewb[2],aapp[i16]))[1,1]; end do: for i16 from 1 to 6 do Binv[3,i16]:=(map(diff,Eqnnewb[3],aapp[i16]))[1,1]; end do: for i16 from 1 to 6 do Binv[4,i16]:=(map(diff,Eqnnewb[4],aapp[i16]))[1,1]; end do: for i16 from 1 to 6 do Binv[5,i16]:=(map(diff,Eqnnewb[5],aapp[i16]))[1,1]; end do: for i16 from 1 to 6 do Binv[6,i16]:=(map(diff,Eqnnewb[6],aapp[i16]))[1,1]; end do: > evalm(Binv): > ############### Calcolo della matrice C ############### > Cmatrix:=array(1..6,1..6,[]); > > > > > > > > > > > > > > > > > > > > > > > Cmatrix := array(1..6, 1..6, []) > evalm(Cmatrix); Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 42 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ Cmatrix 1, 1 Cmatrix 2, 1 Cmatrix 3, 1 Cmatrix 4, 1 Cmatrix 5, 1 Cmatrix 6, 1 Cmatrix 1, 2 Cmatrix 2, 2 Cmatrix 3, 2 Cmatrix 4, 2 Cmatrix 5, 2 Cmatrix 6, 2 Cmatrix 1, 3 Cmatrix 2, 3 Cmatrix 3, 3 Cmatrix 4, 3 Cmatrix 5, 3 Cmatrix 6, 3 Cmatrix 1, 4 Cmatrix 2, 4 Cmatrix 3, 4 Cmatrix 4, 4 Cmatrix 5, 4 Cmatrix 6, 4 Cmatrix 1, 5 Cmatrix 2, 5 Cmatrix 3, 5 Cmatrix 4, 5 Cmatrix 5, 5 Cmatrix 6, 5 Cmatrix 1, 6 Cmatrix 2, 6 Cmatrix 3, 6 Cmatrix 4, 6 Cmatrix 5, 6 Cmatrix 6, 6 > for i from 1 to 6 do for j from 1 to 6 do Cmatrix[i,j]:=(1/2)*map(diff,Eqnnewb[i],vapp[j])[1,1]; end do: end do: > ########## Calcolo del vettore h(q) ######## > h:=array(1..6,[]); > > > > > > h := array(1..6, []) > evalm(h); [h1 , h2 , h3 , h4 , h5 , h6] > > > > > h[1]:=subs(\{diff(q[1],t$2)=0,diff(q[2],t$2)=0,diff(q[3],t$2)=0, diff(q[4],t$2)=0,diff(q[5],t$2)=0,diff(q[6],t$2)=0,diff(q[1],t)=0, diff(q[2],t)=0,diff(q[3],t)=0,diff(q[4],t)=0,diff(q[5],t)=0, diff(q[6],t)=0, evalm(Eqn[1]))[1,1]; h1 := 0. > > > > > > > h[2]:=subs( \{diff(q[1],t$2)=0,diff(q[2],t$2)=0, diff(q[3],t$2)=0,diff(q[4],t$2)=0,diff(q[5],t$2)=0, diff(q[6],t$2)=0,diff(q[1],t)=0,diff(q[2],t)=0, diff(q[3],t)=0,diff(q[4],t)=0,diff(q[5],t)=0, diff(q[6],t)=0,evalm(Eqn[2]))[1,1]; Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 43 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ h2 := 0.205 m2 g cos(q2 ) + m3 g (0.034 cos(q2 ) sin(q3 ) + 0.034 sin(q2 ) cos(q3 ) + 0.5 cos(q2 )) + m4 g (−0.32 cos(q2 ) sin(q3 ) − 0.32 sin(q2 ) cos(q3 ) + 0.5 cos(q2 )) + m5 g( −0.023 (−sin(q2 ) sin(q3 ) + cos(q2 ) cos(q3 )) cos(q4 ) sin(q5 ) + 0.023 (−cos(q2 ) sin(q3 ) − sin(q2 ) cos(q3 )) cos(q5 ) − 0.73 cos(q2 ) sin(q3 ) − 0.73 sin(q2 ) cos(q3 ) + 0.5 cos(q2 )) + m6 g( −0.2125 (−sin(q2 ) sin(q3 ) + cos(q2 ) cos(q3 )) cos(q4 ) sin(q5 ) + 0.2125 (−cos(q2 ) sin(q3 ) − sin(q2 ) cos(q3 )) cos(q5 ) − 0.73 cos(q2 ) sin(q3 ) − 0.73 sin(q2 ) cos(q3 ) + 0.5 cos(q2 )) > > > > > > > h[3]:=subs( \{diff(q[1],t$2)=0,diff(q[2],t$2)=0, diff(q[3],t$2)=0,diff(q[4],t$2)=0,diff(q[5],t$2)=0, diff(q[6],t$2)=0,diff(q[1],t)=0,diff(q[2],t)=0, diff(q[3],t)=0,diff(q[4],t)=0,diff(q[5],t)=0, diff(q[6],t)=0,evalm(Eqn[3]))[1,1]; h3 := m3 g (0.034 sin(q2 ) cos(q3 ) + 0.034 cos(q2 ) sin(q3 )) + m4 g (−0.32 sin(q2 ) cos(q3 ) − 0.32 cos(q2 ) sin(q3 )) + m5 g( −0.023 (−sin(q2 ) sin(q3 ) + cos(q2 ) cos(q3 )) cos(q4 ) sin(q5 ) + 0.023 (−cos(q2 ) sin(q3 ) − sin(q2 ) cos(q3 )) cos(q5 ) − 0.73 sin(q2 ) cos(q3 ) − 0.73 cos(q2 ) sin(q3 )) + m6 g( −0.2125 (−sin(q2 ) sin(q3 ) + cos(q2 ) cos(q3 )) cos(q4 ) sin(q5 ) + 0.2125 (−cos(q2 ) sin(q3 ) − sin(q2 ) cos(q3 )) cos(q5 ) − 0.73 sin(q2 ) cos(q3 ) − 0.73 cos(q2 ) sin(q3 )) > > > > > > > h[4]:=subs(\{diff(q[1],t$2)=0,diff(q[2],t$2)=0, diff(q[3],t$2)=0,diff(q[4],t$2)=0,diff(q[5],t$2)=0, diff(q[6],t$2)=0,diff(q[1],t)=0,diff(q[2],t)=0, diff(q[3],t)=0,diff(q[4],t)=0,diff(q[5],t)=0, diff(q[6],t)=0,evalm(Eqn[4]))[1,1]; h4 := 0.023 m5 g (sin(q2 ) cos(q3 ) + cos(q2 ) sin(q3 )) sin(q4 ) sin(q5 ) + 0.2125 m6 g (sin(q2 ) cos(q3 ) + cos(q2 ) sin(q3 )) sin(q4 ) sin(q5 ) > > > > > > > h[5]:=subs(\{diff(q[1],t$2)=0,diff(q[2],t$2)=0, diff(q[3],t$2)=0,diff(q[4],t$2)=0,diff(q[5],t$2)=0 ,diff(q[6],t$2)=0,diff(q[1],t)=0,diff(q[2],t)=0, diff(q[3],t)=0,diff(q[4],t)=0,diff(q[5],t)=0, diff(q[6],t)=0,evalm(Eqn[5]))[1,1]; Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 44 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ h5 := m5 g(−0.023 (sin(q2 ) cos(q3 ) + cos(q2 ) sin(q3 )) cos(q4 ) cos(q5 ) − 0.023 (−sin(q2 ) sin(q3 ) + cos(q2 ) cos(q3 )) sin(q5 )) + m6 g( −0.2125 (sin(q2 ) cos(q3 ) + cos(q2 ) sin(q3 )) cos(q4 ) cos(q5 ) − 0.2125 (−sin(q2 ) sin(q3 ) + cos(q2 ) cos(q3 )) sin(q5 )) > > > > > > > > h[6]:=subs(\{diff(q[1],t$2)=0,diff(q[2],t$2)=0, diff(q[3],t$2)=0,diff(q[4],t$2)=0, diff(q[5],t$2)=0,diff(q[6],t$2)=0, diff(q[1],t)=0,diff(q[2],t)=0,diff(q[3],t)=0, diff(q[4],t)=0,diff(q[5],t)=0,diff(q[6],t)=0, evalm(Eqn[6]))[1,1]; h6 := 0 12. Verifica dei risultati ottenuti, cioè calcolate le matrici B(q), C(q, q̇), h(q), si verifica che sia soddisfatta l’equazione: Eqn − [B(q)q̈ + C(q, q̇)q̇ + h(q)] = 0 (2.42) dove Eqn è il vettore che contiene le N equazioni dinamiche del moto. codice maple: Verifica delle equazioni > > > > > > > > > > > > a1:=evalm(simplify(Eqnnewb[1]))[1,1]: b1:=expand(simplify(sum(’B[1,i]*aapp[i]’,’i’=1..6))): c1:=expand(simplify((sum(’Cc[1,1,i]*vapp[i]’,’i’=1..6)*vapp[1]) +(sum(’Cc[1,2,i]*vapp[i]’,’i’=1..6)*vapp[2])+(sum(’Cc[1,3,i]* vapp[i]’,’i’=1..6)*vapp[3])+(sum(’Cc[1,4,i]*vapp[i]’,’i’=1..6)* vapp[4])+(sum(’Cc[1,5,i]*vapp[i]’,’i’=1..6)*vapp[5])+ (sum(’Cc[1,6,i]*vapp[i]’,’i’=1..6)*vapp[6])) ): d1:=h[1]; d1 := 0. > r1:=simplify(a1-b1-c1-d1); r1 := 0 > > > > > > > a2:=evalm(simplify(Eqnnewb[2]))[1,1]: b2:=expand(simplify(sum(’B[2,i]*aapp[i]’,’i’=1..6))): c2:=expand(simplify((sum(’Cc[2,1,i]*vapp[i]’,’i’=1..6)*vapp[1]) +(sum(’Cc[2,2,i]*vapp[i]’,’i’=1..6)*vapp[2])+(sum(’Cc[2,3,i]* Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 45 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ > > > > > vapp[i]’,’i’=1..6)*vapp[3])+(sum(’Cc[2,4,i]*vapp[i]’,’i’=1..6)* vapp[4])+(sum(’Cc[2,5,i]*vapp[i]’,’i’=1..6)*vapp[5])+ (sum(’Cc[2,6,i]*vapp[i]’,’i’=1..6)*vapp[6])) ): > r2:=simplify(a2-b2-c2-d2); d2:=h[2]: r2 := 0. > > > > > > > > > > > > > > a3:=evalm(simplify(Eqnnewb[3]))[1,1]: b3:=expand(simplify(sum(’B[3,i]*aapp[i]’,’i’=1..6))): c3:=expand(simplify((sum(’Cc[3,1,i]*vapp[i]’,’i’=1..6)*vapp[1])+ (sum(’Cc[3,2,i]*vapp[i]’,’i’=1..6)*vapp[2])+(sum(’Cc[3,3,i]* vapp[i]’,’i’=1..6)*vapp[3])+(sum(’Cc[3,4,i]*vapp[i]’,’i’=1..6)* vapp[4])+(sum(’Cc[3,5,i]*vapp[i]’,’i’=1..6)*vapp[5])+ (sum(’Cc[3,6,i]*vapp[i]’,’i’=1..6)*vapp[6])) ): d3:=h[3]: r3:=simplify(a3-b3-c3-d3); r3 := 0. > > > > > > > > > > > > > > a4:=evalm(simplify(Eqnnewb[4]))[1,1]: b4:=expand(simplify(sum(’B[4,i]*aapp[i]’,’i’=1..6))): c4:=expand(simplify((sum(’Cc[4,1,i]*vapp[i]’,’i’=1..6)*vapp[1])+ (sum(’Cc[4,2,i]*vapp[i]’,’i’=1..6)*vapp[2])+(sum(’Cc[4,3,i]* vapp[i]’,’i’=1..6)*vapp[3])+(sum(’Cc[4,4,i]*vapp[i]’,’i’=1..6)* vapp[4])+(sum(’Cc[4,5,i]*vapp[i]’,’i’=1..6)*vapp[5])+ (sum(’Cc[4,6,i]*vapp[i]’,’i’=1..6)*vapp[6])) ): d4:=h[4]: r4:=simplify(a4-b4-c4-d4); r4 := 0. > > > > > > > > > > > > a5:=evalm(simplify(Eqnnewb[5]))[1,1]: b5:=expand(simplify(sum(’B[5,i]*aapp[i]’,’i’=1..6))): c5:=expand(simplify((sum(’Cc[5,1,i]*vapp[i]’,’i’=1..6)*vapp[1])+ (sum(’Cc[5,2,i]*vapp[i]’,’i’=1..6)*vapp[2])+(sum(’Cc[5,3,i]* vapp[i]’,’i’=1..6)*vapp[3])+(sum(’Cc[5,4,i]*vapp[i]’,’i’=1..6)* vapp[4])+(sum(’Cc[5,5,i]*vapp[i]’,’i’=1..6)*vapp[5])+ (sum(’Cc[5,6,i]*vapp[i]’,’i’=1..6)*vapp[6])) ): d5:=h[5]: Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 46 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ > > r5:=simplify(a5-b5-c5-d5); r5 := 0. > > > > > > > > > > > > > > a6:=evalm(simplify(Eqnnewb[6]))[1,1]: b6:=expand(simplify(sum(’B[6,i]*aapp[i]’,’i’=1..6))): c6:=expand(simplify((sum(’Cc[6,1,i]*vapp[i]’,’i’=1..6)*vapp[1])+ (sum(’Cc[6,2,i]*vapp[i]’,’i’=1..6)*vapp[2])+(sum(’Cc[6,3,i]* vapp[i]’,’i’=1..6)*vapp[3])+(sum(’Cc[6,4,i]*vapp[i]’,’i’=1..6)* vapp[4])+(sum(’Cc[6,5,i]*vapp[i]’,’i’=1..6)*vapp[5])+ (sum(’Cc[6,6,i]*vapp[i]’,’i’=1..6)*vapp[6])) ): d6:=h[6]: r6:=simplify(a6-b6-c6-d6); r6 := 0 13. Scrittura del file manutecdyn.m che rappresenta il codice M atlab per il blocco S-function robotdyn, che riproduce la dinamica del robot, e si trova all’interno dello schema simulink dove vengono implementate le tecniche anti-windup proposte nel capitolo 1. File manutecdyn.m > > > > > > > > > > > > > > > > > > > > fd := fopen("manutecdyn5.m", WRITE): fprintf(fd, "\%cFunzione per il calcolo delle matrici B,C,h\\n\\n",37): fprintf(fd, "function [Bout,Cout,hout] = manutecdyn5(q,dq) \\n\\n"): fprintf(fd, "m=[0, 56.5, 26.4, 28.7, 5.2, 2.4063];\\n"): fprintf(fd, "Ixx=[0,0.64,0.413,1.67,1.53,0.018125*2.4063/12]; \\n"): fprintf(fd,"Iyy=[1.16,2.73,0.279,0.081,1.25,0.018125*2.4063/12] ;\\n"): fprintf(fd, "Izz=[0,2.58,0.245,1.67,0.81,0.0050*2.4063/12]; \\n"): fprintf(fd, "g=9.81;\\n\\n"): for i from 1 to 6 do fprintf(fd, "cq\%d=cos(q(\%d));\\nsq\%d=sin(q(\%d)); \\n",i,i,i,i): od: Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 47 § 2.4 Procedura e per il calcolo automatico dei ’coefficienti dinamici’ > > > > > > > > > > > > > > > > > > > > > > > > > fprintf(fd, for i1 from for i2 from fprintf(fd, od: fprintf(fd, od: fprintf(fd, "\\n\\n\\n"): 1 to 6 do 1 to 6 do "B(\%d,\%d) = \%a;\\n",i1,i2,Bnew[i1,i2]): for i1 from for i2 from fprintf(fd, od: fprintf(fd, od: fprintf(fd, 1 to 6 do 1 to 6 do "C(\%d,\%d) = \%a;\\n",i1,i2,Cnew[i1,i2]): "\\n"): "\\nBout=B;\\n\\n"): "\\n"): "\\nCout=C;\\n\\n"): for i1 from 1 to 6 do fprintf(fd, "h(\%d) = \%a;\\n",i1,hnew[i1]): od: fprintf(fd, "\\nhout=[h(\%d);h(\%d);h(\%d);h(\%d);h(\%d);h(\%d)]; \\n\\n",1,2,3,4,5,6): fclose(fd): File manutech.m > > > > > > > > > > > > > > > > > > > fd := fopen("manutech5.m", WRITE): fprintf(fd, "\%cFunzione per il calcolo del vettore h\\n\\n",37): fprintf(fd, "function [hout] = manutech5(q,dq)\\n\\n"): fprintf(fd, "m=[0, 56.5, 26.4, 28.7, 5.2, 2.4063];\\n"): fprintf(fd, "Ixx=[0,0.64,0.413,1.67,1.53,0.018125*2.4063/12];\\n"): fprintf(fd, "Iyy=[1.16,2.73,0.279,0.081,1.25,0.018125*2.4063/12];\\n"): fprintf(fd, "Izz=[0,2.58,0.245,1.67,0.81,0.0050*2.4063/12]; \\n"): fprintf(fd, "g=9.81;\\n\\n"): for i from 1 to 6 do fprintf(fd, "cq\%d=cos(q(\%d));\\nsq\%d=sin(q(\%d));\\n",i,i,i,i): od: fprintf(fd, "\\n\\n"): for i1 from 1 to 6 do fprintf(fd, "h(\%d) =\%a;\\n",i1,hnew[i1]); od: fprintf(fd, "\\nhout=[h(\%d);h(\%d);h(\%d);h(\%d);h(\%d); h(\%d)];\\n\\n",1,2,3,4,5,6): fclose(fd): Capitolo 2 Calcolo delle equazioni dinamiche del moto di un manipolatore 48 Capitolo 3 SimMechanics 3.1 Introduzione Questo capitolo costituisce una breve guida introduttiva all’uso del toolbox MATLAB, SimMechanics. Più precisamente, vengono fornite solo le informazioni relative agli elementi necessari ed essenziali per analizzare il comportamento di un particolare modello meccanico. Il modello in questione è quello del robot industriale Siemens-Manutec r3, a cui si è fatto riferimento per verificare la correttezza del modello semplificato, descritto dai coefficienti dinamici, calcolati con la procedura automatica proposta nel capitolo 2. Dopo aver spiegato che cos’è il SimMechanics, e quali sono i passi essenziali per la realizzazione di un sistema, vedremo in dettaglio come è strutturato il programma, quali sono le sue librerie e che tipo di blocchi contengono. In particolare, lo studio dei blocchi sarà fondamentale per capire come è stato realizzato e come funziona il modello SimMechanics del nostro manipolatore. 3.2 Che cos’è SimMechanics SimMechanics è un toolbox MATLAB per la progettazione e la simulazione dei sistemi meccanici. I sistemi meccanici considerati, sono costituiti da corpi rigidi connessi mediante giunti e rispettano le leggi classiche della dinamica Newtoniana. Il SimMechanics è in grado di simulare i movimenti rotazionali e traslazionali di un corpo rigido nello spazio. Per semplificare la modellazione e lo studio dei sistemi, il 49 § 3.3 Creare un modello SimMechanics programma fornisce all’utente numerosi menù di dialogo, che permettono, ad esempio, di specificare le caratteristiche geometriche e fisiche del corpo, oppure rilevare facilmente grandezze come posizione, velocità ed accelerazione. Inoltre SimMechanics si intengra bene con l’ambiente Simulink del MATLAB, dato che come in Simulink la rappresentazione dei sistemi avviene sempre mediante gli schemi a blocchi. Infine, questo toolbox MATLAB consente la visualizzazione in tempo reale e in tre dimensioni del moto del meccanismo simulato avvalendosi degli ambienti grafici: • M AT LAB Handle Graphicsr windows; • Virtual world rendered in a virtual reality viewer. 3.3 Creare un modello SimMechanics Viene di seguito descritta la procedura di base per la creazione di un modello SimMechanics. Questo tipo di procedura risulta valida per meccanismi sia semplici che complessi. In ogni caso la realizzazione di modelli più complessi potrà richiedere solo l’uso di alcuni step aggiuntivi. Procedura per la creazione di un modello SimMechanics: 1. Scelta dei Ground, Body e Joint blocks. Dalle librerie Bodies e Joints selezioniamo e trasciniamo nella finestra Simulink i blocchi necessari per rappresentare il meccanismo. Attenzione, è necessario includere almeno un Ground Block all’interno del nostro schema. In particolare: • I ground blocks sono degli speciali Body blocks e rappresentano un punto di supporto immobile nello spazio inerziale; • i Body blocks rappresentano i corpi rigidi; • i Joint blocks permettono il movimento relativo tra i corpi ai quali sono connessi. Capitolo 3 SimMechanics 50 § 3.3 Creare un modello SimMechanics 2. Posizionamento e connessione dei blocchi. Posizioniamo i giunti e i corpi rigidi nelle loro posizioni relative per poi conneterli nel giusto ordine. Il risultato è una sequenza del tipo: Ground − Joints − Body − Joints − Body − ... − Body nella quale ci sia almeno un Ground block e non ci sia mai un giunto (Joint) connesso a più di due corpi (Body). 3. Configurazione dei Body blocks. Cliccando su ciascun Body block, apriamo la relativa finestra di dialogo in cui impostare massa e momento di inerzia del corpo, posizione e orientamento dei sistemi di riferimento (CSs), solidali al corpo, rispetto al sistema di riferimento inerziale (W orld CS). Non bisogna dimenticare di specificare, sempre rispetto al sistema di riferimento (W orld CS), le coordinate e l’orientamento del Ground point. 4. Configurazione dei Joint blocks. Nella finestra di dialogo del Joint block vanno specificati gli assi di traslazione e di rotazione. In alternativa si può scegliere direttamente il tipo di giunto: rotoidale, sferico, prismatico... 5. Scelta, connessione e configurazione dei Constraint & Driver blocks necessari per limitare o aumentare i gradi di libertà relativi tra i corpi. 6. Scelta, connessione e configurazione degli Actuator and Sensor blocks. Dalla libreria Sensors & Actuators, scegliamo gli attuatori e i sensori necessari, rispettivamente, per imporre e misurare il moto tra i corpi. 7. Creazione di un sottosistema. Il risultato degli step 1 − 6 è un sistema Simulink realizzato con il toolbox SimMechanics. In realtà questo sistema può essere contenuto in un blocco subsystem e funzionare quindi come un sottosistema per un normale modello Simulink più complesso. Capitolo 3 SimMechanics 51 § 3.4 Librerie 3.4 Librerie I blocchi SimMechanics sono organizzati per categorie all’interno di apposite librerie. Per visualizzarle è sufficiente digitare, nella finestra di comando del MATLAB, il comando mechlib. Il risultato è quello che vediamo nella figura (3.1), dove vengono mostrate tutte le librerie disponibili: Figura 3.1: Librerie SimMechanics. Bodies Library: contiene i blocchi per la rappresentazione dei corpi rigidi e dei ’ground points’. Joints Library: contiene i blocchi per la rappresentazione dei gradi di libertà (DoFs) di moto tra i corpi. Constraints & Drivers Library: contiene i blocchi per limitare o aumentare i gradi di libertà relativi tra i corpi. Sensors & Actuators Library: contiene i blocchi per l’attuazione e la misurazione del moto. Utilities Library: Contiene dei blocchi addizionali utili per la modellazione e la simulazione dei meccanismi. Demos Library Contiene dei modelli dimostrativi realizzati con il SimMechanics. Capitolo 3 SimMechanics 52 § 3.5 Blocchi 3.5 Blocchi In questa sezione verranno introdotti i blocchi necessari per lo studio e l’analisi del modello relativo al manipolatore Siemens-Manutec r3. 3.5.1 Body Figura 3.2: Body block. Libreria: Bodies Descrizione: Il Body block in figura 3.2 serve per rappresentare un corpo rigido mediante i seguenti parametri: 1. Massa e tensore d’inerzia; 2. Coordinate del centro di gravità (CG); 3. Un certo numero di sistemi di riferimento (CSs), necessari per individuare la posizione e l’orientamento del corpo nello spazio. Con riferimento alla figura 3.3, vediamo che la finestra di dialogo, del blocco Body, è divisa in due aree. Nella prima area ci sono i campi per la massa ed il tensore d’inerzia. Nella seconda invece sono presenti degli appositi spazi in cui vanno inserite le coordinate dei sistemi di riferimento, (CSs), solidali al corpo rigido. Inserire i valori è molto semplice. La sintassi è quella classica del MATLAB, e le unità di misura, per le grandezze da indicare, si trovano già all’interno dei menù 0 U nits0 . Capitolo 3 SimMechanics 53 § 3.5 Blocchi Dialog Box: Figura 3.3: Body’s dialog box. Capitolo 3 SimMechanics 54 § 3.5 Blocchi 3.5.2 Ground Figura 3.4: Ground block. Libreria: Bodies Descrizione: Il Ground block rappresenta un punto immobile rispetto al sistema di riferimento inerziale SimMechanics, detto W orld CS. Come si può notare in figura 3.5 gli unici dati richiesti per questo oggetto, dato che è un punto, sono proprio le sue coordinate. Dialog Box: Figura 3.5: Ground’s dialog box. Capitolo 3 SimMechanics 55 § 3.5 Blocchi 3.5.3 Revolute Figura 3.6: Revolute block. Libreria: Joints Descrizione: Il Revolute block rappresenta un giunto rotazionale. Quindi esprime il solo grado di libertà di rotazione intorno ad uno specifico asse compreso tra due corpi. Il blocco si connette al link precedente e a quello successivo mediante le due porte B (Base) ed F (F ollower) visibili in figura 3.6. Al Joint block, si possono aggiungere anche i blocchi sensori ed attuatori, necessari per misurare ed azionare il movimento (vedi figura 3.7). Il numero di sensori desiderati viene indicato nell’apposito spazio della finestra di dialogo mostrata in figura 3.8. Figura 3.7: Joint block a cui sono connessi sensori ed attuatori. Capitolo 3 SimMechanics 56 § 3.5 Blocchi Dialog Box: Figura 3.8: Revolute’s dialog box. Capitolo 3 SimMechanics 57 § 3.5 Blocchi 3.5.4 Joint Actuator Figura 3.9: Joint Actuator block. Libreria: Sensor & Actuators Descrizione: Il Joint Actuator block permette di attuare il moto al giunto a cui è connesso, mediante uno dei seguenti segnali (vedi figura 3.10): • Forza per imprimere un movimento traslazionale ai giunti prismatici; • Coppia per imprimere un movimento rotazionale ai giunto rotoidali; • Movimento traslazionale per giunto prismatico, espresso in termini di posizione, velocità ed accelerazione lineare; • Movimento rotazionale per giunto rotoidale, espresso in termini di posizione, velocità ed accelerazione angolare. Le forze, le coppie e i movimenti rotazionali/trazionali sono funzioni del tempo specificate tramite i segnali d’ingresso Simulink. E’ importante notare che anche i segnali di controreazione forniti dai Joint Sensor block, costituiscono un possibile segnale in grado di azionare il movimento del giunto. Capitolo 3 SimMechanics 58 § 3.5 Blocchi Dialog Box: Figura 3.10: Actuator’s dialog box. Capitolo 3 SimMechanics 59 § 3.5 Blocchi 3.5.5 Joint Sensor Figura 3.11: Joint Sensor block. Libreria: Sensor & Actuators Descrizione: Il Joint Sensor block consente di misurare il movimento e la coppia/forza applicate al giunto di un meccanismo. A seconda del tipo di giunto a cui è connesso, il Sensor block permette di rilevare uno dei seguenti tipi di movimento (vedi fig 3.12): • Movimento traslazionale di un giunto prismatico, in termini di posizione, velocità ed accelerazione lineare; • Movimento rotazionale di un giunto rotoidale, in termini di posizione, velocità ed accelerazione angolare; • Movimento sferico di un giunto sferico, in termini di quaternione e di derivata prima e seconda del quaternione. L’output del Joint Sensor block è un set di segnali Simulink, che possono essere multiplati su un’unica uscita, che collegata al blocco Simulink, Scope, mostra a video l’andamento della posizione, velocità ed accelerazione rilevate sul giunto. Capitolo 3 SimMechanics 60 § 3.5 Blocchi Dialog Box: Figura 3.12: Sensor’s dialog box. Capitolo 3 SimMechanics 61 § 3.5 Blocchi 3.5.6 Joint Initial Condition Actuator Figura 3.13: Joint Initial Condition Actuator block. Libreria: Sensor & Actuators Descrizione: Il Joint Initial Condition Actuator block serve per fissare i valori della posizione e della velocità iniziale di un giunto, necessari per la correttezza della simulazione. A seconda del tipo di giunto a cui è connesso, il blocco modifica automaticamente le unità di misura relative alle grandezze da specificare (vedi ad esempio la figura 3.14 relativa ad un giunto rotoidale). Dialog Box: Figura 3.14: IC’s dialog box. Capitolo 3 SimMechanics 62 § 3.5 Blocchi 3.5.7 Continuous Angle Figura 3.15: Continuous Angle block. Libreria: Utilities Descrizione: Il Continuous Angle block converte una misura angolare compresa nell’intervallo (−180◦ , +180◦ ] gradi o (−π, +π] radianti, in una variabile angolare, funzione del tempo, continua e non più contenuta in un intervallo. In particolare, il blocco riceve in input posizione e velocità angolare (vedi figura 3.16), e fornisce in output il segnale di posizione angolare, continuo e non limitato. Dialog Box: Figura 3.16: Continuos Angle’s dialog box. Capitolo 3 SimMechanics 63 § 3.6 Modello SimMechanics del robot Siemens-Manutec r3 3.6 Modello SimMechanics del robot SiemensManutec r3 Il file dimostrativo mech robot.mdl del SimMechanics, contiene il modello del robot Siemens-Manutec r3. Si tratta di un modello dinamico molto dettagliato, in cui sono inclusi tutti gli effetti fisici necessari per avere un sistema che sia quanto più possibile fedele alla realtà. Per quanto riguarda i parametri del manipolatore, si fa riferimento alla guida ’The Manutec r3 Benchmark Models for Dynamic Simulation of Robots’, che si trova on-line sul sito internet www.citeseer.com. Con riferimento alla figura 3.17, che mostra un’immagine del robot, cominciamo a descrivere lo schema a blocchi del manipolatore r3. In SimMechanics, un sistema Figura 3.17: Robot Siemens-Manutec r3. meccanico complesso, viene suddiviso in più sottosistemi elementari. In particolare, quindi, aprendo la maschera in figura 3.17, che viene mostrata a video appena lanciato il file mech robot.mdl, si può accedere (con un doppio clic del tasto sinistro del mouse) alla sottomaschera mech robot\robot e a tutti i successivi sottosistemi che costituiscono il manipolatore. La sottomaschera mech robot\robot in figura 3.18 mostra il link di base (link 0) e gli altri sei link del robot, connessi tra loro Capitolo 3 SimMechanics 64 § 3.6 Modello SimMechanics del robot Siemens-Manutec r3 Figura 3.18: Link del robot SMr3. a formare la struttura del manipolatore. Di nuovo, ad ogni link è associata una maschera, un blocco che riporta l’immagine del link stesso, e che ha un ingresso ed un’uscita che lo connettono rispettivamente, al link precedente e a quello successivo. In dettaglio ciascun blocco link è costituito (vedi figura 3.19) da: 1. Un blocco acceleration che contiene l’accelerazione desiserata per il giunto, che verrà successimente derivata due volte per ottenere, rispettivamente, la velocità e la posizione desiderata del giunto; 2. un blocco BASE che permette il collegamento con il link precedente; 3. un blocco FOLLOWER che permette il collegamento al link successivo; 4. un blocco BODY in cui sono specificate le caratteristiche geometrice e l’inerzia del link; Capitolo 3 SimMechanics 65 § 3.6 Modello SimMechanics del robot Siemens-Manutec r3 5. un blocco DRIVE che contiene la parte relativa al motore e al controllore del giunto. Figura 3.19: Blocco link. Il blocco DRIVE in realtà è ancora un sottosistema. Inoltre i DRIVE block dei link 4,5,6 contengono uno schema a blocchi diverso da quello relativo ai link 1,2,3. Tuttavia, come vedremo, le differenze non sono poi cosı̀ notevoli. Con riferimento alla figura 3.20, analizziamo il sottosistema DRIVE relativo ai link 1,2,3. Come possiamo vedere, lo schema a blocchi di figura 3.20 è costituito da: 1. Un segnale di ingresso, acceleration, che viene derivato due volte dai blocchi integratori, (1/s), per ottenere velocità ed accelerazione angolare di riferimento; 2. Un blocco subsystem, controller, che implementa la funzione di trasferimento del controllore del motore; 3. Un blocco subsystem, motor circuity, relativo al motore elettrico montato sul giunto del robot; 4. Un blocco subsystem, Coulomb friction, che modella le nonlinearità del sistema; Capitolo 3 SimMechanics 66 § 3.6 Modello SimMechanics del robot Siemens-Manutec r3 Figura 3.20: Blocco DRIVE per i link 1,2,3. 5. Due blocchi Revolute, uno per considerare l’inerzia del link, l’altro per descriverne il moto rotazionale; 6. Due blocchi Continuous angle; 7. Un blocco Joint Actuator, connesso al blocco Revolute, per imprimere la coppia desiderata sul giunto; 8. Due blocchi Simulink, Gain, in sono memorizzate alcune costanti caratteristiche del giunto. All’interno del blocco Continuous angle, contrassegnato con un asterisco in figura 3.20, si trovano due blocchi Simulink, Goto, ed un blocco Joint Sensor (vedi figura 3.21). I Goto blocks inviano i due segnali di posizione e velocità angolare, rilevati sul giunto dal Joint Sensor, ai blocchi di tipo From, Body e rate, contenuti nei blocchi angular position sm ed angular rate sm mostrati in figura 3.19. Con riferimento alla figura 3.22, analizziamo ora lo schema DRIVE dei link 4,5,6, che risulta costiutito dai seguenti elementi: 1. Un segnale di ingresso, acceleration, che viene derivato due volte dai blocchi Capitolo 3 SimMechanics 67 § 3.6 Modello SimMechanics del robot Siemens-Manutec r3 Figura 3.21: Continuous Angle block *. Figura 3.22: Blocco DRIVE per i link 4,5,6. integratori, (1/s), per ottenere velocità ed accelerazione angolare di riferimento; 2. Un blocco subsystem, controller, che implementa la funzione di trasferimento del controllore del motore; 3. Un blocco subsystem, motor circuity, relativo al motore elettrico montato sul giunto del robot; 4. Un blocco subsystem, Coulomb friction, che modella le nonlinearità del sistema; 5. Un blocco subsystem, ideal gear, contenente i blocchi Revolute, Joint Ac- Capitolo 3 SimMechanics 68 § 3.6 Modello SimMechanics del robot Siemens-Manutec r3 tuator, Joint Sensor e Continuous angle necessari per azionare e rilevare il movimento del link. Come nel caso dei link 1,2,3, il Continuous angle block, contenuto nel blocco ideal gear, fornisce i valori istantanei di posizione e velocità angolare rilevati sul giunto dal Joint Sensor block. I suddetti segnali di posizione e velocità angolare, forniti dallo schema di ciascun link, sono proprio quelli che permettono di confrontare e verificare la correttezza del modello semplificato del robot ottenuto con la procedura suggerita nel Capitolo 2. In conclusione, il SimMechanics consente di riprodurre in modo dettagliato lo schema di controllo del robot SMr3 mostrato in figura 3.23, e di simulare e visualizzare in tempo reale il movimento, desiderato, compiuto dal manipolatore (vedi figura 3.24). Per visualizzare il robot è sufficiente impostare, prima di lanciare Figura 3.23: Schema di controllo del manipolatore. la simulazione, l’ambiente grafico desiderato all’interno del Dialog Box, Mechanical enviroment, a cui si accede dal menù Simulation della finestra di lavoro Simulink. Capitolo 3 SimMechanics 69 § 3.6 Modello SimMechanics del robot Siemens-Manutec r3 Click On Object To Display Information 1 0.8 0.6 Y−axis 0.4 0.2 0 −0.2 −0.4 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 X−axis Figura 3.24: MATLAB Graphics. Capitolo 3 SimMechanics 70 Capitolo 4 Simulazioni 4.1 Introduzione In questo capitolo si riportano i risultati forniti dalle simulazioni eseguite con il toolbox Simulink 5.0 del M AT LAB R13. Lo studio dei grafici forniti dagli schemi di simulazione è molto importante perché costituisce una verifica diretta della validità e dell’efficienza delle leggi di compensazione, soluzioni del problema “windup per manipolatori robotici”, oggetto di questo lavoro. Verrà presentata per prima la simulazione relativa alla verifica della validità del modello semplificato, del robot Siemens-Manutec r3, descritto mediante i coefficienti dinamici forniti dalla procedura di calcolo automatico introdotta nel capitolo 2. Seguiranno le simulazioni effettuate sul modello semplificato del robot, in cui vengono implementate le leggi anti-windup descritte nel capitolo 1. Le leggi simulate sono quella relativa alla soluzione non lineare discussa nel paragrafo §1.2, e quella relativa alla soluzione non lineare generalizzata in cui viene modificato il segnale di compensazione v1 descritta nel §1.3. 4.2 Congruenza dei modelli del robot Verifichiamo la corrispondenza tra i due modelli del robot Siemens-Manutec r3 : quello contenuto nel file dimostrativo mech robot.mdl, e quello ottenuto tramite la procedura M aple di calcolo automatico dei coefficienti dinamici. Per effettuare questa verifica, il modello dettagliato SimMechanics è stato leggermente semplifica- 71 § 4.2 Congruenza dei modelli del robot to, cioè sono stati rimossi i blocchi che implementavano le dinamiche degli attuatori e dei sensori. Le figure 4.1, 4.2 mostrano gli schemi a blocchi semplificati, relativi rispettivamente ai link 1, 2, 3 ed ai link 4, 5, 6. Come si può facilmente vedere, Figura 4.1: Blocco DRIVE semplificato per i link 1,2,3. Figura 4.2: Blocco DRIVE semplificato per i link 4,5,6. la parte restante all’interno di ciascuno schema è quella relativa solo alla dinamica e alla rilevazione del moto del robot. In questo modo è possibile agire su ciascun giunto con un segnale di coppia τi e rilevare mediante i Joint Sensor block, contenuti all’interno dei blocchi continuos angle ed ideal gear, i segnali di posizione e velocità angolare necessari per il confronto. Nella figura 4.3 è riportato lo schema a blocchi che consente di eseguire il matching dei due robot. Lo schema è costituito da: 1. un blocco angular position ref. che fornisce il valore desiderato per la variabile di posizione angolare del giunto; 2. due blocchi unconstrained che ricevono in input il segnale fornito dal blocco angular position ref. e forniscono in output i segnali di controllo (cont), di Capitolo 4 Simulazioni 72 § 4.2 Congruenza dei modelli del robot Figura 4.3: Schema a ciclo chiuso per il matching dei due modelli. posizione (pos) e velocità angolare (rate) relativi al modello SimMechanics semplificato e al modello fornito dalla procedura M aple; 3. un blocco position che permette di visualizzare l’andamento dei segnali di posizione (pos) forniti dai blocchi unconstrained ; 4. un blocco angular rate che permette di visualizzare l’andamento dei segnali di velocità angolare (rate) forniti dai blocchi unconstrained ; 5. un blocco controller signal che consente di visualizzare l’andamento dei segnali di controllo. I blocchi unconstrained in realtà rappresentano due sottosistemi che realizzano lo schema di controllo a ciclo chiuso relativo al modello considerato del robot SiemensManutec r3. Nelle figure 4.4, 4.5 sono mostrati gli schemi a blocchi dei due modelli del robot. I due schemi differiscono solo per i blocchi robotdyn e robot sm che implemantano in due modi diversi la dinamica del manipolatore. A parità di segnali di coppia forniti in ingresso dal controllore, gli schemi generano in uscita dei segnali per le corrispondenti variabili di posizione e velocità angolare, che risultano essere quasi identitici tra loro. Ciò può essere facilmente verificato osservando le figure 4.6 - 4.11 che riportano i grafici dei risultati forniti dalle simulazioni riguardo ai suddetti segnali. In particolare la figura 4.8 evidenzia l’errore commesso al giunto Capitolo 4 Simulazioni 73 § 4.2 Congruenza dei modelli del robot Figura 4.4: Schema di controllo a ciclo chiuso per il modello SimMechanics del robot. Figura 4.5: Schema di controllo a ciclo chiuso per il modello del robot derivato dalla procedura Maple. 3 del manipolatore. Il motivo per cui questi segnali non coincidono perfettamente, è legato al modo in cui vengono considerate le matrici d’inerzia per la derivazione delle equazioni dinamiche del moto. All’interno della procedura Maple, infatti, per semplificare la complessità dell’algoritmo di calcolo, tutte le matrici d’inerzia dei link del robot sono state considerate diagonali. In SimMechanics, invece, dove la modellazione risulta più accurata, le matrici d’inerzia dei link 2 e 3 non sono diagonali. Tuttavia se a parità di ingressi otteniamo delle uscite simili possiamo concludere che il modello dinamico derivato dalla procedura di calcolo automatico è fedele a quello originale semplificato, e può essere utilizzato per studiare in modo significativo l’effetto delle leggi di compensazione anti-windup per i manipolatori robotici. Capitolo 4 Simulazioni 74 giunto 1 [gradi] § 4.2 Congruenza dei modelli del robot 60 40 20 0 Smodel Mmodel 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 giunto2 [gradi] 160 140 120 100 80 Smodel Mmodel 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 giunto 3 [gradi] −50 −60 −70 −80 Smodel Mmodel −90 −100 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 Figura 4.6: Posizione angolare dei giunti 1,2,3: Smodel ≡ modello SimM echanics, M model ≡ modello M aple. giunto 4 [gradi] 60 40 20 giunto 5 [gradi] 0 Smodel Mmodel 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 60 40 20 0 Smodel Mmodel 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 giunto 6 [gradi] 50 40 30 20 Smodel Mmodel 10 0 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 Figura 4.7: Posizione angolare dei giunti 4,5,6: Smodel ≡ modello SimM echanics, M model ≡ modello M aple. Capitolo 4 Simulazioni 75 giunto 1 [gradi/sec] § 4.2 Congruenza dei modelli del robot 80 Smodel Mmodel 60 40 20 0 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 giunto 2 [gradi/sec] 60 Smodel Mmodel 40 20 0 −20 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 giunto 3 [gradi/sec] 20 Smodel Mmodel 10 0 −10 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 giunto 4 [gradi/sec] Figura 4.8: Velocità angolare dei giunti 1,2,3: Smodel ≡ modello SimM echanics, M model ≡ modello M aple. 80 Smodel Mmodel 60 40 20 0 giunto 5 [gradi/sec] 0 1 1.5 2 2.5 3 3.5 4 4.5 5 Smodel Mmodel 100 50 0 0 giunto 6 [gradi/sec] 0.5 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Smodel Mmodel 100 50 0 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 Figura 4.9: Velocità angolare dei giunti 4,5,6: Smodel ≡ modello SimM echanics, M model ≡ modello M aple. Capitolo 4 Simulazioni 76 § 4.2 Congruenza dei modelli del robot giunto 1 [Nm] 60 20 0 giunto 2 [Nm] −20 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Smodel Mmodel 0 −200 −400 −600 giunto 3 [Nm] Smodel Mmodel 40 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Smodel Mmodel 0 −50 −100 −150 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 Figura 4.10: Segnale di controllo dei giunti modello SimM echanics, M model ≡ modello M aple. 4 4.5 1,2,3: 5 Smodel ≡ giunto 4 [Nm] 60 Smodel Mmodel 40 20 0 −20 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 giunto 5 [Nm] 60 Smodel Mmodel 40 20 0 −20 giunto 6 [Nm] 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 Smodel Mmodel 40 20 0 −20 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 Figura 4.11: Segnale di controllo dei giunti modello SimM echanics, M model ≡ modello M aple. Capitolo 4 Simulazioni 4 4.5 4,5,6: 5 Smodel ≡ 77 § 4.3 Anti-windup applicato al robot SM-r3 4.3 Anti-windup applicato al robot SM-r3 4.3.1 Soluzione non lineare Figura 4.12: Schema a blocchi per la simulazione sul robot SM-r3. Lo schema di figura 4.12 consente di simulare il comportamento del robot Siemens-Manutec r3 in tre diversi casi d’interesse: 1. blocco unconstrained : sistema non soggetto alla saturazione (vedi figura 4.5); 2. blocco sat: sistema soggetto alla saturazione dei segnali di controllo (vedi figura 4.13); 3. blocco anti-windup: sistema soggetto alla saturazione dei segnali di controllo e dotato del compensatore anti-windup (vedi figura 4.14). Con riferimento alla figura 4.14 analizziamo in dettaglio l’azione prodotta da ciascun blocco dello schema di controllo a ciclo chiuso dotato del compensatore anti-windup: 1. il blocco In1 invia allo schema il segnale di riferimento di posizione angolare; Capitolo 4 Simulazioni 78 § 4.3 Anti-windup applicato al robot SM-r3 Figura 4.13: Blocco sat. Figura 4.14: Blocco anti-windup. 2. il blocco locale è un controllore PID ad inversione della dinamica che consente l’inseguimento della traiettoria desiderata. Il blocco riceve in input il segnale d’ingresso In1 e il segnale di controreazione uc , e fornisce in uscita il segnale di controllo (le coppie da applicare ai giunti del robot) secondo le equazioni: uc = (q, q̇) q = retroazione di posizione q̇ = retroazione di velocita0 r = In1 ẋc = q − r yc = B(q) (−Kp (q − r) − Kd q̇ − Ki xc ) + C(q, q̇)q̇ + R(q)(q̇) + h(q) dove xc ∈ Rn è lo stato del controllore e Kp , Kd , Ki sono delle matrici quadraCapitolo 4 Simulazioni 79 § 4.3 Anti-windup applicato al robot SM-r3 te (tipicamente diagonali) scelte in maniera oppurtuna secondo le equazioni (1.1), (1.2), (1.3) del capitolo 1. Per la simulazione abbiamo scelto: Kp = diag([100 100 100 100 100 100]/4) Kd = diag([10 10 10 10 10 10]) Ki = diag(5 · [1 1 1 1 1 1]) 3. il blocco saturazione contiene i livelli di saturazione mi , i = 1 . . . N , relativi agli N attuatori dei giunti del robt; 4. il blocco ROBOT contiene la dinamica del robot stesso. Sostanzialmente riceve in input i segnali di coppia forniti dal controllore (ed eventualmente saturati), e fornisce in output le variabili di posizione e velocità angolari corrispondenti al movimento compiuto dal manipolatore sotto l’azione del segnale di controllo; 5. il blocco anti-windup riproduce la dinamica del compensatore descritta dalle seguenti equazioni: x = (q, q̇) stato del robot xe = (qe , q̇e ) stato del compensatore yc = uscita del controllore up = sat(yc ) q̈e = B −1 (q)(sat(yc + v1 ) − C(q, q̇)q̇ − R(q)q̇ − h(q)) − B −1 (q − qe )(yc − C(q − qe , q̇ − q̇e )(q̇ − q̇e ) − R(q − qe )(q̇ − q̇e ) − h(q − qe )) v1 = β(x, xe ) := h(q) − h(q − qe ) − Kg sat(Kg−1 qe ) − K0 q̇e v2 = −xe = −(qe , q̇e ) dove K0 e Kg sono due matrici diagonali e definite positive che rappresentano il cosiddetto ’tuning’ dei parametri della legge anti-windup. Gli elementi, k gi , Capitolo 4 Simulazioni 80 § 4.3 Anti-windup applicato al robot SM-r3 che sono sulla diagonale della matrice Kg , verificano la condizione: h Mi + k gi mi < m i , i = 1, ..., n (4.1) Si ricorda che se vale la condizione (1.5) dell’Assunzione 2 del capitolo 1, è sempre possibile trovare una matrice diagonale e definita positiva, Kg , che soddisfi la (4.1). Per la simulazione abbiamo scelto: Kg = diag([0.99 0.10 0.15 0.97 0.96 0.99]) K0 = diag([110 850 200 30 80 30]) La verifica dell’efficienza del compensatore anti-windup segue direttamente dai grafici riportati nelle figure 4.15 - 4.18. Per viasualizzare i grafici è sufficiente aprire, dopo che la simulazione è terminata, i blocchi Ang.Pos e Cont di figura giunto 1 [gradi] 4.12. 60 40 20 giunto 2 [gradi] 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 160 140 120 100 80 giunto 3 [gradi] 0 0 −50 −100 Figura 4.15: Posizione angolare dei giunti 1,2,3: unconstrained (rosso), saturato senza anti-windup (blu), e anti-windup (verde). Capitolo 4 Simulazioni 81 § 4.3 Anti-windup applicato al robot SM-r3 giunto 4 [gradi] 80 60 40 20 giunto 5 [gradi] 0 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 80 60 40 20 0 giunto 6 [gradi] 60 40 20 0 Figura 4.16: Posizione angolare dei giunti 4,5,6: unconstrained (rosso), saturato senza anti-windup (blu), e anti-windup (verde). giunto 1 [Nm] 200 100 0 −100 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 giunto 2 [Nm] 1500 1000 500 0 −500 giunto 3 [Nm] 600 400 200 0 −200 Figura 4.17: Segnale di controllo dei giunti 1,2,3: unconstrained (rosso), saturato senza anti-windup (blu), e anti-windup (verde). Capitolo 4 Simulazioni 82 § 4.3 Anti-windup applicato al robot SM-r3 giunto 4 [Nm] 40 30 20 10 0 giunto 5 [Nm] −10 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 100 50 0 giunto 6 [Nm] 0.1 0.05 0 −0.05 Figura 4.18: Segnale di controllo dei giunti 4,5,6: unconstrained (rosso), saturato senza anti-windup (blu), e anti-windup (verde). 4.3.2 Soluzione anti-windup generallizzata La simulazione relativa alla soluzione anti-windup generalizzata, descritta nel §1.4 del capitolo 1, si avvale degli stessi schemi a blocchi usati per implementare la soluzione non lineare del problema. L’unica differenza è costituita dal codice della S-function richiamata dal blocco compensatore. In questo caso infatti cambia il segnale di compensazione v1 che assume la seguente forma: v1 = sat(yc ) − yc + h(q) − h(q − qe ) − Kg sat(Kg−1 Kq qe ) − Kqd (qe , q̇e )q̇e con Kg , K0 , Kq matrici diagonali scelte opportunamente secondo le espressioni (1.11), (1.15), (1.17) riportate nel capitolo 1. Per la simulazione è stato scelto: Kg = diag([0.99 0.10 0.15 0.97 0.96 0.99]) K0 = diag([110 300 450 30 80 30]) Kq = diag([100 200 200 100 100 100]) Capitolo 4 Simulazioni 83 § 4.3 Anti-windup applicato al robot SM-r3 Anche in questo caso la verfica dell’efficienza delle leggi di compensazione antiwindup segue direttamente dall’esame visivo dei grafici riportati nelle figure 4.19 4.22, che mostrano l’andamento delle variabili di posizione angolare e controllo nei tre casi d’interesse: 1. sistema non soggetto a saturazione; 2. sistema soggetto alla saturazione dei segnali di controllo; 3. sistema soggetto alla saturazione dei segnali di controllo ma dotato del com- giunto 1 [gradi] pensatore anti-windup. 60 40 20 giunto 2 [gradi] 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 160 140 120 100 80 giunto 3 [gradi] 0 0 −50 −100 Figura 4.19: Posizione angolare dei giunti 1,2,3: unconstrained (rosso), saturato senza anti-windup (blu), e anti-windup (verde). Capitolo 4 Simulazioni 84 § 4.3 Anti-windup applicato al robot SM-r3 giunto 4 [gradi] 80 60 40 20 giunto 5 [gradi] 0 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 80 60 40 20 0 giunto 6 [gradi] 60 40 20 0 Figura 4.20: Posizione angolare dei giunti 4,5,6: unconstrained (rosso), saturato senza anti-windup (blu), e anti-windup (verde). giunto 1 [Nm] 200 100 0 −100 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 giunto 2 [Nm] 1500 1000 500 0 −500 giunto 3 [Nm] 600 400 200 0 −200 Figura 4.21: Segnale di controllo dei giunti 1,2,3: unconstrained (rosso), saturato senza anti-windup (blu), e anti-windup (verde). Capitolo 4 Simulazioni 85 § 4.3 Anti-windup applicato al robot SM-r3 giunto 4 [Nm] 40 30 20 10 0 giunto 5 [Nm] −10 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 0 0.5 1 1.5 2 2.5 tempo [sec.] 3 3.5 4 4.5 5 100 50 0 giunto 6 [Nm] 0.1 0.05 0 −0.05 Figura 4.22: Segnale di controllo dei giunti 4,5,6: unconstrained (rosso), saturato senza anti-windup (blu), e anti-windup (verde). Capitolo 4 Simulazioni 86 Capitolo 5 Conclusioni L’oggetto di questo lavoro di tesi è stato lo studio simulativo al calcolatore delle leggi anti-windup per i manipolatori robotici con saturazione sugli ingressi. Le leggi di compensazione proposte nel Capitolo 1 permettono di risolvere i problemi di instabilità e perdita di prestazioni che spesso intervengono a causa del fenomeno del windup. In particolare, le soluzioni proposte hanno il vantaggio di garantire un ottima risposta transitoria ed il recupero delle prestazioni del sistema a ciclo chiuso non soggetto a saturazione. Tutto ciò si ottiene scegliendo opportunamente solo i guadagni proporzionale e derivativo del compensatore anti-windup. Tuttavia l’uso di queste tecniche risolutive è basato sulla conoscienza di un modello dinamico del robot a cui vengono applicate, che deve essere inserito nello schema di controllo. Per questo motivo è stato necessario scrivere una procedura di calcolo automatico dei coefficienti dinamici che permettesse di derivare le equazioni dinamiche di moto e quindi il modello del robot. La scelta del manipolatore per lo studio simulativo non è stata poi casuale. Il file dimostrativo mech robot.mdl del toolbox Matlab, SimMechanics, ha suggerito il robot industriale Siemens-Manutec r3. Questa scelta ha permesso di verificare per confronto diretto con il modello SimMechanics del robot r3 la validità della procedura di calcolo automatico e quella del modello semplificato derivato dalla procedura stessa. Infine le simulazioni svolte sul modello semplificato del manipolatore r3 hanno confermato le prestazioni della soluzione anti-windup non lineare e di quella generalizzata presentate nel Capitolo 1. Il passo successivo era quello di applicare queste soluzioni anche al sistema descritto dallo 87 schema SimMechanics del robot in cui fossero presenti tutte le nonlinearità del sistema ed anche la parte elettrica relativa al dispositivo di controllo e ai motori dei giunti. Lo schema di compensazione è stato applicato a questo modello completo, tuttavia non sono stati ottenuti risultati del tutto soddisfacenti. Il motivo è da ricercare in più cause concomitanti, come la complessità della simulazione, alcuni difetti di modellazione nello schema SimMechanics del robot r3, e soprattutto problemi legati al solver utilizzato dallo stesso Matlab. Uno degli obbiettivi futuri sarà risolvere questo problema simulativo, cercando di migliorare l’implentazione di queste leggi al calcolatore, avvalendosi anche di nuovi ambienti di simulazione. Inoltre un ulteriore passo in avanti in questa ricerca sarebbe riuscire ad effettuare una verifica dei risultati ottenuti tramite prove sperimentali. Capitolo 5 Conclusioni 88 Bibliografia [1] F. Morabito, A.R. Teel, and L. Zaccarian. “Anti-windup design for EulerLagrange systems”. In IEEE Conference on Robotics and Automation, pages 3442-3447, Washington (DC), USA, May 2002. [2] F. Morabito, S. Nicosia, A.R. Teel, and L. Zaccarian. “Measuring and improving performance in anti-windup laws for robot manipulators”. In C. Melchiorri B. Siciliano, A. De Luca and G. Casalino, editors, Advances in Control of Articulated and Mobile Robots, chapter 3, pages 61–85. Springer Tracts in Advanced Robotics, 2004. [3] Jörg Franke, Martin Otter. “The Manutec r3 Benchmark Models for the Dynamic Simulation of Robots”. DLR FF-DR-ER, Technical Report TR R101-93, March 1993. c [4] SimMechanics User’s Guide. COPYRIGHT 2001-2002 by The MathWorks, Inc. [5] King-Sun Fu, Rafael C. Gonzalez, C.S. George Lee. “Robotica”. Copyright c 1989 McGraw-Hill Libri Italia srl. c [6] Lorenzo Sciavicco, Bruno Siciliano. “Robotica Industriale”. Copyright 2000 McGraw-Hill Libri Italia srl. 89