venerdì 21 settembre 2018
Home / Corsi / Corso Python / MeArm : Costruiamo un braccio robotico

MeArm : Costruiamo un braccio robotico

Introduzione

Con queste guide andremo ad analizzare l’uso dei servomotori con Raspberry Pi, e lo faremo grazie al braccio robotico MeArm, disponibile anche su Thingverse, o distribuito in kit con tutti i pezzi necessari, prodotto da Mime Industries, nel nostro caso, distribuito da Kubii, che ringrazio per aver permesso la realizzazione di queste guide.

E’ un modo divertente per approcciarsi all’uso dei servomotori con la nostra scheda preferita, realizzando un oggetto concreto, che comporta anche una certa fase di montaggio.

Teoria

I servomotori (o “servo”, per gli amici) non sono altro che piccoli motori, montati dentro una piccola scatoletta che solitamente comprende anche una riduzione meccanica del numero di giri (motoriduttore) e che gli consente di essere comandato a impulsi.

servomotore
Signori e signore.. un servomotore! – This file is licensed under the Creative Commons Attribution-Share Alike 2.0 Generic license. From Wikimedia

Infatti La posizione del servomotore è direttamente dipendente dalla lunghezza dell’impulso di comando.

Qui useremo servomotori angolari, quindi, più che di posizione, è più corretto parlare di angolo del rotore del servomotore. Naturalmente parliamo di lunghezze d’impulso (e quindi di tempi) molto brevi: solitamente un servo si aspetta di ricevere un impulso all’incirca ogni 20 millisecondi.

Se quell’impulso è a livello logico alto (quindi se la durata dell’impulso è di) 1 millisecondo, allora l’angolo del servo sarà zero, se è di 1.5 millisecondi, allora sarà nella sua posizione centrale e se è di 2 millisecondi sarà a fondo scala (solitamente 180 gradi).
impulsi

Per inviare questi treni di impulsi, possiamo usare la modulazione PWM sui nostri pin GPIO di Raspberry Pi.

L’uso dei servomotori è il passo di ingresso in uno dei tanti, affascinanti, mondi che Raspberry Pi ci consente di esplorare: la robotica.

Raspberry Pi, infatti, ci consente di legare l’informatica al mondo fisico reale, e il servomotore (o i motori, in generale) non sono nient’altro che i “muscoli” di Raspberry Pi, nel mondo reale.

MeArm

Mearm
MeArm – This file is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported license. From Wikimedia

Premessa: essendo MeArm un oggetto che si può anche realizzare totalmente da soli, e esistendo in varie versioni, dalla 0.4 alla 1.1, con versioni specifiche per alcuni dispositivi (esiste ad esempio una versione MeArm Pi, dedicata all’uso con Raspberry, che contiene un HAT dedicato), in rete c’è molta confusione su questo oggetto, con una miriade di istruzioni di assemblaggio e tutorial diversi tra loro.

Questo articolo si riferisce a MeArm v 1.1 generico, cioè la versione denominata “Nuka Cola Blue“, in plexiglass trasparente e blu, che è quella distribuita da Kubii.

Unboxing

Scatola MeArm

MeArm arriva in una piatta scatola di cartone, ove trovano posto quattro piccole lastre di plexiglass tagliate al laser, da cui vengono ricavati tutti i componenti del braccio, 4 servomotori angolari, un cavetto di prolunga, un set di bulloncini di varie misure e relativa brugola, e un paio di foglietti illustrativi.

Contenuto

Oltre al contenuto della scatola, quello che serve per il montaggio è: un RaspberryPi, una alimentazione esterna a 6V in corrente continua che sia in grado di erogare almeno 2,5A (o un pacco di 4 batterie da 1,5V), un cacciavite a stella piccolo. Io, per semplicità, ho utilizzato una scheda di controllo PWM I2C basata su PCA9605. Davvero comoda se dovete comandare più servo contemporaneamente. Ah, scordavo, servono anche tanta pazienza, e questa guida.

Si, perché sebbene sulla scatola vi sia indicato di visitare http://www.MeArm.com per le istruzioni, se volete risparmiarvi un po’ di mal di pancia, è meglio se proseguite nella lettura.

Infatti il sito ufficiale di MeArm contribuisce non poco a alimentare quella confusione di cui accenavo sopra: link ridondanti, per ottenere un tutorial per Raspberry occorre arrivare al quinto livello di link, cioè aprire una pagina, in cui c’è un link che ne apre un’altra, in cui c’è un link che ne apre un’altra ancora, e così via fino al quinto livello. Inoltre i listati Python riportati hanno perso l’indentazione, sono quindi riportati con una impaginazione non funzionante.

Da queste sbavature (non proprio piccole) si comprende che i produttori del kit hanno molta più dimestichezza con Arduino e che il supporto per Raspberry Pi è decisamente superficiale.

