Introduzione all’utilizzo di ROBCAD - Università degli … all’utilizzo di ROBCADTM Ing. Fabio...

13
Ing. Fabio Calegari Esempio di prodotto per la simulazione robotica Introduzione all’utilizzo di ROBCAD TM

Transcript of Introduzione all’utilizzo di ROBCAD - Università degli … all’utilizzo di ROBCADTM Ing. Fabio...

Ing. Fabio Calegari

Esempio di prodotto per la simulazione robotica

Introduzione all’utilizzo di

ROBCADTM

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

1

INTRODUZIONE ROBCAD, sviluppato dalla Tecnomatix Technologies Ltd., è attualmente il prodotto più avanzato in commercio nel campo della simulazione robotica. Si tratta di una serie di moduli che costituiscono un prodotto appartenente al settore della ingegnerizzazione della produzione assistita al calcolatore (C.A.P.E.) intendendo, con tale denominazione, un prodotto che si posiziona tra la progettazione CAD e la produzione automatizzata. La caratteristica principale di ROBCAD è di consentire una facile ricostruzione virtuale dell’ambiente di lavoro per permettere la pianificazione delle operazioni da svolgere e l’ottimizzazione della progettazione della cella di lavoro. Infine, tramite moduli opzionali, è possibile tradurre la simulazione direttamente nel linguaggio di programmazione della linea automatizzata. L’utilizzo di un simulatore robotico dovrebbe permettere la riduzione dei tempi per l’inizio della produzione di nuovi prodotti, la riduzione delle interruzioni della produzione, l’ottimizzazione delle operazioni di produzione. L’utilizzo di ROBCAD prevede:

• la creazione degli oggetti e dei cinematismi utilizzati nella produzione; • la creazione della cella di lavoro mediante la disposizione degli oggetti creati; • la scrittura dei file TDL per la definizione delle operazioni che devono essere svolte; • la realizzazione della simulazione tramite compilazione dei file TDL.

La seguente figura illustra il processo di creazione di una simulazione.

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

2

INTERFACCIA UTENTE L’interfaccia grafica si presenta sotto forma di finestre multiple, ciascuna con una propria funzione logica. Nell’illustrazione seguente è visibile l’interfaccia utente.

La finestra dei menù mostra la lista dei menù relativi al modulo caricato. La finestra grafica mostra la ricostruzione grafica dell’ambiente virtuale. Può essere ridimensionata e suddivisa in più parti per la contemporanea raffigurazione di diversi punti di osservazione. La finestra dei comandi mostra la lista dei comandi relativi al menù selezionato nella finestra dei menù. La finestra dei messaggi mostra una linea dei messaggi per l’operatore ed una linea di immissione dati. La finestra dei dati mostra una serie di dati prodotti dal comando eseguito. Ad esempio può contenere informazioni sulla posizione di un robot. La finestra di supporto (utilities window) contiene una serie di icone per l’attivazione rapida di alcuni moduli.

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

3

CREAZIONE DEGLI ELEMENTI DELLA CELLA ROBCAD possiede un potente “modellatore” CAD che permette di creare oggetti, meccanismi e robot da impiegare nelle simulazioni. Per attivare il modellatore occorre selezionare “modeling” dal menù “robcad”: la finestra dei menù viene aggiornata con i sottomenù di modeling e vengono mostrati, automaticamente nella finestra dei comandi, i comandi relativi al sottomenù “files”. Per iniziare la sessione di modellazione occorre dare il comando “open” e selezionare il nome dell’oggetto che si vuole creare: se si seleziona un oggetto preesistente questo verrà aperto per le modifiche, mentre se si seleziona un nome nuovo verrà creato un nuovo oggetto. È possibile scegliere se modellare l’oggetto nella cella di lavoro o separatamente. Scegliendo la prima opzione, se si utilizza lo stesso oggetto in più celle di lavoro, verrà modificato solo l’oggetto nella cella di lavoro selezionata; scegliendo la seconda opzione l’oggetto verrà modificato in tutte le celle di lavoro. Nella finestra di supporto compaiono una serie di icone specifiche dell’ambiente MODELING tra cui:

• General: attiva comandi generali del tipo copia, incolla, duplica… • Mover: attiva comandi specifici per il posizionamento dei vari elementi. • 2D sketcher: attiva una serie di comandi per la creazione di punti, linee… • 3D sketcher: attiva una serie di comandi per la creazione di solidi esatti. • Query: attiva una serie di comandi per la misurazione delle proprietà geometriche degli

elementi. Il modellatore CAD è basato sulle rappresentazioni Brep e CSG. Esempi di rappresentazioni Brep e CSG sono illustrati nella seguente figura.

La rappresentazione Brep permette di specificare un solido tramite le superfici che lo delimitano, mentre la rappresentazione CSG permette di gestire solidi derivanti da manipolazioni di solidi

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

4

esatti. Il 3D sketcher si basa sulla rappresentazione CSG ma, attraverso il comando “explode” è possibile scomporre il solido nelle superfici che lo costituiscono ad alterarle tramite il 2D sketcher. Attivando il “material editor” è possibile poi colorare o applicare textures agli oggetti creati. ROBCAD permette di creare oggetti dotati di una cinematica che possono essere meccanismi o robot. La distinzione tra i due tipi di oggetti consiste nel fatto che un meccanismo deve possedere un riferimento base, mentre un robot deve possedere un riferimento base ed un riferimento utensile. Per assegnare una cinematica ad un oggetto occorre definirne i giunti, siano essi rotazionali o prismatici. Per definire un giunto bisogna raggruppare gli elementi che costituiscono un unico segmento in un “link” con l’apposito comando, ed occorre assegnare un segmento che identifichi l’asse del giunto. A questo punto è possibile creare il giunto con il comando “create joint”, specificando il link principale, il link secondario, l’asse ed il tipo di giunto. Una volta definiti i giunti è possibile editarli per assegnarne le caratteristiche cinematiche e dinamiche quali la massima corsa, la massima accelerazione. Il meccanismo non è utilizzabile finché non viene impartito il comando “define mechanism” che predispone la cinematica del meccanismo. Al termine delle operazioni di modellazione occorre impartire il comando “close”. CREAZIONE DELLA CELLA Per creare la cella di lavoro occorre scegliere “workcell” dal menù “robcad”: la finestra dei menù viene aggiornata con i sottomenù di workcell e vengono mostrati, automaticamente nella finestra dei comandi, i comandi relativi al sottomenù “layout”. Attraverso il comando “get component” è possibile importare nella cella gli oggetti precedentemente creati o disponibili nella libreria. Sono disponibili svariati comandi per il posizionamento dell’oggetto nella cella, per il ridimensionamento della superficie di lavoro, per muovere meccanismi e robot, per aggiungere nuove visuali e perfino per variare l’angolo di provenienza della luce! La seguente figura mostra un esempio di una possibile cella di lavoro.

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

5

