Sei sulla pagina 1di 13

Ing.

Fabio Calegari

Esempio di prodotto per la simulazione robotica

Introduzione all’utilizzo di
ROBCADTM
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari
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.

1
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari
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.

2
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari
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

3
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari
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.

4
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

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

5
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

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.

6
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

• 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;

7
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

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;

8
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

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 è:

9
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

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;

10
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

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;

11
Introduzione all’utilizzo di ROBCADTM Ing. Fabio Calegari

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.

12

Potrebbero piacerti anche