Montaggio

Vi ho già detto due cose poco rassicuranti: 1) esistono molte versioni di questo braccio robotico, e in rete c’è molta confusione; 2) il sito ufficiale del MeArm è caotico e non di grande aiuto. Ma non tutto è così disperato come sembra: ho già percorso io le strade sbagliate al vostro posto, e sono qui per indicarvi quelle giuste.

Le istruzioni di montaggio da seguire come riferimento, sono riconducibili a questo filmato:

Purtroppo sono in inglese, e prive di sottotitoli, ma sono abbastanza chiare da seguire. Qualche nota a cui fare attenzione:

  • prestate attenzione ai bulloncini utilizzati, ve ne sono di diverse lunghezze (6, 9 e 12mm) attenzione a non scambiarli
  • nel video, il maker si dimentica di togliere la pellicola protettiva alle parti in plexiglass. Voi invece fatelo, prima di montarle: altrimenti, oltre a essere esteticamente bruttine, con le bruciature del taglio laser, a montaggio ultimato le pellicole plastiche causeranno una certa frizione che impedirà un fluido movimento delle parti mobili!
  • nel video, viene saltato il passo 4 per errore, che consiste nell’applicare i piedini in gomma adesivi alla base.
  • tutti i bulloncini dei bracci mobili, non vanno mai serrati a fondo, altrimenti ne viene impedito il movimento. Quando invece serrate i bulloncini delle parti fisse (ad esempio la “culla”rotante alla base) girate fino al bloccaggio, ma state attenti a non insistere: si tratta pur sempre di plexiglass ed è facile danneggiarlo o deformarlo stringendo troppo.
  • questo video, è dedicato all’uso con Arduino, quindi tenetelo buono solo per il montaggio del braccio robotico, e non nella parte finale

In più, rispetto al video, io ho apportato qualche modifica “meccanica” al MeArm in mio possesso:

  • l’ultima rondella spaziatrice non la ho posta sul braccio che tiene la testina della pinza, la ho invece messa sulla vite che vincola le ganasce della pinza al servomotore relativo, altrimenti vi è uno spazio vuoto. Mi sembra più solido così.
  • a braccio piegato, in corrispondenza di quello che sarebbe il “gomito” del braccio robotico, troviamo due snodi, uno con lo spessore di due strati di plexiglass e l’altro con tre, Ho dovuto sostituire il bulloncino del primo di questi snodi con uno più lungo, passante, con relativo dado, causa scarsa tenuta. E’ uno dei punti più sollecitati di tutto il dispositivo.
  • ho approfondito di uno o due millimetri le due cave semicircolari presenti sul pezzo trasparente posto anteriormente sulla culla. Servono a permettere la rotazione dei braccetti, ma di serie non sono così accentuate da scongiurare attriti con essi

Alcune fasi del montaggio

Se vi piace il modellismo, o i Lego, o le costruzioni meccaniche o da piccoli vi piaceva il Meccano, avrete da divertirvi. Se non sapete cosa era il Meccano… fatevelo spiegare da chi è più vecchio di voi.

Seguite il video passo-passo, anche se vi è un punto, in cui anche l’autore del video si ferma un attimo, avendo un pezzo diverso rispetto alle istruzioni ufficiali. Alla fine, il montaggio proposto nel video è quello corretto.

Prima però di cominciare il montaggio, è indispensabile effettuare la..

Calibrazione dei servo

In che senso calibrazione? Bé, i servomotori saranno montati su una struttura meccanica complessa, e non tutti i servo possono avere la stessa posizione angolare di partenza, o avere lo stesso range angolare di lavoro.
Quindi è bene impostare ogni servomotore alla sua posizione iniziale, e etichettarlo, prima del montaggio.

E’ una operazione importantissima, e vi eviterà di danneggiare i servomotori cercando di farli andare oltre la loro corsa normale.

Se questo kit fosse quello dedicato a Raspberry Pi, il MeArm Pi, per effettuare la calibrazione basterebbe collegare i servomotori e premere un tasto, Se utilizzassimo Arduino, basterebbe scaricare lo script dal sito, ma con questo kit è un tantino più complicato..
Come avrete capito, è la fase più critica di tutto il montaggio, e quella più oscura.

Come già accennato, infatti, le informazioni per Raspberry Pi sono incomplete e caotiche. Ma non preoccupatevi. Le nottatacce le ho già fatte io, per voi. Quindi eccovi questi agognati valori.
Considerando la posizione angolare dei servomotori come gradi da sinistra a destra da 0 a 180, vanno così impostati, prima del montaggio:

  • Servo 0 (Base rotante): 90 gradi (corrispondente alla posizione centrale)
  • Servo 1 (Lato destro: spalla): 90 gradi (corrispondente alla posizione centrale)
  • Servo 2 (Lato sinistro: gomito): 90 gradi (corrispondente alla posizione centrale)
  • Servo 3 (Pinza): 25 gradi (corrispondente a -65 gradi dalla posizione centrale)