Sono visibili il manipolatore, il sistema di nastri trasportatori, l’armadio del controllore del robot ed una macchina utensile. Il pavimento è quadrettato in modo da facilitare il posizionamento degli oggetti, la spaziatura è impostabile a piacimento. Sono state realizzate anche le pareti del locale, rese volutamente semistrasparenti. Per muovere un meccanismo occorre specificare a quale meccanismo si riferiscono le istruzioni di movimento attraverso il comando “active mechanism”. È possibile utilizzare i comandi “joint jog” e “robot jog” che attivano dei joystick che permettono di muovere il meccanismo per giunti o in coordinate cartesiane. È possibile registrare delle locazioni nello spazio che possono essere riutilizzate per riposizionare il robot in un secondo tempo. Ad esempio è possibile memorizzare la posizione in cui deve portarsi il robot per afferrare un pezzo da lavorare. SCRITTURA DEI TASK TDL Come è noto, l’uso di linguaggi di programmazione convenzionali per implementare funzioni di controllo task-level genererebbe codice altamente “non-lineare” che è spesso difficile da leggere/comprendere, debuggare e mantenere. A questo scopo nel 1998, presso il Robotics Institute della Carnegie Mellon University di Pittsburgh, è stato progettato TDL (Task Description/Definition Language), un’estensione di C++ che semplifica lo sviluppo di programmi di controllo per robot che includono espliciti supporti sintattici per possibilità di controllo task-level. TDL è un linguaggio high-level che supporta direttamente la decomposizione del compito, la sincronizzazione fine-grained (fine-grossolana) di sottoprogrammi (subtasks), il monitoraggio dell’esecuzione e il trattamento delle eccezioni (è pianificato/progettato il supporto per la gestione delle risorse, quali attuatori, sensori, e risorse computazionali). (È stato progettato anche un compilatore che trasforma il codice TDL in efficiente codice C++ indipendente dalla piattaforma (platform-indipendent) che invoca la libreria Task Control Management (TCM) per gestire gli aspetti task-control del sistema robotico. Sia TDL che la libreria TDM sono entrambi fortemente influenzati dal lavoro originario della Carnegie Mellon University di Pittsburgh riguardante lo sviluppo di una nuova architettura di controllo orientata al compito, ovvero la Task Control Architecture TCA (1988-1994). Il codice TDL può essere compilato usando solo un compilatore C++ standard e poi collegato (link) con la libreria TCM. Questo approccio ha diversi vantaggi. Primo, si può approfittare dei diffusi compilatori C++, altamente ottimizzati, per produrre codice efficiente per il controllo task-level indipendente dalla piattaforma. Secondo, questo permette al codice TDL di interfacciarsi facilmente al codice C e C++ esistente, comprese le funzioni che usano la libreria TCM direttamente). Per realizzare una simulazione occorre prima scrivere dei “task” in linguaggio TDL, che permette di specificare le istruzioni di movimento e le operazioni da effettuare in modo molto simile a quanto è in grado di fare un linguaggio di programmazione di alto livello orientato al robot. La sintassi è molto simile al linguaggio PDL2 di COMAU, particolare giustificato dalla stretta collaborazione tra le due aziende. È possibile realizzare i task in modo interattivo attraverso il menù “tdl” o in modo manuale con un editor di testo. La regola generale per realizzare una simulazione è scrivere un task per ogni meccanismo e sincronizzare le operazioni tramite le istruzioni WAIT e SIGNAL su segnali specificati in un apposito file di comunicazione. È possibile generare oggetti nello spazio di lavoro e sostituire un oggetto con un altro, particolare utile per realizzare la simulazione ciclica della lavorazione di un pezzo. Ad esempio è possibile

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

6

generare un pezzo grezzo su di un nastro trasportatore, farlo afferrare da un robot che lo carica su una macchina. Al termine della lavorazione della macchina si sostituisce il pezzo grezzo con il pezzo lavorato in modo da dare l’impressione visiva della lavorazione avvenuta. STRUTTURA DEL GENERICO TASK È necessario scrivere un file TDL per ogni task. I task hanno una sezione di dichiarazione delle variabili ed una sezione eseguibile. La struttura tipica è: task of mechanism; <dichiarazione variabili> begin <sequenza di istruzioni>; --questo è un commento nomeproc(); <sequenza di istruzioni>; end; procedure nomeproc(); --subroutine <dichiarazione variabili locali> begin <sequenza di istruzioni>; end; end of task; La prima riga definisce il meccanismo a cui si riferisce il task. La prima sezione di dichiarazione variabili contiene le variabili globali, visibili cioè sia nella sezione principale che nelle subroutine. La sezione di codice compresa tra la prima coppia di begin ed end è il blocco principale. La seconda coppia di begin ed end rappresenta la sequenza di istruzioni della procedura nomeproc che può disporre di variabili locali. La procedura nomeproc è una subroutine che viene richiamata nel blocco principale, permettendo di raggruppare operazioni ripetitive in modo comodo ed efficace. CONTROLLO DEL FLUSSO DEI DATI Il linguaggio TDL mette a disposizione una serie di strutture di controllo molto simili a quelle messe a disposizione dai più comuni linguaggi di programmazione di alto livello, di seguito descritte.

• IF, l’istruzione IF permette di eseguire una scelta tra due gruppi di istruzioni a seconda del valore di un’espressione (ad esempio a == b).

if boolean_exp then

<istruzioni> else

<istruzioni> end if;

Il corrispondente diagramma di flusso (flowchart) è il seguente.

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

