BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   Braccio robot (https://www.baronerosso.it/forum/circuiti-elettronici/127660-braccio-robot.html)

marcosinatti 02 aprile 09 23:54

Braccio robot
 
Mi stò organizzando per costruire un piccolo braccio robotizzato con movimenti tramite servi.
Su internet è un argomento abbastanza battuto, youtube è pieno di filmati, ma non ho trovato informazioni riguardanti un particolare.
In tutti i progetti, il mio compreso, c'è un sw su pc che si occupa di calcolare le posizioni da comandare ai servi, poi di spedirle ad un microprocessore (su serioale o usb) e il micro si occupa di muovere i servi.
In questo processo c'è un buco, grande come una casa, ovvero il pc non è in grado di sapere dove si trova realmente il servo in maniera realtime.
Alcuni servi digitali, ad esempio gli hitec, una volta ricevuto l'impulso di comando, dopo un piccolo lasso di tempo generano a loro volta un impulso che può essere riletto, per comunicare la vera posizione del servo.
Questa caratteristica è interessante, ma purtroppo sui servi normali non credo che ci sia, e no so se è una caratteristica di tutti i digitali (non credo).
Per il mio progetto ho acquistato dei servacci su ebay tipo mg945 e mg995, cineseria di bassissimo livello! Sicuramente non hanno caratteristiche simili agli hitec.

Dopo tutta questa premessa, la mia domanda era, c'è qualcuno che ha ritirato fuori il feedback da un servo, magari collegandosi al cursore del potenziometro interno? Oppure vi vengono in mente altre idee?

MSchiepp 03 aprile 09 01:23

Citazione:

Originalmente inviato da marcosinatti (Messaggio 1444848)
... c'è qualcuno che ha ritirato fuori il feedback da un servo, magari collegandosi al cursore del potenziometro interno? Oppure vi vengono in mente altre idee?

Non mi sembra che serva... il servo usa il feedback sul potenziometro per aggiustare continuamente la sua posizione e quindi è vero che rappresenta la posizione reale del servo, ma è anche vero che se questa è diversa dalla posizione impostata con il comando c'è sicuramente un problema che impedisce al servo di raggiungere la posizione programmata (es. servo che sforza contro un blocco meccanico e vibra perchè cerca continuamente di raggiungere la posizione).

Michele

Mrk89 03 aprile 09 01:37

Citazione:

Originalmente inviato da MSchiepp (Messaggio 1444991)
Non mi sembra che serva... il servo usa il feedback sul potenziometro per aggiustare continuamente la sua posizione e quindi è vero che rappresenta la posizione reale del servo, ma è anche vero che se questa è diversa dalla posizione impostata con il comando c'è sicuramente un problema che impedisce al servo di raggiungere la posizione programmata (es. servo che sforza contro un blocco meccanico e vibra perchè cerca continuamente di raggiungere la posizione).

Michele

Quoto, ed a questo punto magari basterebbe solo fare un controllo sulla corrente assorbita, solo per sapere se il servo gira o se è bloccato.
Come diceva Michele il servo è retroazionato di suo, quindi a parità di segnale di pilotaggio,se non è in blocco, ne risulterà un'angolo di rotazione sempre uguale.

marcosinatti 03 aprile 09 01:38

Si questo è vero e all'inizio era quello che pensavo io.
Il problema sorge quando vuoi incrementare le velocità dei movimenti, oppure, per esempio, quando vuoi prendere con la pinza un oggetto.
La pinza si deve chiudere quando sei arrivato nel punto di presa, se non hai feedback dal movimento degli altri snodi sei costretto a comandarli poi attendere un tempo sufficientemente lungo prima di chiudere la pinza per essere certo di trovarti nella giusta posizione.
Se invece hai feedback appena ti accorgi di essere nel punto di presa puoi chiudere la pinza.
Mi stò facendo delle pippe mentali o mi sfugge qualcosa?

Mrk89 03 aprile 09 01:42

Citazione:

Originalmente inviato da marcosinatti (Messaggio 1445004)
Si questo è vero e all'inizio era quello che pensavo io.
Il problema sorge quando vuoi incrementare le velocità dei movimenti, oppure, per esempio, quando vuoi prendere con la pinza un oggetto.
La pinza si deve chiudere quando sei arrivato nel punto di presa, se non hai feedback dal movimento degli altri snodi sei costretto a comandarli poi attendere un tempo sufficientemente lungo prima di chiudere la pinza per essere certo di trovarti nella giusta posizione.
Se invece hai feedback appena ti accorgi di essere nel punto di presa puoi chiudere la pinza.
Mi stò facendo delle pippe mentali o mi sfugge qualcosa?

Il ragionamento nn fa una piega, ma mi domando a questo punto:
Con servi che ti fanno 60°/0.15sec, è proprio necessario avere dei tempi di risposta così veloci?
mettiamo anche caso che i servi si muovano uno dopo l'altro e non contemporaneamente....Non è accettabile 1/2 secondo per il posizionamento del braccio?

MSchiepp 03 aprile 09 09:26

Se proprio vuoi complicarti la vita, tieni separata l'alimentazione di tuti i servi e controlla l'andamento della corrente di ciascun servo: puoi capire se il servo è fermo, se si sta muovendo se è bloccato, anche se effettivamente i tempi di posizionamento sono talmente veloci che non credo ne valga la pena!

Michele

Mrk89 03 aprile 09 09:46

Citazione:

Originalmente inviato da MSchiepp (Messaggio 1445124)
Se proprio vuoi complicarti la vita, tieni separata l'alimentazione di tuti i servi e controlla l'andamento della corrente di ciascun servo: puoi capire se il servo è fermo, se si sta muovendo se è bloccato, anche se effettivamente i tempi di posizionamento sono talmente veloci che non credo ne valga la pena!

Michele

Si, il controllo dell'assorbimento a questo punto non lo utilizzerei per riconoscere se il servo è in posizione o si sta muovendo per andarci, ma solo per riconoscere se c'è qualche evento esterno che ne blocca il movimento.

illez 03 aprile 09 10:21

io ho sempre visto dei sensori sulla pinza, posizionati in modo da riconoscere, per esempio, se l'oggetto da afferrare è all'interno del raggio d'azione.

marcosinatti 03 aprile 09 10:47

Il problema non è solo nella pinza ma in tutti i movimenti.
Andare a leggere la corrente mi sembra moooolto macchinoso allora a questo punto mi prendo il centrale del potenziometro e lo leggo con l'AD del pic.
Posso trovare il rapporto posizione/tensione oppure per ovviare a problemi di non linearità, posso semplicemente andare a controllora il valore letto, se per più di 30-40ms rimane lo stesso (con una tolleranza +/- da vedere) posso dire che il servo è arrivato a destinazione.
Sulla pinza comunque monterò un sensore di forza oppure andrò a leggere la corrente assorbita, anche perchè al variare della grandezza dell'oggetto il servo dovrà fermarsi prima o dopo per non andare a sforzare.

SoldatoSemplice 03 aprile 09 12:20

Ma a te non serve avere un valore ritornato dal servo perchè il servo resta nella sua posizione fintanto che tu gli mandi in maniera continuativa gli impulsi relativi a quella posizione, se tu smettessi di mandargli impulsi (nel senso che metti a massa la pista del segnale) il servo impazzisce, perchè anche per la posizione neutrale vuole un impulso, quindi tu tassativamente saprai sempre dove sta il tuo servo, perchè sei tu che istante dopo istante decidi quanto deve essere largo l'impulso che gli mandi.
Il tuo ragionamento filerebbe con i motori passo passo nei quali se magari perdi qualche passo potresti ritrovarti nella condizione in cui il computer pensa che il tuo step sia in una posizione mentre in realtà è in un altra; ma per questo esistono i fine corsa che una volta che il motore raggiunge la fine qualunque offset viene comunque annullato.
E poi si suppone che sia tu a gurdare il braccio e controllarlo, quindi non sarebbe necessario nemmeno il fine corsa, come d'altronde è nei progetti di internet.

MSchiepp 03 aprile 09 12:25

Citazione:

Originalmente inviato da SoldatoSemplice (Messaggio 1445349)
...se tu smettessi di mandargli impulsi (nel senso che metti a massa la pista del segnale) il servo impazzisce...

Non so che servi usi, ma se smetti di inviare gli impulsi il servo rimane nell'ultima posizione raggiunta, ma non è in grado di matenerla, nel senso che se lo sposti a mano non oppone resistenza e non tenta di recuperare la posizione (ovvio, visto che manca il segnale di comando).

Michele

illez 03 aprile 09 12:29

Marco, non riesco a capire quale sia il problema: i servi si posizionano dove dici tu, la pinza si (dovrebbe) chiudere quando il braccio è arrivato a destinazione e quando un sensore all'interno segnala la presenza dell'oggetto. Un sensore di pressione può dirti 'quanto' stringere.
Cosa manca?
Vuoi sapere se qualche ostacolo ne ha impedito il movimento? Dovresti usare dei sensori IR, per esempio.
Oppure, ma dalla discussione non sono riuscito a capirne le motivazione, puoi usare degli encoder di posizione negli snodi

dave4mame 03 aprile 09 12:29

forse un pochino OT..
ma questo l'avevi mai visto?

YouTube - lego cubo di rubik

marcosinatti 03 aprile 09 12:46

Tralasciamo per un attimo il discorso pinza, visto che è un caso particolare.
Forse mi spiego male, ma ammettiamo che voglio ruotare il robot, poi finita la rotazione stendere il braccio.
Comando la rotazione ma non so quando effettivamente è arrivato a fine rotazione per dare il comando per stendere il braccio.
Senza feedback sono costretto a dare il comando di rotazione, attendere un tempo suffcientemente lungo per essere sicuro che la rotazione è terminata e poi dare il comando di stendere il braccio.

marcosinatti 03 aprile 09 12:49

Citazione:

Originalmente inviato da SoldatoSemplice (Messaggio 1445349)
Ma a te non serve avere un valore ritornato dal servo perchè il servo resta nella sua posizione fintanto che tu gli mandi in maniera continuativa gli impulsi relativi a quella posizione, se tu smettessi di mandargli impulsi (nel senso che metti a massa la pista del segnale) il servo impazzisce, perchè anche per la posizione neutrale vuole un impulso, quindi tu tassativamente saprai sempre dove sta il tuo servo, perchè sei tu che istante dopo istante decidi quanto deve essere largo l'impulso che gli mandi.
Il tuo ragionamento filerebbe con i motori passo passo nei quali se magari perdi qualche passo potresti ritrovarti nella condizione in cui il computer pensa che il tuo step sia in una posizione mentre in realtà è in un altra; ma per questo esistono i fine corsa che una volta che il motore raggiunge la fine qualunque offset viene comunque annullato.
E poi si suppone che sia tu a gurdare il braccio e controllarlo, quindi non sarebbe necessario nemmeno il fine corsa, come d'altronde è nei progetti di internet.

Grazie, conosco questi argomenti, lavoro con motori brushless, passo passo e robot mitsubishi e denso, ho ben chiaro il concetto di feedback.
I servi non impazziscono se smetti di inviare impulsi.
Il braccio non lo guiderò a vista ma stò sviluppando un software per fargli fare movimenti in automatico, come del resto facciamo con i robot industriali.

illez 03 aprile 09 12:50

Citazione:

Originalmente inviato da marcosinatti (Messaggio 1445386)
Tralasciamo per un attimo il discorso pinza, visto che è un caso particolare.
Forse mi spiego male, ma ammettiamo che voglio ruotare il robot, poi finita la rotazione stendere il braccio.
Comando la rotazione ma no so quando effettivamente è arrivato a fine rotazione per dare il comando per stendere il braccio.
Senza feedback sono costretto a dare il comando di rotazione, attendere un tempo suffcientemente lungo per essere sicuro che la rotazione è terminata e poi dare il comando di stendere il braccio.

Encoder di posizione.
Puoi anche costruirtelo partendo da un vecchio mouse a rotella :wink:

Mrk89 03 aprile 09 13:03

Raga, si sta cercando di trovare soluzioni elettroniche "evolute"...
Basta leggere la firma di Marco per capire con chi si sta parlando.
:wink:
Ritornando al discorso, secondo me andrebbe bene semplicemente avere un feedback di "motore fermo" ( corrente ~0)per far partire il comando successivo, senza utilizzare encoder rotativi....
Inviando un segnale al servo, quello si sposterà in una esatta posizione!! quindi sei sicuro che andrà nella posizione da te desiderata, devi solo controllare il momento in cui ci arriva.

marcosinatti 03 aprile 09 13:06

Citazione:

Originalmente inviato da Mrk89 (Messaggio 1445428)
Raga, si sta cercando di trovare soluzioni elettroniche "evolute"...
Basta leggere la firma di Marco per capire con chi si sta parlando.
:wink:
Ritornando al discorso, secondo me andrebbe bene semplicemente avere un feedback di "motore fermo" ( corrente ~0)per far partire il comando successivo, senza utilizzare encoder rotativi....
Inviando un segnale al servo, quello si sposterà in una esatta posizione!! quindi sei sicuro che andrà nella posizione da te desiderata, devi solo controllare il momento in cui ci arriva.

Dai non esagerare, così arrossisco!!! :lol::lol::lol:

Mrk89 03 aprile 09 13:10

Citazione:

Originalmente inviato da marcosinatti (Messaggio 1445436)
Dai non esagerare, così arrossisco!!! :lol::lol::lol:

aHahaHaH:P

illez 03 aprile 09 13:39

oh beh'...

allora scusate se mi son permesso di consigliare un semplice encoder :P

a questo punto allora spiegatemi perché non va bene ed è troppo poco evoluto :D

Mrk89 03 aprile 09 13:55

Naturalmente, sia ben chiaro, non volevo offendere nessuno ^_^

illez 03 aprile 09 13:57

Citazione:

Originalmente inviato da Mrk89 (Messaggio 1445519)
Naturalmente, sia ben chiaro, non volevo offendere nessuno ^_^

umilmente so di non sapere e non mi offendo per questo :wink:

marcosinatti 03 aprile 09 14:04

Calma , calma, siamo tutti smanettoni no? Ogni smanettone affronta il problema a propio modo ed è positivo confrontarsi, molte volte si cercano mosche e non ci si accorge che stà passando un elefante, confrontarsi aiuta...

illez 03 aprile 09 14:11

figuratevi, non ci son problemi, anzi...

marcosinatti 03 aprile 09 14:30

Comunque credo che alla fine farò un doppio controllo.
1° - Feedback dal potenziometro di ogni servo in modo da conoscere di continuo la posizione, letto su AD del pic.
2° - Lettura della corrente assorbita da ogni servo, metto su ogni negativo dei servi una resistenza da 0,1ohm e con il pic leggo la caduta, ogni ampere leggo 100mV. Se la caduta fosse eccessiva riduco la resistenza.
In questo modo posso anche controllare se il servo non arriva in posizione a causa di impedimenti meccanici.

Usero un bel pic della serie 18, ne dovrei avere qualcuno con 13 AD forse anche a 12 bit.

ElNonino 03 aprile 09 21:05

Ciao Marco, io credo che se vuoi avere un controllo fatto bene ti conviene utilizzare solo la meccanica ed il potenziometro del servocomando, il pilotaggio del motore ed il feedback li fai usando il PIC, almeno potresti gestire anche le rampe di accelerazione e frenatura come pure la coppia di mantenimento,

Il numero di fili che andrebbero al servo non cambierebbe di molto, però guadagneresti in flessibilità e precisione di controllo. IMHO.

Buon Lavoro.

:yeah:

illez 03 aprile 09 21:31

Citazione:

Originalmente inviato da Mrk89 (Messaggio 1445428)
Raga, si sta cercando di trovare soluzioni elettroniche "evolute"...
Basta leggere la firma di Marco per capire con chi si sta parlando.
:wink:
Ritornando al discorso, secondo me andrebbe bene semplicemente avere un feedback di "motore fermo" ( corrente ~0)per far partire il comando successivo, senza utilizzare encoder rotativi....
Inviando un segnale al servo, quello si sposterà in una esatta posizione!! quindi sei sicuro che andrà nella posizione da te desiderata, devi solo controllare il momento in cui ci arriva.

Mi rendo conto che la mia risposta è un po' fuori misura considerando le capacità di Marco; me ne scuso con lui ma l'attenzione che dedico ai messaggi mentre lavoro è, per ovvi motivi, limitata. :wink:

Pur non essendo un guru dell'eletttronica o della robotica, resto dell'idea che l'encoder sia quello che alla fine da meno problemi; è fatto per questo, no?
L'idea di controllare la corrente assorbita dai servi merita comunque di essere approfondita; ma aggiungo: controllare il potenziometro del servo non è quasi come verificare un encoder?

Per spiegarmi meglio, non vorrei che la complessità della gestione del ritorno del servo e dell'assorbimento alla fine sia maggiore dell'introduzione di un encoder. Ma visto che Marco vuole fare da 'cavia' per l'esperimento, alla fine ce lo dirà, no? :fiu:
saluti

Mrk89 03 aprile 09 21:43

Citazione:

Originalmente inviato da illez (Messaggio 1446305)
Mi rendo conto che la mia risposta è un po' fuori misura considerando le capacità di Marco; me ne scuso con lui ma l'attenzione che dedico ai messaggi mentre lavoro è, per ovvi motivi, limitata. :wink:

Pur non essendo un guru dell'eletttronica o della robotica, resto dell'idea che l'encoder sia quello che alla fine da meno problemi; è fatto per questo, no?
L'idea di controllare la corrente assorbita dai servi merita comunque di essere approfondita; ma aggiungo: controllare il potenziometro del servo non è quasi come verificare un encoder?

Per spiegarmi meglio, non vorrei che la complessità della gestione del ritorno del servo e dell'assorbimento alla fine sia maggiore dell'introduzione di un encoder. Ma visto che Marco vuole fare da 'cavia' per l'esperimento, alla fine ce lo dirà, no? :fiu:
saluti

Il problema di quegli encoder è il fatto che che ritornano un risultato "discreto", insomma, tra un foro e l'altro dell'encoder, non sai dove sta il braccio.
Quindi, considerando che gli angoli che compierà il braccio non sono molto ampi, e considerando che ci sono tre errori sui tre servi, si arriva ad un errore a mio parere "grande".
Utilizzando invece il potenzionemtro del servo, essendo esso un elemento "continuo", e che quindi non da in uscita un segnale discreto, ma continuo, si ha una precisione maggiore.:wink:

marcosinatti 03 aprile 09 22:19

L'encoder è sicuramente la cosa più precisa per leggere la posizione di un albero, ma poi sorgono problemi meccanici di accoppiamento e peso visto che il braccio è comunque qualcosa di piccolo.

X Elnonino : Grazie, ci avevo pensato e quasi sicuramente sarà il secondo passo, non avendo in mano i servi e non conoscendo gli assorbimenti non so come dimensionare il ponte H. Quando arrivano vedo, magari uso un pò di l298 che ho sul cassetto.
Il fatto di dover ricevere la seriale, e pilotare i servi cercando di fare le rampe in ppm (se così si possono chiamare perchè faranno schifo!) complica non poco la vita al pic.

MSchiepp 03 aprile 09 23:06

Giusto per dirle tutte... leggere il potenziometro ha un altro innegabile vantaggio rispetto all'encoder perchè restituisce la posizione assoluta, mentre l'encoder dà una posizione relativa!

Michele


Tutti gli orari sono GMT +2. Adesso sono le 02:02.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002