Industrial arm

Il braccio nasce dall’esigenza di fornire ai miei studi nel campo della robotica industriale un modello fisico su cui applicare i fondamenti di cinematica inversa e pianificazione delle traiettorie.

Il requisito di partenza era per me l’utilizzo di ROS Industrial quale piattaforma software. Da questo punto ho iniziato il progetto, ricercando quanto la rete mette a disposizione.

Ho trovato un paio di design che avrebbero fatto al caso mio:

BCN3D Moveo: la scelta più logica, ma limitato a 5 gradi di libertà.

Green arm di Andreas Hoelldorfer: gran lavoro del maker, ma alcuni punti critici, come i giochi sul polso mi hanno fatto scegliere una strada differente.

RBX1 di Dr. D-Flo: il kit offerto è completo di tutto, guadagnerei un sacco di tempo in fase di progettazione, ma il punto debole è qui la scarsa capacità di sollevamento e i motori troppo “entry level”. Alcuni tremolii sui piccoli spostamenti non mi convincono più di tanto.

Thor di AngelLM: molto interessante nel design dell’articolazione del polso, ma troppo “massiccio”. Questione di gusti.

Dalla collaborazione con Jochen Alt, nasce un progetto nuovo che utilizza i suoi file di stampa opensource riadattati alla mie esigenze. Elettronica completamente personalizzata utilizzando il controller Slush Engine: un progetto kickstarter che permette di gestire tramite Python  fino a 7 motori passo-passo.

Image2_brighter_1024x1024

SlushEngine e Raspberry Pi3

Modellazione

Al fine di utilizzare un’interfaccia utente degna di questo nome il modello virtuale deve essere accurato a quello fisico, ma più leggero in termini di dettaglio, per non gravare sulla CPU nelle operazioni di calcolo. Ho deciso pertanto di utilizzare le stessi parti che ho utilizzato nella stampa 3d, private del dettaglio interno e fuse nelle 6 parti principali

Base – Spalla – Braccio – Gomito – Avambraccio – Polso – Mano

Il punto di partenza è la modellazione tramite Blender per riadattare le parti ridimiensionandole. Fondamentale la pianificazione dei punti di origine che saranno, più avanti, i punti di joint tra le parti

Blender

Modellazione tramite Blender

Stampa

Il secondo passaggio è stato l’esportazione delle parti per la stampa 3D. Le due parti che compongono la base, uscendo dalle dimensioni massime del piatto dalla mia Makerbot, sono state date in outsourcing.

IMG_6902

Le parti che compongono l’avambraccio

Nulla da aggiungere, è la parte più noiosa del processo, alcune componenti hanno richiesto fino a 14 ore per la stampa che procedeva senza interruzione delle 7.00 alle 23.00

File URDF

Tornando a Blender, una volta fissati i punti di origine ed esportati i file .stl in bassa risoluzione (o semplificati) ho iniziato la creazione del file URDF (Universal Robotic Description Format -> http://wiki.ros.org/urdf)

Molto difficile il corretto posizionamento dei joint (le articolazioni vere e proprie) e la conversione dei parametri di scala da Blender (URDF è infatti a-dimensionale).

Ogni joint ha i suoi parametri di rotazione (rispetto agli assi) e di posizionamento. Ha inoltre indicazioni circa l’angolo massimo e quello minimo.

Non ho inserito parametri collisionali, in quanto utilizzerò MoveIt! che li gestisce in autonomia (o quasi…)

urdf

Codice file URDF

Terminata la creazione del file URDF, ho testato il suo utilizzo in rviz (http://wiki.ros.org/rviz).

Non malaccio! Ho associato ad ogni joint ha uno slider con i valori che può assumere. Al trascinamento di questi la parte corrispondente eseguirà il movimento dato. Esiste poi la possibilità di tornare alla posizione di default o di eseguire pose casuali semplicemente con la pressione dei due bottoni corrispondenti,

 

Interfaccia di controllo

Una volta sistemato rviz ho provato ad addentrarmi nella cinematica inversa utilizzando MoveIt!.

Sostanzialmente (evitando tutta la parte di configurazione) muovendo la mano del robot il braccio la seguirà. Anzichè modificare tutti gli angoli di ogni singola componente, sarà compito della Cinematica Inversa calcolare gli angoli di tutte le parti per portare la mano nella posizione desiderata.

 

Assemblaggio

Parallelamente alla programmazione dell’interfaccia procedo all’assemblaggio e alla rifinitura della componente meccanica (cinghie e ingranaggi) che avevo trascurato durante la fase di progettazione.

 

 

 

 

Aggiornamento agosto 2018

Il progetto, seppur valido, ha subito il colpo del fallimento dell’azienda che ha prodotto lo SlushEngine. A causa del mancato supporto e di aggiornamenti con bug piuttosto importanti (uno dei quali ha causato la distruzione di un canale output e il danneggiamento del motore stepper collegato) mi trovo costretto ad accantonarlo.

Al momento la sostituzione dell’elettronica richiederebbe una riprogettazione di parti del braccio (per accogliere i sensori di posizione). Preferisco dedicare ad altro le mie poche risorse

Lesson learned. Niryo tocca a te!