Come notate, i primi tre valori sono uguali, e corrispondono al centro esatto della corsa del servomotore. Spesso questa posizione viene indicata come zero (considerando una estensione angolare di tipo -90°, 0, +90°) e questo può fuorviare.

Per raggiungere queste posizioni iniziali, si può usare qualsiasi metodo, tranne quello di far ruotare fisicamente il perno dei servomotori applicando una torsione su di esso. Sono molto delicati e occorre applicare una certa coppia per riuscire a ruotarli. Ma non fatelo: rischiate di danneggiare gli ingranaggi del motoriduttore interno. Sebbene con il solo servomotore è difficile farlo ruotare anche accidentalmente, quando vi è montato sopra un braccio anche di una certa lunghezza, la leva è tale che ruotarlo inavvertitamente in fase di montaggio diventa un pericolo plausibile, quindi mi raccomando, fateci attenzione. Una volta completato il braccio, inevitabilmente, per provare i leverismi o mettendoci mano, capiterà di muovere i bracci. Fatelo sempre con delicatezza e molta attenzione per non applicare forze eccessive ai servomotori.

Occorre quindi far girare il servomotore con specifici, accorti comandi. O dell’ hardware specifico. Il metodo più pratico, a mio avviso, è utilizzare un prova servomotori come questo:

tester

economico, ma molto, molto utile. Oltre al comando manuale con potenziometro, integra infatti anche il posizionamento automatico nella posizione centrale o l’escursione automatica tipo “bandiera”, per verificare la funzionalità del servomotore.

Un altro metodo, naturalmente, è quello di collegare il servomotore al Raspberry Pi e comandarlo da esso per istruirlo in che posizione mettersi. Per non confondersi, conviene farlo un servo alla volta, e marcare poi ogni servo con il proprio nome. Ad esempio, con Python:


from gpiozero import AngularServo
servo = AngularServo(17)
servo.angle = 0 # posizione centrale

17 è il pin a cui è collegato il filo del segnale del servomotore (gli altri due, Vcc e GND andranno rispettivamente al +5V e a massa), 0 è l’angolo in riferimento alla posizione centrale.

Quando comandate i servomotori da Raspberry Pi, noterete un certo tremolio, è dovuto alla libreria RPi.GPIO, utilizzata internamente da GpioZero. Poi vedremo come sostituirla con una diversa che ha una gestione migliore dei servomotori e un tremolio molto meno accentuato, ma per questo scopo, per ora, va bene anche così.

Quindi per i primi tre servomotori siamo a posto: o con l’accessorio hardware o con il codice, è facile metterli a 0 (posizione centrale). il quarto, però, quello della pinza, non è così semplice.

Calibriamo quindi i primi tre servomotori alla posizione centrale, mentre il quarto a -65 (o 25 gradi, a seconda del riferimento). Quest’ ultimo lo potete anche fare anche approssimata a occhio, con l’accessorio di cui sopra, non è critico che sia preciso al grado, in quanto in fase di montaggio vi verrà naturale aggiustarlo alla posizione corretta.

Durante le fasi di montaggio, prestate la massima attenzione che i bracci legati ai servomotori siano esattamente nella posizione indicata e che non si spostino durante l’assemblaggio.

Poi, sinceramente, vedremo come nell’utilizzo di librerie già pronte, la posizione di partenza dei servomotori (soprattutto della pinza) potrebbe essere al di fuori del range meccanico di movimento.
Questo è davvero strano, perché non ho trovato altro modo di montare il servomotore della pinza e assicurare comunque il movimento corretto delle due “ganasce”. Forse le librerie sono scritte per versioni di MeArm leggermente differenti da questa. Quindi, correggetemi pure se trovate parametri di calibrazione migliori, che consentano di avere piena libertà di movimento del braccio, ma che siano compatibili anche con le librerie software dedicate.

Fine prima parte…

Ma non fasciamoci la testa prima del tempo!
Cominciamo a montare correttamente il MeArm, nella seconda parte di questa guida, andremo a scrivere un semplice codice Python che lo muova alla pressione dei tasti di una tastiera collegata al Raspberry Pi, o anche da un computer remoto in SSH.. e molto altro.
Continuate a seguirci!

MeArm su Kubii

Se vuoi restare aggiornato, seguici anche sui nostri social: Facebook , TwitterYouTubeGoogle+Telegram

A proposito di Zzed

Zzed
Appassionato di informatica alternativa, ma perenne novellino di Linux..

Vedi Anche

Musica con Raspberry e DAC: Spotify connect

Se c’è una cosa che mi piace fare quando torno a casa dal lavoro stanco …

Powered by themekiller.com