Manipolatore Planare a due bracciData di pubblicazione: 11-04-2005 | Versione Italiana | (No English Version) Parole chiave: - BX24 - Domotica - How-To - |
Manipolatore planare a due bracci con BX-24
Un fantastico progetto di Antonello Galanti: un robot manipolatore basato su BX24, in grado di muoversi su un piano di 20cm di raggio; può disegnare funzioni matematiche o operare come "emulatore" dei movimenti di un braccio gemello mosso manualmente. Una dimostrazione di come sia possibile sfruttare pienamente tutte le caratteristiche del BX24 anche per progetti complessi.
Per contattare l'autore di questo articolo è possibile scrivere a: Antonello Galanti, [email protected]
Apparati hardware
Un robot manipolatore è una catena cinematica sequenziale aperta * composta da corpi rigidi (link) uniti da giunti (attuatori).
Questo manipolatore planare utilizza un microprocessore BX-24 della NetMedia.
Questo processore è in grado di eseguire 65.000 istruzioni al secondo e supporta il multi-tasking. Il BX-24 possiede 32Kb su EEPROM corrispondenti a 8000 linee BasicX (il suo linguaggio di programmazione è del tipo "orientato ad oggetti"). Può contenere anche variabili permanenti ed ha 400 byte di memoria RAM. I dati non volatili possono essere memorizzati anche sull'EEPROM insieme al programma. Ha 21 linee I/O di cui 16 standard, 2 seriali, 3 non riportati sui piedini. Al suo interno ci sono otto convertitori A/D a 10 bit che accettano segnali in entrata da 0.0V a 5.0V. GLI ADC convertono, linearmente, il valore all'ingresso in un numero a 10 bit (da 0 a 1023).Questo avviene nella forma "integer" (con numeri interi). Contrariamente, quando il tipo di dati scelto per la memorizzazione del valore, è di tipo "float" (virgola mobile), il bx-24 restituisce un valore con range 0.0÷1.0 (adimensionale) .La risoluzione è di 4,9mV. La massima frequenza di campionamento è di 6000 campioni al secondo.
Il processore è montato su una scheda appositamente sviluppata per il manipolatore.
La scheda, insieme al processore, controlla i due servomotori, che sono montati sui bracci del manipolatore. I particolari realizzativi di questa scheda saranno pubblicati in un futuro articolo.
Il controllo dei servo motori avviene mediante un treno d'impulsi PWM (Pulse Width Modulation). Questi impulsi, una volta inviati agli attuatori, impostano un Set-Point nella circuiteria di controllo interna ad essi. Questo circuito provvede anche alla retroazione del posizionamento dei motori (il controllo di posizione avviene mediante un potenziometro "a rotazione" interno ai servo).
I servo che abbiamo utilizzato sono i "B-305" della "PROTECH". Hanno una coppia massima di 3.5kg/cm, velocità massima di 0.20sec/60° e 180° di range. Sono alimentati a 5Vcc. Questi servi sono montati su due bracci fatti di compensato; molto leggeri, resistenti e strutturati in modo tale da ridurre le flessioni che genererebbero, altrimenti, errori nel posizionamento.
Gli attuatori sono stati posizionati sui bracci, in modo tale da avere uno spazio di lavoro il più possibile consono alla nostra applicazione.
L'area di lavoro è racchiusa dall'arco, di raggio 20cm (braccio 1 + braccio 2), sotteso dagli assi. In realtà, il manipolatore, ha uno spazio di lavoro maggiore, ma per tracciare le funzioni che tratteremo, è di interesse solo il primo quadrante.
Funzionamento
Il firmware è stato diviso in blocchi funzionali, riassunti qui di seguito.
Il primo blocco (dinamica) è composto da delle semplici funzioni matematiche (Dinamica = Equazioni di moto).
In un ciclo loop, viene incrementata la variabile X e calcolata la relativa Y. Il delta d'incremento determinerà la velocità d'esecuzione di plotting (il manipolatore opera su un piano cartesiano, su cui è centrato nella posizione (0,0) ).
I fine-corsa, per impedire che il manipolatore si scontri con la sede dove è fulcrato, sono stati implementati a livello software.
Nel caso della funzione matematica per disegnare un cerchio, questo approccio funziona (dividendo il cerchio in 4 archi), ma è inefficiente per almeno due ragioni: innanzitutto si devono computare, ad ogni passo, molte operazioni matematiche complesse; in secondo luogo, per valori di x prossimi a R, o meglio che tendono a R, nel cerchio appariranno intervalli, nel definire Y, sempre più grandi. Ciò è dovuto al fatto che la pendenza (la derivata) del cerchio diventa infinita. (Vedi figura sottostante)
I dati, così calcolati, vengono poi passati al blocco "Calcolo Angoli". Questo blocco si occupa della "Cinematica Inversa", ovvero della traduzione da posizione X,Y (ricavata dal blocco "DINAMICA") a radianti, che saranno assunti dai giunti, per poter puntare la posizione richiesta.
Nei calcoli, si usano i radianti, perché sono nativamente supportati dal processore. Con una semplice formula possiamo portarli in gradi. Questa conversione è stata utile in fase di sviluppo e debug su schermo (funzioni supportate dal bx).
Il blocco "Cinematica Inversa", richiede delle costanti definite dall'utente; per esempio la lunghezza dei bracci e, se si vuole disegnare un cerchio, il suo raggio. Questi dati vengono forniti dal sottoprogramma "DichiarazioniVariabile". (Vedi codice sorgente)
Una volta calcolati gli angoli, i dati vengono passati ad un altro sottoprogramma che provvede alla conversione rad'pwm, mediante la formula:
pulse = (range/(pi/(angolo)))+offset //pulse è l'ampiezza della pulsazione
dove: angolo è il valore in radianti, calcolato dal blocco precedente; la somma di range+offset dà il PWM più ampio (che corrisponde a 180° dei servo) e offset corrisponde al PWM meno ampio (che corrisponde a 0° dei servo).
I valori di ampiezza delle pulsazioni, calcolati dal blocco "Cinematica inversa", vengono scritti in due variabili (una per ogni servo), che sono continuamente controllate da due tasks.
Questi tasks "girano" simultaneamente (per permettere a tutte le parti del robot di muoversi simultaneamente) e provvedono alla generazione degli impulsi sui pin degli attuatori (con una frequenza di aggiornamento di 50Hz).
I servo, non appena ricevuto il treno di impulsi, provvedono al posizionamento. Il controllo di posizione è fatto dall'anello di controreazione interno ai servo. Questo controllo è completamente trasparente al processore.
Anche se poco necessario, dato l'altissima velocità di esecuzione del processore, viene sempre aggiornata prima la variabile relativa agli impulsi per il Servo 2. Questa scelta è stata fatta perchè il Servo 2 ha un peso maggiore da muovere; quindi inerzia maggiore di quella relativa al Servo 1.
Il manipolatore come inseguitore
Oltre a disegnare funzioni matematiche questo manipolatore è in grado di imitare i movimenti di un altro braccio gemello, azionato da un operatore. Il robot segue i movimenti e le accelerazioni, del primo braccio (azionato a mano), con un moto molto preciso.
In questo caso il processore, tramite i convertitori A/D, campiona, 6000 volte al secondo, la tensione ai capi dei potenziometri. Questo campionamento genera un valore compreso tra 0.0 e 1.0. L'andamento di questo valore è lineare con lo spostamento dei potenziometri ed è convertito in pulsazione, mediante la formula:
Pulse = (range(PosizionePotenziometro * Range)) + OffSet.
dove "PosizionePotenziometro" è il valore (0.0÷1.0) restituito dai convertitori analogico/digitale.
Errori ed approssimazioni
La notevole profondità di calcolo dell'apparato, ha permesso di limitare gli errori di calcolo per approssimazione (tranne gli errori sopra citati riguardo al calcolo della Y nella funzione di plotting circolare).
I servo, che abbiamo utilizzato, hanno un piccolo gioco che, riportato alla lunghezza del braccio, risulta essere di 2-3 mm. Questo farà sì che, entro questo range di valore, il controllore (interno ai motori) non si accorgerà dello spostamento del braccio, perciò non provvederà al riposizionamento (è da far notare che i servo, una volta ricevuto il Set-Point, permangono nella relativa posizione e, in caso di sollecitazioni esterne, provvedono al riposizionamento).
L'accuratezza del manipolatore deriva anche dalla velocità d'esecuzione impostata (delta di incremento di x). Inoltre, se incremento X a "grandi passi", si avranno dei valori di pulsazione molto diversi per ogni istante di tempo. Per seguire questi valori, i servo motori, andranno alla massima velocità con un moto non controllato nel dettaglio, introducendo così molti errori. Contrariamente, se il delta è molto piccolo, la pulsazione sarà simile negli istanti di tempo (perciò i servo si muoveranno lentamente).
Per quanto riguarda la funzione di "imitazione" ci troviamo davanti ad una non linearità dei movimenti del manipolatore nei confronti del suo braccio "di comando". Questo è dovuto al range di movimento dei potenziometri, che risulta essere maggiore di quello dei servo (180°). Il problema può essere risolto con una linearizzazione software, ma avrei perso in sensibilità.
Per questa applicazione dimostrativa, ho deciso di trascurare questo errore.
Download
Segnala questo articolo:
Parole chiave: - BX24 - Domotica - How-To -
|