Guida Coppeliasim
Guida Coppeliasim
INTRODUZIONE
Disegnando con Fusion360 le geometrie si esportano facilmente con il formato *.stl. All’interno di
Fusion360 le parti che non hanno moto relativo potrebbero essere unite in un unico corpo. In quel
caso però all’interno di Coppeliasim si avrà un unico corpo con caratteristiche di visualizzazione
relative all’intero corpo. Se si vuole che le diverse parti, che comunque non hanno moti relativi,
risultino distinguibili le une dalle altre attraverso colori diversi e/o altre caratteristiche di
visualizzazione (per avere una simulazione più realistica), allora le diverse parti vanno lasciate
separate in Fusion360 e poi andranno unite all’interno dell’ambiente Coppeliasim. Le parti ance se
sono separate, a volte, richiedono di essere non combacianti ma leggermente distanti. A volte
succede ce l’algoritmo di traduzione STL unisce due corpi con superfici combacianti. In quel caso è
sufficiente distanziare un poco le parti (ad esempio di 0.1 mm).
Per importare il file delle geometrie *.stl si va al menù file/import/mesh, si punta al file di geometria
nel PC e si apre. Nell’importazione si può dover impostare un opportuno fattore di scala. La
geometria è importata come unica “Shape”. Si nota infatti un nuovo elemento nella “scene
hierarchy” denominato “Shape”. Questo è un buon momento per disporre la geometria importata
nella posizione ed orientamento desiderati.
Una volta nella giusta posizione la geometria può essere “divisa” nelle diverse parti che la
compongono. Si seleziona il corpo dall’albero e col tasto destro del mouse si seleziona
edit/(Grouping / Merging)/Divide selected shapes.
A questo punto si hanno tutti i corpi separati come lo erano all’interno di Fusion360. Questo è il
momento per differenziare i corpi per caratteristiche di visualizzazione.
Quando le geometrie sono pronte è possibile raggruppare i corpi che non devono avere moti relativi
a formare un unico blocco.
Questo si esegue selezionando i corpi che vanno raggruppati (dall’albero o dalla scena) e, col mouse
sulla selezione, si clicca il tasto destro che apre una finestra da cui si da il comando edit/(Grouping /
Merging)/Group selected shapes.
A questo punto si possono effettuare i collegamenti tra le varie parti tramite i giunti.
Col mouse nell’albero, col tasto destro, si attiva una finestra da cui si può scegliere add/joint/ e si
può indicare prismatic, revolution, spherical. Si trova così l’icona del giunto e questa può essere
cliccata a trascinata col mouse fino alla posizione voluta nella gerarchia dell’albero dovendosi
intendere che il giunto collega il padre, parte al di sopra del giunto, al figlio, parte al di sotto del
figlio. Le parti anche esse possono essere spostate nelle gerarchia col mouse con “clicca e trascina”
nella posizione voluta.
Il giunto quando viene creato, nell’ambiente virtuale, viene posizionato in una posizione e con
orientamento standard. Per spostare ed orientare correttamente il giunto questo va selezionato e
spostato/ruotato mediante i tasti dei comandi sposta e ruota . Con questi comandi si apre
una finestra che permette di muovere l’oggetto trascinandolo col mouse oppure mediante
inserimento delle coordinate. Cliccando due volte sul giunto dall’albero gerarchico è possibile
cambiarne le sue caratteristiche. Si apre una finestra e nel tab “joint” si possono cambiare le
dimensioni dell’oggetto che rappresenta il giunto e premendo il tasto “dynamic properties dialog” è
possibile impostare le caratteristiche del controllo del giunto (posizione, velocità forza, molla,..).
Se il sistema è con base fissa, al corpo che è base fissa si assegna il nome “base” e si posiziona come
figlio del corpo “box” che è presente alla creazione di un nuovo documento.
Le caratteristiche dei corpi possono essere impostate cliccando due volte col mouse sul corpo
nell’albero. Si apre la finestra “Scene Object Properties”. Qui, nel tab “Shapes”, cliccando su
“dynamic properties dialog” è possibile impostare “Body dynamic” a cui si applica il segno di spunta.
Si attivano alcune regolazioni come ad esempio la massa. Il segno di spunta di cui sopra va applicato
a tutti i corpi tranne che al corpo base.
Nel momento in cui il modello è pronto si può provare a muovere i giunti. Questi vanno caratterizzati
per il comportamento. Possono essere assegnate caratterisrice come: free, spring, position, velocity,
torque. Ognuno di questi stati va caratterizzato con parametri e cui sono comunque assegnati valori
di default. Ad esempio un giunto può essere impostato come velocity e assegnando il alore al
parametro velocity, all’avvio della simulazione il giunto prenderà a muoversi con la velocità
assegnata. Allo stesso modo ruoterà dell’angolo impostato se il giunto sarà caratterizzato come
position.
Per la programmazione va aggiunto uno script al progetto. Lo script può essere aggiunto a
qualunque dei corpi presenti nell’albero e questo riguarderà comunque tutti gli oggetti presenti
nell’albero. Una possibilità è di aggiungere uno script al corpo “base”.
SCRIPT
Per aggiungere lo script si clicca col destro del mouse sul corpo “base” e si da il comando
add/associated child script/Non threaded/Lua. Lua è un linguaggio di programmazione molto facile
da apprendere. Il comando genera una icona a fianco del corpo “base”.
All’interno dello script (cliccandoci due volte si visualizza lo script) ci sono quattro funzioni. Le due
più importanti sono le prime due. La prima svolge compiti di inizializzazione. La seconda è per il
controllo e contiene comandi che vengono eseguiti ciclicamente, di continuo.
Con il software nello script si può agire sui giunti. I comandi si trovano in help/User manual/writing
code/CoppeliaSim API Framework/Regular API reference/.
I comandi sono raggruppati per funzioni. Ad esempio c’è il gruppo Dynamics all’interno del quale
troviamo i comandi per gestire i giunti come sim.setJointTargetPosition o
sim.setJointTargetVelocity (per l’utilizzo si veda sul manuale). Questi permettono di
assegnare una posizione o una velocità al giunto in indirizzo. I valori possono essere cambiati anche
molto rapidamente da un valore all’altro, ad esempio, attraverso una procedura software che ne
generi i valori. Se si assegnano Posizioni il giunto deve essere preventivamente caratterizzato come
Position dall’ambiente CoppeliaSim. Lo stesso per velocità e per gli altri tipi di comportamento.
Una possibilità è quella di utilizzare un microcontroller che riceva i dati dalla periferica e che li invii
tramite porta seriale a Coppeliasim. Per fare questo, dal lato controller va predisposto un software in
grado di gestire la periferica ovvero controllarla per acquisire i dati e inviarli via collegamento seriale.
Dall’altro, all’interno di Coppeliasim, è necessario predisporre il codice in grado di leggere i dati da
una porta seriale, in tempo reale, e utilizzarli all’interno della simulazione.
Ad esempio con Arduino UNO per la trasmissione seriale è possibile utilizzare il codice seguente che
funziona sia col monitor seriale dell’IDE che per ogni altro software in ascolto sulla porta indicata.
Questo codice predispone la comunicazione seriale a 9600 baud e compie un ciclo for che fa
aumentare il valore della variabile i progressivamente, inviando il valore attuale alla porta seriale.
Tra un invio e il successivo c’è una attesa di 50 ms. La porta alla quale invia è la porta a cui è
collegato il microcontroller.
Dal lato Coppeliasim il codice in grado di acquisire i dati prodotti secondo il processo di cui sopra è il
seguente.