7

• SELECT, l’istruzione SELECT permette di eseguire una scelta tra n gruppi di istruzioni

a seconda del valore assunto da un’espressione. select espressione of case intval1: <istruzioni> case intval2: <istruzioni> default: <istruzioni> end select; Il corrispondente diagramma di flusso è il seguente.

• FOR, l’istruzione FOR permette di ripetere un gruppo di istruzioni un numero intero,

noto, di volte. for int_var = start_val to end_val <BY step_val> do <istruzioni> end for;

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

8

Il corrispondente diagramma di flusso è il seguente.

• WHILE, l’istruzione WHILE permette di eseguire un gruppo di istruzioni finché

un’espressione è vera. Si differenzia da REPEAT poiché, se l’espressione è inizialmente falsa, il gruppo di istruzioni non viene mai eseguito.

while expression do <istruzioni> end while; Il corrispondente diagramma di flusso è rappresentato nella seguente figura.

• REPEAT, l’istruzione REPEAT permette di eseguire un gruppo di istruzioni finché

un’espressione è vera. Si differenzia da WHILE poiché, se l’espressione è inizialmente falsa, il gruppo di istruzioni viene comunque eseguito una volta.

repeat <istruzioni> until expression;

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

9

Il corrispondente diagramma di flusso è:

È possibile effettuare un ciclo infinito utilizzando la parola chiave FOREVER. repeat <istruzioni> forever; • GOTO, l’istruzione GOTO permette di effettuare un salto incondizionato ad un punto

del codice identificato da un’etichetta. Per definire una etichetta occorre far eseguire al nome dell’etichetta l’identificatore “:”.

goto label; <istruzioni> label: <istruzioni> Il corrispondente diagramma di flusso è:

ISTRUZIONI Le istruzioni TDL sono innumerevoli, per cui vengono descritte le più comuni. • L’istruzione GENERATE crea un oggetto in un punto della cella. La sintassi è:

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

10

GENERATE oggetto NAME nome_oggetto REL lo1; Crea un oggetto del tipo oggetto asegnandoli il nome nome_oggetto il cui riferimento base è sovrapposto alla locazione lo1. • L’istruzione ATTACH connette in modo rigido due oggetti. La sintassi è: ATTACH nome_oggetto1 TO nome_oggetto2; Connette rigidamente gli oggetti i cui nomi sono nome_oggetto1 e nome_oggetto2. • L’istruzione DETACH sconnette due oggetti precedentemente connessi con l’istruzione

ATTACH. La sintassi è: DETACH nome_oggetto1; Sconnette nome_oggetto1 da, in questo caso, nome_oggetto2. • Il comando TRANSFER sposta un oggettto da una locazione ad un’altra ad una velocità

specificata. La sintassi è: TRANSFER nome_oggetto TO lo2 $TRANSPEED=2000; Sposta nome_oggetto dalla locazione attuale alla locazione lo2 ad una velocità di 2000 mm/s. • Il comando SHIFT effettua lo spostamento di un oggetto lungo un vettore specificato. La

sintassi è: SHIFT nome_oggetto BY vec(x,y,z); Sposta nome_oggetto lungo il vettore di componenti x, y, z. • Il comando DELAY imposta una pausa nell’azione. La sintassi è: DELAY 20; Effettua una pausa di 2 millisecondi. È utile per tenere conto dei tempi di lavorazione. • Il comando MODIFY sostituisce un oggetto con un altro oggetto. La sintassi è: MODIFY nome_oggetto1 TO nome_oggetto2; Sostituisce nome_oggetto1 con nome_oggetto2. • Il comando TAKE viene utilizzato per permettere il collegamento di un oggetto ad un

robot. Questo permette ad un robot di afferrare un oggetto. La sintassi è: TAKE nome_oggetto; Connette in modo flessibile nome_oggetto al robot a cui il task si riferisce. • Il comando LEAVE viene utilizzato per rilasciare l’oggetto preso con TAKE. La sintassi

è: LEAVE nome_oggetto; Rilascia nome_oggetto nella posizione in cui si trova. • Il comando REMOVE elimina un oggetto. La sintassi è: REMOVE nome_oggetto; Elimina nome_oggetto dallo spazio di lavoro. • Il comando MOVE permette il movimento di un oggetto dotato di cinematica, ad

