Il robot non va mai dritto


19

Sto usando 2 motori DC identici e una ruota. I motori sono collegati al driver del motore L293D e sono controllati da RPi .

Il robot non sta andando dritto. Si sposta a destra. Sto facendo funzionare entrambi i motori al 100% PWM .

Cosa ho provato a correggere l'errore:

  1. Ho regolato il PWM della ruota andando più veloce al 99% , ma il robot gira semplicemente dall'altra parte;
  2. Ho regolato il peso sul robot e il problema persiste ancora.

Una volta ho provato a far funzionare il motore senza alcun carico. È questa la causa, come mi è stato detto in seguito, che un motore a corrente continua senza carico li danneggia?

Se questa non è la causa, per favore dimmi come risolvere questo problema senza usare alcun sensore per controllarlo.


In una configurazione di unità differenziale che immagino sia ciò che usi, è molto probabile che accada. Una piccola differenza tra i due motori farà ruotare il robot.
Demetris,

4
Benvenuti nel controllo ad anello aperto. Hai bisogno dei tuoi sensori (i tuoi occhi) per rilevare tu stesso il problema, come pensi che sarà in grado il robot di rilevarlo senza sensori aggiuntivi? Chiudere il circuito di controllo con i sensori è la strada da percorrere.
Unità di piegatura 22

1
I motori passo-passo potrebbero funzionare se si desidera evitare i sensori.

@bdares - Se non ci sono sensori, come fa il robot a sapere quando correggere la rotta? Se una ruota colpisce un'area a basso attrito (polvere, ad esempio) e scivola, il robot gira e non correggerà mai.
Chuck

Quando si dice nessun sensore, questo potrebbe significare nessun rilevamento esterno o si stanno escludendo anche encoder sulle ruote? perché questa è la soluzione tipica a questo problema.
JamesRyan,

Risposte:


29

Sto postando questo come una risposta perché è la risposta.

Non puoi.

Come menziona @ BendingUnit22, stai tentando il controllo "open loop". Il rumore e le variazioni significheranno che il tuo robot non guiderà mai una linea perfettamente dritta.

I motori potrebbero avere resistenze di avvolgimento diverse (correnti / coppia motrice diverse), le ruote potrebbero avere dimensioni diverse, le ruote potrebbero avere caratteristiche di trazione diverse, il cuscinetto della ruota potrebbe essere "rigido", la ruota potrebbe non essere perfettamente diritta all'avvio del veicolo , il pavimento potrebbe presentare diverse caratteristiche di attrito superficiale (leggi: polvere o moquette) - l'elenco potrebbe continuare all'infinito.

L' unico modo per tenere conto delle cose al di fuori del tuo controllo (quello che menziono sopra + di più) è utilizzare i sensori di feedback.

Puoi provare a migliorare le prestazioni ad anello aperto correggendo i problemi che ho elencato, ma ce ne sono ancora di più e semplicemente non puoi controllare tutto.


5
Esattamente! Il problema risiede nella frase "Sto usando 2 motori DC identici". Non sono mai perfettamente identici, e come menziona @Chuck, ci sono molte altre considerazioni. L'unica cosa certa nella robotica è che verranno fuori errori e rumori.
Ryan Loggerythm,

2
L'uso di due ruote sullo stesso asse dovrebbe comunque produrre risultati molto migliori rispetto al solo utilizzo di due dello stesso motore, non è vero?
John Dvorak,

@JanDvorak - Non sono del tutto sicuro di cosa intendi quando dici "Due ruote sullo stesso asse", ma credo che sia compreso / sottinteso che le due ruote sono sullo stesso asse geometrico. Se intendi lo stesso asse di controllo (come in un motore) o asse (implicando ancora un motore), vorrei sottolineare che non è possibile eseguire la sterzata differenziale con un asse bloccato. Perché un motore controlli entrambe le ruote a velocità diverse richiede un differenziale (e altre attrezzature), e il differenziale rompe effettivamente l'asse in due pezzi e sei di nuovo al punto di partenza.
Chuck

Intendevo un asse, scusa. Non sapevo che ci fosse un requisito per non andare dritto?
John Dvorak,

2
@JanDvorak - Credo che il robot di OP sia un veicolo in stile micromouse. Anche se doveva solo andare dritto e utilizzare un asse, tutte le altre fonti di errore si applicano comunque. Se una ruota ha un diametro dello 0,1% maggiore rispetto all'altra, percorrerà una lunghezza del percorso dello 0,1% più lontana rispetto allo pneumatico più piccolo per giro . Supponiamo, ad esempio, che la dimensione nominale della ruota sia di 10 cm e che la distanza tra le ruote sia di 10 cm. Lo pneumatico più grande misura 10,01 cm e percorre 0,0314 cm più avanti per giro . Per la base delle ruote, il robot gira di 0,12 gradi per giro della ruota . 0,01 cm potrebbero essere facilmente causati dalla polvere su un pneumatico.
Chuck

6

