Sei sulla pagina 1di 17

RobotiCad

Per lanciare RobotiCad, digitare:

>> RobotiCad

al promt di matlab. Si apriranno le finestre principali dell’interfaccia grafica, ossia la finestra

di Log, la finestra per la gerarchia degli oggetti e infine la finestra del workspace,

esattamente come in figura.

la finestra del workspace, esattamente come in figura. Finestra di Log La finestra di Log riporta

Finestra di Log

del workspace, esattamente come in figura. Finestra di Log La finestra di Log riporta in ordine

La finestra di Log riporta in ordine cronologico tutte le azioni compiute dall’utente sul qualunque elemento del workspace. Per questo motivo, può essere utilizzata anche per l’undo (che invece non è implementato).

In particolare, per ogni azione vengono riportati tre dati fondamentali:

1. l’orario in cui l’operazione è stata compiuta;

2. il tipo di azione compiuta;

3. il nome (identificatore) dell’oggetto interessato alla modifica

Per quanto riguarda il tipo di operazione effettuata, tra parentesi tonde viene indicato anche il livello di criticità dell’operazione stessa. Ad esempio, con un punto esclamativo (!) si indica una azione critica (come il cancellamento dell’oggetto), mentre con una (i) si indica una operazione che modifica solo alcune informazioni relative all’oggetto (il nome, il materiale, ecc…

Finestra della Gerarchia

(il nome, il materiale, ecc… Finestra della Gerarchia Nella finestra della gerarchia sono in izialmente presenti

Nella finestra della gerarchia sono inizialmente presenti solo quattro voci:

1. World

2. Light

3. Object

4. Trajectory

Il fatto che di fianco a una voce ci sia il <+> o il <-> significa che la categoria può essere esplorata o che è già aperta.

I vari robot verranno aggiunti poi man mano che vengono creati.

La categoria World contiene tutti gli oggetti relativi all’ambiente di lavoro, e selezionandoli

possono essere modificati agendo nelle impostazioni della barra laterale nella finestra di

workspace. Se un oggetto (Light, Object, Trajectory o un robot se presente) viene selezionato, automaticamente nella finestra di lavoro verrà evidenziato da un bounding box. Viceversa, un oggetto selezionato con il mouse nella finestra di lavoro verrà automaticamente selezionato nell’albero gerarchico.

Finestra del Workspace

La

finestra del workspace ha tre zone fondamentali, ossia la barra superiore, che consente

di

accedere velocemente a tutte le opzioni fondamentali, la zona laterale, nella quale

compaiono tutte le opzioni relative di volta in volta all’oggetto selezionato, e la finestra di lavoro.

La barra superiore ha alcuni pulsanti fondamentali (da notare che portanto il cursore del mouse sopra a un pulsante qualunque, comparirà una breve stringa che ne suggerisce la funzione). Tra questi pulsanti troviamo quelli per:

Creare un nuovo lavoro;

Aprire un lavoro precedente;

Salvare il lavoro corrente;

Cut, Paste, Dolete (che sono attivi solo quando un oggetto su cui queste azioni sono effettivamente attuabili è selezionato)

Tre pulsanti per ruotare, zoomare o muovere il punto di vista corrente (se la telecamera si “incasina” un po’, è sufficiente selezionare uno di questi tre pulsanti e fare doppio click su un punto qualunque della scena per ottenere il reset degli assi)

DH (veder oltre)

New object: crea un oggetto nuovo a forma di sfera rossa nel centro degli assi assoluti. L’oggetto creato avrà dimensione unitaria lungo tutti e tre gli assi. Per modificarne le proprietà, bisogna fare riferimento alle opzioni che compaiono sulla sinistra, nella zona laterale dell’interfaccia

New light: crea una nuova luce di scena; anche in questo caso le opzioni si trovano sulla barra laterale

Tavolozza (material editor): apre un tool per la creazione di un materiale da salvare ed eventualmente in futuro assegnare a un oggetto.

DH (Denavit – Hartenberg) Con questo pulsante, a cui si può giungere anche dal menù [Create->Robot->New (DH)]. Si aprirà una finestra come quella in figura:

(DH)]. Si aprirà una finestra come quella in figura: Nello spazio bianco vanno messi i valori

Nello spazio bianco vanno messi i valori dei parametri di DH per il robot che si intende creare, tenendo presente che i parametri sono complessivamente 5, poiché in fondo va specificato se si tratta di un giunto rotoidale (0) o prismatico (1) Esempio nel caso del manipolatore planare a 2 gdl:

0

0.5 0 0 0

0

0.5 0 0 0

Gli altri campi presenti nella finestra servono per impostare il punto dello spazio di lavoro in cui posizionare la base del robot, e il suo orientamento usando angoli di Roll Pitch e Yaw. Tool matrix serve a specificare una matrice di trasformazione omogenea per il tool del robot. Una volta che tutti i parametri sono stati impostati, bisogna fare il “Check matrix”, che controlla se tutto è ok. Se non ci sono errori, dove nella figura è scritto “Type D-H matrix to create your robot” comparirà una stringa che sintetizza il robot che verrà creato. Se si è pronti a crearlo, andare sul menù [Robot->Create].

Nel menù sono presenti anche altre voci, che possono essere attivate solo se esiste almeno già un altro robot nell’ambiente. Load from workspace: mostra la lista di tutti i robot presenti, i cui parametri possono essere modificati. A questo punto con “Replace link matrix” si può sostituire il robot preesistente con quello risultante dai nuovi parametri. ATTENZIONE: il numero di link (e quindi di righe) non deve cambiare!

Una volta creato il robot, esso conterrà quatto categorie di oggetti, ognuna esplorabile, e ognuna con già dentro un oggetto: il robot infatti va considerato come una collezione

di oggetti con alcune proprietà extra. Infatti, con un click su un qualunque oggetto del

robot, si seleziona solo il singolo oggetto, mentre per selezionare tutto il robot bisogna fare un doppio click su di esso (oppure dalla finestra di gerarchia). Per il robot ci sono selezionato ci sono nella barra a sinistra alcune opzioni interessanti, tra cui ci sono Teach Pendant, Dynamic, Inv. Kinematic.

ATTENZIONE: ciccando con il tasto destro su un qualunque oggetto (libero, parte di un robot) compare un menù a tendina da cui è possibile scegliere alcune opzioni. A parte

le più banali, ce ne sono un paio di interesse che compaiono a seconda che l’oggetto

correntemente selezionato faccia parte di un robot o sia libero. Oggetto libero: compare la lista dei robot attualmente presenti nello spazio di lavoro. Il menu offre la possibilità di fare in modo che l’oggetto corrente diventi parte di una delle quattro sottocategorie del robot. Oggetto di un robot: anche qui, come nel caso precedente, l’oggetto può essere spostato per entrare a fare parte di un’altra sottocategoria dello stesso robot o di un

altro robot presente nell’ambiente. Inoltre, c’è la possibilità con l’opzione “Move to Env.”

di distaccare l’oggetto dal robot attuale e farlo diventare parte dello spazio di lavoro.

Teach Pendant e Via Point List

parte dello spazio di lavoro. Teach Pendant e Via Point List Queste due finestre possono essere

Queste due finestre possono essere utilizzate per un duplice scopo: da un lato muovere giunto per giunto il robot usando il Teach Pendant, dall’altro per salvare una

serie di posizioni per programmare il movimento del manipolatore nella finestra Via Point List. Le checkbox alla sinistra del nome del giunto serve a bloccare il valore del giunto stesso: questo significa che, se la checkbox è attiva, nessuna operazione modificherà il valore memorizzato. Nel Teach pendant ci sono alcune opzioni fondamentali: [ADD] aggiunge la posizione corrente alla lista dei via point già presenti subito dopo quello attualmente selezionato; [Joints->Reset] resetta tutti i giunti non bloccati a 0; [Joints->Round to 2pi] riporta tutti i valori nel range [-2*pi,2*pi].

Via Point List. In questa finestra si può programmare il robot nello spazio di giunto. I punti vengono aggiunti come già visto. I pulsanti in fondo alla finestra servono a muovere in su o in giù il punto correntemente selezionato o a cancellarlo, mentre la “bacchetta magica” ha il compito di sostituire il punto corrente con i valori presenti nel Teach Pendant. Le traiettorie disponibili per interpolare i punti sono quelle visibili in figura. Nei menù in alto troviamo:

[ViaPoint -> Clear All]: resetta i Via Point [ViaPoint -> Load -> Traj file]: carica un file *.smf, che è anche il formato importabile in Simulink [ViaPoint-> Load and Append -> Traj file]: carica un file *.smf e lo mette in append ai punti già presenti [ViaPoint -> Save -> Traj file]: permette di salvare I viapoint in un file *.smf, formattato per essere poi caricato con un apposito blocco Simulink. [Trajectory -> View Graph]: apre una finestra con le traiettorie nello spazio di giunto. Nella finestra che si apre si può scegliere di visualizzare le traiettorie per Posizione, Velocità, Accelerazione, Jerk, o solo alcuni di questi in una combinazione qualunque. Le traiettorie visualizzate possono essere selezionate. [Trajectory -> View Trace]: durante la simulazione cimentatici nella finestra del workspace, il robot disegna la traccia del proprio end effector. [Play -> Robot]: fa partire la simulazione cinematica del robot correntemente selezionato.

Dynamic

ci nematica del robot correntemente selezionato. Dynamic Il tasto Show Jacobian apre una finestra in cui

Il tasto Show Jacobian apre una finestra in cui viene visualizzato lo jacobiano geometrico del robot nella configurazione corrente. Tale finestra resta aperta anche se si fanno varie operazioni sul robot, e in particolare se si apre il Teach pendant e lo si fa muovere, a seconda delle opzioni selezionate nella maschera dello jacobiano, questo viene aggiornato per ogni movimento, oppure viene aggiornato tenendo anche i dati delle vecchie posizioni. Contemporaneamente, nella finestra vengono mostrati anche i

valori delle variabili di giunto e il valore del determinante di J ( Det(J)= ) e il valore di manipolabilità ( Man=). Le atre opzioni sotto il menù Dynamic permettono di visualizzare o nascondere gli ellissoidi di velocità e di forza: questi vengono visualizzati come due ellissoidi posizionati sull’endeffector del robot. Il pulsante Mask serve invece a “mascherare” alcune righe dello jacobiano, cosa che risulta particolarmente utile qualora il robot sia sottoattuato (es: planare). Il pulsante “S.” suggerisce quali potrebbero essere per il robot selezionato le righe da mascherare.

Inv. Kinematic Permette di calcolare la configurazione dei giunti del robot a partide da un punto e un orientamento nello spazio di lavoro. Per inserire tale dato ci sono due opzioni:

XYZ+Roll Pitch Yaw, oppure una matrice di trasformazione omogenea. Per quest’ultima, il campo tollerance serve per evitare che errori di troncamento numerico facciano in modo che la matrice introdotta non venga riconosciuta come omogenea. Inseriti i dati, il tasto Evaluate fa partire il calcolo della cinematica inversa, facca con lo pseudo inverso dello jacobiano. Il tasto serve invece per aggiungere il punto appena calcolato a quello delle traiettorie eventualmente presenti nel Via Point List; il punto viene aggiunto in coda a quelli già presenti.

il punto viene aggiunto in coda a quelli già presenti. Trajectory Le traiettorie possono essere create

Trajectory Le traiettorie possono essere create a partire dal menù [Create -> Trajectory]. In questo caso, l’utente dovrà fissare due punti per definire una nuova traiettoria. Il frame associato a ogni punto, che indica anche l’orientamento della traiettoria in quel punto, viene per default orientato come il frame F0 assoluto.

A questo punto, la traiettoria può essere modificata a piacere aggiungendo e cancellando punti (ne devono restare sempre almeno due) e cambiando il tipo di interpolazione dei punti (lineare o spline). Quando si sceglie un oggetto diverso dalla traiettoria corrente, la traiettoria stessa viene nascosta per evitare che nello spazio di lavoro ci sia troppa confusione. Questo farà si che la traiettoria stessa sia riselezionabile solo attraverso la gerarchia. Per mantenerla sempre visibile, bisogna spuntare nella barra laterale della traiettoria l’opzione “Always visibile”.

Esportare un File per Simulink

Una volta creato l’ambiente che si desidera simulare, dal menu [File -> Create Workspace] della finestra di lavoro si può esportare tutto in un file opportunamente formattato che ha estensione *.wsp. ATTENZIONE: il file deve essere salvato dentro la sottocartella Simulink della cartella RobotiCad e, affinché il salvataggio vada a buon fine, deve essere presente almeno un robot e almeno un oggetto nel workspace. Questo file sarà quello che verrà ricaricato in Simulink.

Simulink Blockset

Simulink Blockset Di tutti i blocchi, quelli fondamentali sono quelli collezionati dentro al macro-blocco

Di tutti i blocchi, quelli fondamentali sono quelli collezionati dentro al macro-blocco “Workspace&Graphics” e quelli dentro il macro-blocco “Trajectory”

Workspace & Graphics

il macro-blocco “Trajectory” Workspace & Graphics I blocchi presenti sono in tutto cinque: “Load

I blocchi presenti sono in tutto cinque:

“Load Workspace”: serve a caricare il workspace precedentemente salvato dall’interfaccia di roboticad come file con estensione *.wsp.

ATTENZIONE: Quando il blocco viene aperto per la prima volta, segnala un errore dovuto al fatto che il blocco inizialmente non ha indicato nessun file da caricare. Lo stesso errore si verficherebbe qualora il file indicato non esistesse o avesse un diverso nome. Importante: il nome del file va messo tra apici singoli affinchè il nome del file venga riconosciuto come stringa. Esempio: se il file era stato salvato come pippo.wsp, adesso dentro al blocco Load workspace ci va scritto ‘pippo.wsp’. Quando si fa OK, il workspace indicato viene caricato.

A questo punto il blocco Select Robot va aperto e nel menu a tendina si può scegliere

su quale robot andare a lavorare.

Analogamente per il blocco Select Object e Select Light, si può selezionare l’oggetto o

la luce su cui andare a lavorare.

Nel blocco Select Robot l’ingresso Q richiede in ingresso un vettore di n elementi, dove n è il numero di giunti del robot corrente. La configurazione base per caricare un workspace precedentemente creato e visualizzarlo è quella riportata in figura.

creato e visual izzarlo è quella riportata in figura. In realtà questi blocchi non sono strettamente

In realtà questi blocchi non sono strettamente necessari al funzionamento delle simulazioni. Il più importante è sicuramente, a parte il Load Workspace per ovvi motivi, il Select Robot che, una volta selezionato un manipolatore, consente di creare automaticamente alcuni blocchi, come quello per il calcolo della cinematica, ecc. Nella student version che si può scaricare da:

http://www-lar.deis.unibo.it/people/rfalconi/index.html i tick relativi alla creazione dei blocchi dinamici è stata resa non disponibile affinché gli studenti fossero obbligati a calcolarsi la dinamica da soli.

In questo caso, in particolare, si potrebbe introdurre il discorso relativo alle funzioni per il calcolo automatico della dinamica in forma chiusa (vedere oltre).

Per determinare la Q da dare in ingresso al blocco di selezione del robot (il nome del robot compare in rosso e il numero di giunti compare come Robot(n) sul blocco stesso) si possono usare vari metodi. Il più importante è quello di usare i blocchi riportati nel macro-blocco “Trajectory”.

Trajectory

Trajectory Di questi blocchi, il più impor tante è quello in rosso “ Trajectory from *.smf
Trajectory Di questi blocchi, il più impor tante è quello in rosso “ Trajectory from *.smf

Di questi blocchi, il più importante è quello in rosso “Trajectory from *.smf file”.

Una volta aperto comparirà come nella figura a sinistra.

Ci sono complessivamente quattro opzioni:

Hold start value: fa in modo che la traiettoria abbia all’inizio, anche nella parte di tempo eventualmente non programmata, il valore iniziale;

Hold end value: analogamente mantiene il valore finale raggiunto anche dopo la fine della traiettoria stessa Se questi due box non sono spuntati, al di fuori del range temporale programmato, il blocco mette a zero tutti e valori della traiettoria.

Use file Time-Data: usa le impostazioni temporali salvate assieme alla traiettoria. Attualmente è meglio che questo box sia sempre selezionato

File name (*.smf): va specificato il nome di un file di traiettoria (creato dall’interfaccia grafica usando il Via Point List e il Teach Pendant). Come per i file di workspace, anche in questo caso il nome del file completo di estensione deve essere messo fra apici singoli.

I profili delle traiettorie così caricati possono essere mandati direttamente al blocco Load Robot oppure usati per effettuare un vero e proprio controllo (PD+compensazione di gravità, a dinamica inversa, ecc).

Dinamica calcolata in forma chiusa

Prendiamo in considerazione ora le funzioni preposte al calcolo della dinamica in forma chiusa. Per il calcolo della dinamica in forma chiusa di un manipolatore il codice si appoggia al Symbolic Toolbox di Matlab che, a sua volta, si basa sul kernel di Maple. Le funzioni in questione si trovano nella directory \RobotiCad e sono:

DYN: la funzione crea la dinamica in forma chisa per un determinato manipolatore.la chiamata della funzione è

>> [Tend,J,M,C,G]=DYN(dh,BASE,nomefile)

dove

Tend è la matrice omogenea in forma chiusa della cinematica diretta del robot

J è lo Jacobiano geometrico in forma simbolica

M, C, G sono le matrici della nota equazione dinamica del manipolatore. Gli argomenti della chiamata sono invece:

DH: matrice di Denavit-Hartenberg per il robot

BASE: matrice omogenea per la posizione e l’orientamento della BASE del robot

nomefile: nome del “progetto” che si vuole attribuire ai file che verranno automaticamente creati dalla chiamata alla funzione DYN.

I parametri dinamici del robot devono essere impostati direttamente all’interno del file

DYN. A riga 23 del codice è possibile vedere quali saranno i file che verranno creati in

automatico.

L’altro file importante è UpDateDYN. Lo scopo di questa funzione è quello di modificare

i parametri dinamici del robot senza dover ricalcolare la dinamica complessiva. Il trucco

si basa sul fatto che i file scritti in precedenza hanno tutti una parte di inizializzazione in cui vengono settati i valori dinamici del manipolatore, mentre tutte le equazioni sono

lasciate in forma parametrica.

La chiamata di questa funzione è:

>> UpDateDYN(nomefile);

In questo caso il file UpDateDYN deve essere aperto per cambiare i parametri che interessano, mentre come unico parametro dall’esterno deve essere fornito il nomefile del “progetto” che si vuole modificare.

I file che vengono creati possono essere immediatamente messi all’interno di una

matlab function in Simulink, in modo da poterli utilizzare senza fare altre modifiche.

ATTENZIONE: le modifiche che vengono fatte usando la funzione UpDateDYN non hanno effetto durante una simulazione. Per rendere efficaci tali cambiamenti, la simulazione deve essere fermata e fatta ripartire.

Esempio

Facciamo ora un esempio prendendo in considerazione un doppio pendolo, che può essere visto come un planare a 2 gld con base ruotata di 90 gradi attorno all’asse X. Facciamo partire RobotiCad, usiamo l’interfaccia DH e mettiamo dentro i seguenti dati per i parametri di descrizione del robot (senza per il momento ruotarne la base):

0

0.5 0 0 0

0

0.5 0 0 0

Dopo il Check Matrix (che scriverà “Valid D-H for robot [RR]“), dal menù [Robot -> Create] passiamo alla creazione effettiva del robot. Si otterrà una cosa come quella in figura (il pallino bianco rappresenta la sorgente di luce):

figura (il pallino bianco rappresent a la sorgente di luce): In questo caso abbiamo quind i

In questo caso abbiamo quindi un planare a due gradi di libertà. Ora, selezionando tutti il robot con un doppio click del tasto sinistro su una qualunque sua parte, nel menù laterale scegliamo Orientation e scegliamo la modalità Roll-Pitch-Yaw. Mettendo un valore di Yaw pari a -pi/2 (tutti gli angoli sono in radianti) si ottiene una rotazione del robot. A questo punto, visto che il robot giacerebbe sul pavimento, bisogna portarlo ad una altezza almeno pari alla sua lunghezza in estensione. Poniamo di volerlo mettere ad una altezza di 1.2: selezionare allora dalla barra laterale l’opzione Move e mettere il valore di Z a 1.2. Quello che si ottiene sarà una cosa come quella in figura:

Per rendere più “appetibile” il pendolo, selezioniamo ora solo l’endeffector del robot (singolo click su

Per rendere più “appetibile” il pendolo, selezioniamo ora solo l’endeffector del robot (singolo click su quella specie di pinza azzurra) e traformiamolo in una sfera: dal menù laterale del singolo oggetto, sotto a Shape, selezionare dal menù a tendina la voce Sphere. Ora l’endeffector risulterà come una specie di palla nera: in realtà il colore della palla è un altro (azzurro), il ner degli spigoli va si che non sia visibile. Volendo cambiare il materiale dell’endeffector, si può scegliere sempre dalle opzioni laterali il pulsante con la tavolozza e il dischetto, che permette di caricare uno dei materiali creati e presenti nella sottodirectory \RobotiCad\Material.

Fatto ciò, si rielezioni il robot e si apra il Teach Pendant. A questo punto, salviamo alcune posizioni per le variabili di giunto, ad esempio le coppie riportate qui sotto:

J1

0

-pi/4

-5*pi/4

pi/4

J2

0

pi/4

0

-pi/4

Con il menù [Play -> Robot] facciamo la prova della simulazione cinematica, magari facendo vedere anche le traiettorie e cambiando eventualmente il tipo di traiettoria (sconsiglio la lineare o la parabolica). La simulazione cinematica può essere avviata anche utilizzando il pulsante Play nella toolbar della finestra principale. Salviamo quindi la traiettoria creata usando il menù [ Viapoint -> Save -> Save (Traj. file) ]. Chiamiamo il file delle traiettorie “pippo.smf” e salviamolo nella sottodirectory \RobotiCad\Simulink.

A questo punto, creiamo un oggetto nuovo (per default la sfera rossa di dimensioni unitarie). Se le si vuole dare un significato o se ne vuole giustificare la creazione, può essere usata per fare vedere le varie forme predefinite presenti per gli oggetti: basta selezionarla e andare sull’opzione Shape nel menù laterale.

Ora, dal menù [File -> Create Workspace] salviamo il workspace che verrà poi caricato in Simulink. L’importante è che venga salvato nella sottodirectory \RobotiCad\Simulink. Chiamiamolo “pippo.wsp”. Ora possiamo chiudere la finestra di RobotiCad.

Entriamo nella directory \RobotiCad\Simulink a apriamo il file RobotiCadBlocks.mdl. Creiamo quindi un file nuovo in Simulink e trasciniamoci dentro i blocchi seguenti dal macro-blocco Workspace & Graphics

Load Workspace

Select Robot

Select Light

Select Object

Plot Workspace

e dal macro-blocco Trajectory il blocco:

Trajectory from *.smf file

Apriamo il blocco Load Workspace e carichiamo il file ‘pippo.wsp’ (mi raccomando gli apici!). Nel blocco Select Robot selezioniamo da menù a tendina l’unico robot disponibile e analogamente si faccia per il blocco Select Object e Select Light.

Nel blocco Trajectory from *.smf file caricare il file ‘pippo.smf’. Lo schema dei collegamenti da eseguire è quello riportato in figura.

collegamenti da eseguire è que llo riportato in figura. Il collegamento tratteggiato, se chiuso, quando parte

Il collegamento tratteggiato, se chiuso, quando parte la simulazione consente di vedere la simulazione cinematica del pendolo.

A questo punto mettiamoci un controllo PD con compensazione di gravità (andiamo sul

classico).

Aggiunta del controllore

Per il controllo PD con compensazione di gravità ci servono due blocchi da creare con

le matlab function, usando i file DYN e UpDateDYN (che dovranno essere presenti

nella sottodirectory \RobotiCad\Simulink). Il primo blocco dovrà calcolare l’accelerazione ai giunti, avendo in ingresso la posizione, la velocità e le coppie. Il secondo dovrà calcolare la compensazione di gravità avendo in ingresso la posizione dei giunti del robot.

Nel primo caso la posizione, la velocità e le coppie vanno multiplexate (in questo ordine), quindi lo schema sarà il seguente:

(in questo ordine), quindi lo schema sarà il seguente: Per quanto riguarda il termine per la

Per quanto riguarda il termine per la compensazione della gravità, la parte di schema che lo interessa è fatto tipo:

la parte di schema che lo interessa è fatto tipo: Per definire le funzioni da mettere

Per definire le funzioni da mettere dentro i blocchi [Funzione 1] e [Funzione 2] si deve utilizzare la funzione DYN: si apre il file, si fissano i valori per le proprietà dinamiche dei link, si fissano i valori degli attriti, ecc. Si tenga presente che nel codice della funzione DYN si hanno i seguenti significati:

MASS_VALUE: vettore con le masse dei link

D_DATA_VALUE: vettore con i valori della diagonale della matrice D del modello dinamico

PCX, PCY, PCZ: vettori con le coordinate in dei centri di massa dei vari link. I valori sono riferiti al sistema di riferimento solidale con il link stesso, e poiché si usa la convenzione di DH, in questo caso tali sistemi sono tutti alla fine dei link, quindi lungo X (che è l’asse che congiunge un sistema con l’altro) i valori vanno presi in negativo, altrimenti i centri di massa risulterebbero oltre la lunghezza del link.

La chiamata della funzione DYN deve essere fatta dal prompt (siamo ancora nella sottocartella \RobotiCad\Simulink) come segue:

>> [Tend , J , M , C , G] = DYN( [0 0.5 0 0 0; 0 0.5 0 0 0 0] , rotx(pi/2) , ‘pippo’)

In questo modo verranno automaticamente creati i file seguenti:

1.

Calculate_DDQpippo.m

2.

Calculate_Pospippo.m

3.

Calculate_Gpippo.m

4.

Calculate_TAUpippo.m

Di

questi, a noi interessano per il momento solo il primo e il terzo. Infatti, se nei due

schemi alle figure precedenti mettiamo come matlab function queste due, per

completare

il

controllore

sarà

sufficiente

chiudere

le

retroazioni

con

opportuni

guadagni.

Per la matlab function chiamata [FUNZIONE 1] Calculate_DDQpippo(u) è l’argomento; per la matlab function chiamata [FUNZIONE 2] Calculate_Gpippo(u) è l’argomento.

Lo schema di controllo finale diventa quindi quello seguente:

schema di controllo finale di venta quindi quello seguente: Facendolo partire, si aprirà immediatamente la finestra

Facendolo partire, si aprirà immediatamente la finestra di grafica con la simulazione. La finestra stessa si apre in automatico solo la prima volta che il modello parte: quindi, se la grafica rallenta troppo la simulazione (il chè è molto probabile), si ferma la simulazione, si chiude la finestra di grafica e si fa ripartire la simulazione, supervisionando il tutto con degli scope. Inoltre, la parte di grafica, una volta aperta mostrerà la fastidiosa sfera rossa che era stata creata nell’ambiente. Per evitare che venga mostrata, bisogna eliminare il collegamento tra il blocco Select Object e il blocco Plot Worhspace. Per riaprire la finestra di grafica è sufficiente fare un doppio click sul blocco Plot Workspace.

Un modo alternativo per avere il plot del comportamento del manipolatore di interesse è creare un file simile a questo ma utilizzando solo il blocco per caricare le traiettorie e, per quanto riguarda la grafica, usare il blocco Simple Plot (quello arancione sempre nel macro-blocco Workspace & Graphics.

Lo schema alternativo (che chiameremo per ovvi motivi “pippo_fast.mdl”) diventerà quello nella figura seguente.

In questo caso, la simulazione ci guadagna parecchio in velocità, anche se la parte grafica

In questo caso, la simulazione ci guadagna parecchio in velocità, anche se la parte grafica ne risente. Il blocco Simple Plot in particolare ha alcune opzioni:

DH matrix: vuole la matrice di DH del robot da disegnare. Nel nostro caso ci andrà la matrice [0 0.5 0 0 0; 0 0.5 0 0 0].

Base Position + Orientation: matrice omogenea che descrive la posizione e l’orientamento della base del robot nello spazio rispetto al sistema assoluto. Nel nostro caso sarà

1

0

0

0

0

0

-1

0

0

1

0

1.2

0

0

0

1

ottenibile anche scrivendo nel campo realtivo la riga:

rotx(pi/2)+[0 0 0 0; 0 0 0 0; 0 0 0 1.2; 0 0 0 0]

View trace: traccia dell’endeffector del robot

View frame: se spuntato, fa vedere i sistemi di riferimento associati ai vari link del robot.

Axis scale: 1 per default, serve a riscalare gli assi in modo da vedere meglio la scena.

Suggerimenti

Potrebbe essere molto carino mettere uno switch manuale sulle TAU in ingresso al blocco chiamato [FUNZIONE 1], mettendo come altra sorgente il valore costante [0 0]’. In questo modo si può fare vedere come il pendolo collassa quando si annullano le coppie che ne comandano la traiettoria.

Inoltre, potrebbe essere interessante provare a cambiare i parametri dinamici del robot e fare vedere come effettivamente cambia il suo comportamento.