esempio un robot. È possibile specificare una locazione oppure una particolare “posa”. La sintassi è:

MOVE lo1; Posiziona il robot in modo che il TCP sia sovrapposto alla lo1. MOVE HOME; Posiziona il robot in modo che i singoli assi assumano la posizione precedentemente registrata con il nome HOME. • Il comando SIGNAL permette di variare lo stato di un segnale di sincronizzazione. La

sintassi è: SIGNAL nome_segnale = ON; Varia lo stato di nome_segnale in ON. • Il comando WAIT arresta l’esecuzione del task finché il segnale specificato non diventa

ON. La sintassi è: WAIT nome_segnale;

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

11

Arresta l’esecuzione del task finché nome_segnale non diventa ON. • Il comando forever permette la ripetizione infinita del task. La sintassi è: forever; La dichiarazione di variabili viene effettuata premettendo la parola riservata var. Ad esempio: var scatola : compmodel; --crea una variabile oggetto i : integer; --crea una variabile di tipo integer Il linguaggio TDL è in grado di manipolare svariati tipi di dati tra i quali: boolean integer real string location compmodel compname ... PROCEDURE E FUNZIONI È possibile definire sottoprogrammi che raggruppino sequenze di istruzioni ripetitive così da velocizzare e semplificare la stesura del codice. Il TDL distingue tra procedure e funzioni: sono entrambe raggruppamenti di istruzioni ma la differenza risiede nel fatto che una funzione ritorna un valore al programma chiamante. Tali sottoprogrammi possono richiedere o meno argomenti. Occorre ricordare che le funzioni vanno dichiarate nella sezione dichiarazioi globali; ad esempio: var name() : location; è una funzione che ritorna delle grandezze location. La generica procedura è: procedure name (i: integer); <variabili locali> begin <istruzioni> end name; la generica funzione è: funzione name (i: integer) return integer; <variabili locali> begin <istruzioni> return(expression); end name;

Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

12

GENERAZIONE DELLA SIMULAZIONE Una volta preparati i file TDL è necessario compilarli per ottenere il file di simulazione che avrà estensione .s e che potrà essere eseguito. Per fare questo occorre attivare il menù “simulation” che consiste in due sottomenù principali: “execution” e “preparation”. Utilizzando il comando “open simulation” si crea il file simulazione, inizialmente vuoto, che si vuole realizzare. Attraverso “include task” è possibile specificare tutti i file TDL necessari. È stato già accennato al fatto che i task sono sincronizzati da segnali, e proprio per questo è disponibile il comando “signal table” che permette di creare il file di connessione. Se la compilazione va a buon fine viene preparato il file di simulazione. Attivando il sottomenù “execution” è possibile caricare la simulazione ed eseguirla. Tra le altre cose, nella finestra dei messaggi, è disponibile un cronometro che permette di misurare la durata di ciascuna fase della lavorazione. FUNZIONI AVANZATE Tra le funzioni di utilità di ROBCAD va ricordata la possibilità di gestire le collisioni e la possibilità di effettuare l’analisi di raggiungibilità del robot. Nella finestra di supporto è presente un’icona delle collisioni che, se attivata, permette di attivare un allarme o bloccare la simulazione nel caso che si verifichi una collisione tra gli oggetti presenti nella cella. Questa funzione è un utile supporto alla progettazione della cella in quanto permette di verificare eventuali problemi di ingombro o eventuali errori che possono essere commessi nella gestione del robot. ROBCAD gestisce le collisioni in modo automatico, ma quando gli oggetti in una cella sono molti è consigliabile preparare una lista degli oggetti per i quali verificare eventuali collisioni. Una funzione di utilità molto importante è quella che consente la ricerca della posizione di installazione ottimale di un robot. Una volta assegnate le posizioni che devono essere raggiunte dal manipolatore si predispone una griglia sul pavimento opportunamente spaziata. Il programma verifica, installando il robot in ciascun punto della griglia, quali posizioni sono raggiungibili e quali no individuando le posizioni di installazione che permettono di ottenere il miglior risultato.