Poiché il problema del circuito aperto-chiuso è già stato menzionato, farò un commento al "Una volta ho provato a far funzionare un motore a corrente continua senza carico".
Sì, potresti danneggiare il tuo motore con questo, ma puoi anche danneggiare o distruggere il tuo motore con un carico. La distruzione proviene dalla temperatura attuale e risultante. Se non c'è fumo e qualche evidente odore proveniente dal motore, molto probabilmente non viene danneggiato. Dalla mia esperienza posso dire che i motori a corrente continua su scala hobbistica inizieranno a degradare a temperature superiori a 100 ° C. E noterai sicuramente tali temperature

EDIT:
Ci ho pensato di nuovo e potrei avere un'idea di cui il tuo collega avrebbe parlato. Esiste un tipo speciale di motore a corrente alternata. Questi sono motori sincroni non eccitati. Fondamentalmente sono costruiti per l'autodistruzione. Se li accendi, inizieranno ad accelerare fino a quando non si disassemblano. Ma se li carichi pesantemente, non possono raggiungere questo stato, solo per l'enorme momento che devono applicare al carico. Quindi puoi usarli per scopi ragionevoli. Ad ogni modo, sicuramente non hai un motore come questo nella tua applicazione.


1
Penso anche che, soprattutto con i motori per hobby, quando lo scaldi abbastanza da notare che fa caldo o ha un odore strano, probabilmente hai già bruciato l'isolamento dagli avvolgimenti. Come molte apparecchiature elettriche, funziona bene o è rotta. Non ci sono molti casi intermedi.
Chuck

Non c'era fumo simile o nessun danno visibile. Quindi forse non è danneggiato poiché l'ho eseguito per meno di mezzo minuto.
Mouse

2

Quello che stai descrivendo si chiama controllo ad anello aperto e per fare questo hai bisogno di due motori esattamente uguali, due ruote esattamente uguali, il baricentro del robot al centro tra le ruote, un perfetto circuito elettrico simmetrico, e infine una superficie piana uniforme perfetta su cui correre.

A tale scopo, in genere si ordinano decine o centinaia di ciascuna parte, quindi si eseguono test significativi per trovare due motori che si avvicinano l'uno all'altro in termini di potenza, velocità, tensione e PWM. Fare lo stesso per le ruote, i controller del motore e altre parti.

Questo processo si chiama binning - dopo questi test li si ordina in base alle loro capacità o caratteristiche. È considerato molto più costoso sia nel tempo che nelle risorse da fare in modo corretto rispetto al passaggio a un modello a circuito chiuso e non tiene nemmeno conto delle cattive condizioni del terreno.

È, tuttavia, un modo per soddisfare le tue esigenze senza sensori aggiuntivi.


1

Anche se non sarà mai perfetto, potrebbe esserci un modo semplice per farlo andare più dritto.

Se al 100% -100% l'auto gira sempre a sinistra e al 100% -99% l'auto gira sempre a destra, dovresti essere in grado di migliorarlo provando i valori nel mezzo.

Inizia con il 100% -99,5% e continua con il 100% -99,75% o 100% -99,25% a seconda del risultato. Questo dovrebbe presto convergere in una situazione in cui andrai dritto "in media".


0

Bene, se il problema non risiede nelle differenze hardware o software per ciascuna ruota, allora è probabilmente un problema con imperfezioni naturali nel modo in cui hai costruito il robot o nel modo in cui i motori sono stati prodotti. Le connessioni potrebbero non essere solide o l'RPI potrebbe non fornire la stessa corrente. Probabilmente vuoi usare i controller di velocità. Prova prima quello.

Se ciò non funziona, probabilmente il produttore non ha realizzato motori identici e probabilmente dovrai solo calibrare i motori. Potrebbe significare ridimensionare il valore del motore più forte in modo che il 100% di potenza al motore più forte corrisponda a quello più debole.


2
L'uso di controller del motore identici non risolverà il problema. Il problema è alla base della robotica, che è "come posso correggere l'errore?"
Ryan Loggerythm,

Ho sentito che i motori DC possono funzionare leggermente più lentamente all'indietro che in avanti. Inoltre, qualsiasi squilibrio nel peso potrebbe causare uno spostamento su un lato. Per non parlare di altre cose come l'attrito, ecc. Fare qualcosa di "identico" non funzionerà. Gli stepper potrebbero fare un po 'meglio, ma allora non dovresti guidare troppo veloce o altro ...
Paul

-2

Le ruote con motori a corrente continua devono essere anteriori. E ruota dentata sul retro. Quindi si sposterà dritto solo in avanti


Benvenuti in Robotica Arslan. Su Stack Exchange stiamo cercando risposte complete che forniscano una spiegazione e un contesto. Le risposte molto brevi non possono farlo, quindi modifica la tua risposta per spiegare perché è corretta, idealmente con le citazioni. Le risposte che non includono spiegazioni potrebbero essere rimosse.
Mark Booth
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.