Uniciclo Autobilanciato

:) Salve a tutti.....Scusate se non mi sono presentato...ma non sapevo dove farlo.

Avevo un idea in mente da sviluppare su una Arduino. Pensavo ad un monociclo autobilanciato....sul generis Segway.....tanto per capirci come quello sul sito della focusdesign_punto_com Poiche pero' parto da zero ( a parte un ifarinatura di elettronica di base e qualche ricordo di gioventu sul Basic ), mi piacerebbe sentire la vostra opinione.... Dunque....se non erro si dovrebbe pilotare un Hub brushless con i dati di un accelerometro e un giroscopio....Questa' almeno dovrebbe essere l'idea iniziale.... Vi piace l'idea ? Ne discutiamo ??

X-Ray

Ops..Scusate....Non mi ero accorto che c'era gia' un topic aperto sulla faccenda....

Dove? Link :)

Se ne parla in qualche modo sul topic Progetto Comune -Robotica. Quindi prima di uppare il mio Topic, mi vado a leggere quello....poi magari ne riparliamo perche' la cosa mi interessa parecchio. Ho appena ordinato un Arduino e qualche altro accessorietto e mi dovrebbero arrivare tra un paio di giorni... Ho anche un PC che potrei "sacrificare" all'uopo...e ho gia' scaricato il sfw di gestione.... Non vedo l'ora di iniziare a "pasticciare" con la scheda.... Ho lasciato la programmazione qualche lustro fa'...e ho bisogno di rispolverare qualche nozione, anche se la mia era una conoscenza d base del solo Basic...era l'epoca in cui sulle riviste si pubblicava l'intero listato ...e Windows era alla sua PRIMA release...Sigh...roba antica ormai....Per questo vorrei rispolverare..da allora gli OS si sono fatti MOLTO piu' complicati ...e i drivers sono diventati "milioni"... Comunque...leggo l'altro topic...poi ci risentiamo...ma se qualcuno e' interessato alla cosa...parliamone.

Ho letto l'intero topic...ma non c'e quasi nulla. Per autobilanciare un solo asse...e' meglio usare un accelerometro o un giroscopio ? Un giro dovrebbe compensare gli spostamenti angolari, ma non misura l'accelerazione.... E se li si usasse insieme ?? Un giroscopio + 1 accelerometro ? Qualcuno ha qualche idea da dove partire... Dai raga...basta un aitino iniziale...poi vediamo di metterci del nostro...fin dove si arriva :)

http://diysegway.blogspot.com/

Wow... :) grazie del suggerimento....avro' un bel po' da studiare... :-/ Ma considerando che...per la mia idea..serve un solo motore...le cose dovrebbero essere leggermente meno complicate..almeno lo spero :-? Da quel che sono riuscito a farmi un idea..avro' bisogno di un accelerometro...un gyro...e un microcontroller. Hai un idea dei parametri di partenza per i chip? Per il gyro ad esempio pensi siano sufficenti 300*/s? (scusa l'asterisco, ma sulla tastiera dell'Ipad non c'e' il segno dei gradi) oppure piu' alti sono i gradi/s ,meglio e' ?

Si potrebbe partire anche da qui ???

http://www.st.com/stonline/products/families/evaluation_boards/steval-mki062v2.htm

che ne pensate ??

Penso proprio di si, sicuramente sarebbe anche più performante! ...ma arduino non c'entrerebbe più nulla!

Vabbe'....la tengo in alternativa....usero' Arduino per la sperimentazione....eventualmente l'altra board per verificare le differenze tra le due soluzioni...o se il progetto sviluppera' con altri sensori.... Pensavo di cercar di implementare oltre all'asse tilt anche l'asse roll per giocare con delle piccole accelerazioni del motore quando il roll va' fuori asse...magari per cercare di contrastare la forza centipeta che in curva a bassa velocita', in quanto dimuisce la forza di sotentamento data dalla precessione giroscopica creata dalla ruota, potrebbe indurre in una caduta.. Per adesso sto aspettando Arduino....e sto cercando un chip che implementi un singolo asse giroscopico e un accelerometro....tanto per vedere se c'e' qualcosa di economico che possa servire allo scopo...Se proprio non trovo..cerchero' un tre assi

oLA'... Allora...nonstante le difficolta...il progetto va avanti...ma ho dovuto prima schiarirmi le idee su IDE Reference board...insomma riprendere a far lavorare il cervello che era arrugginito un bel po' a forza di non lavorare.....ho passato una settimana facendo le 3 del mattino...ma dopo aver fatto le prime prove con la Arduino Uno ( blinking etc etc ) ho collegato anche la board IMU Combo 2. La scheda monta 2 accelerometri ADXL203 e un Gyro ADXRS300.... Per ora sto facendo i primi exp. Sono riuscito in qualche modo a visualizzare i primi dati sulla serial Chart...MA..ORA Mi sorge un dubbio... Poiche' devo bilanciare solo l'asse Tilt....( e quindi per ora l'accelerometro dell'asse Y non mi serve ) cioe' l'asse del beccheggio.....CHE CI FACCIO DEL GYRO...DATO CHE SEMBRA ORIENTATO SULLL'ASSE Z ?? Cioe' sembra recepire la velocita' angolare dellìasse Z....a questo punto penso che questa IMU mi serva solo per sperimentare...non certo per il progetto di bilanciare un Uniciclo..... Per il progetto dovrei avere bisogno di un ACC e un GYRO ...ENTRAMBI SULL'ASSE X.........O Sbaglio ? Quindi niente IMU ma due Chip separati..... Se cosi' fosse....Sapete se esistono IMU con ACC e GYRO sullo stesso asse ?

Vorrei chiarire.. Sembra una domanda stupida...perche' so che esistono le IMU a 5/6 e piu assi.... Ma a me servirebbe un semplice ACC+un GYRO su un singolo asse...naturalmente di buone prestazioni....dovrebbe poter far girare uno sketch di autobilanciamento ad almeno a 100/150 hz....usare un chip a 3 dimensioni per usare un solo asse mi sembra sprecato. Conoscete qualche componente del genere ?

ok..grazie lo stesso... :) provero' altri componenti... :) Il fatto e' che devo bilanciare UN SOLO asse X e non devo far interagire 2 ruote, ma una singola ruota. D'accordo che il principio e' lo stesso, ma le routine open source sono tutte per 2 assi....ed essendo digiuno o quasi di programmazione faccio una enorme fatica a "capire". Mi trovo in difficolta' a capire ad esempio quali dati inserire sulle routine quando mi si parla di sensibilita' e zero....

Sui data sheet trovo una sensibilita' di 1000 mV/g e 0g Voltage di 2,5V....Qualcumo mi spiega la cosa ? La tensione di alimentazione e' di 5V....e uno 0g voltage a 2,5V magari lo intuisco..( bilanciamento a meta' dell'alimentazione)..ma 1000 mV/g che significa ? che ad ogni g (9,81) la tensione aumenta di 1 volt ?... Qualcuno ha una risposta...per smuovermi dall'impasse ?? :-/

consiglio spassionato: inutile il giroscopio, legge velocità angolari quindi le lettura vanno integrate e a più o meno lungo andare, a seconda della qualità del giroscopio, sballa. Il giroscopio va bene quando hai movimenti improvvisi. Ottimo l'accelerometro, che leggendo sempre la gravità ti indica in modo assoluto se sei dritto, occhio però che leggi anche le accelerazioni, ma non dovrebbero essere di grosso fastidio, ed è il motivo dell'uso dei giroscopi. Quando hai un mezzo veloce da stabilizzare in modo assoluto usi l'accoppiata giroscopio + accelerometro, molto usato per mixare i due segnali è il filtro di kallmann. Unico problema è che non c'è riferimento assoluto per l'asse Z, quindi si usano dei magnetometri.

"Astro" nascente nel campo algoritmi è il DCM, che basandosi su geometria e algebra lineare riesce a mixare i segnali di infiniti sensori, quindi si mixa gyro, accelerometri, magnetometri, GPS, barometri... tutto fà brodo ;D

le IMU semplicement son schede con gyro+accelerometri+magnetometri, in quantità variabili

Ma a te basta un accelerometro a 2 solo assi per sapere se sei dritto (1 g lungo l'asse Z) o in che direzione stai cadendo (diverso da zero lungo l'asse X). in teoria, dato che non ti puoi muovere lungo l'asse y, radice quadrata di (Z^2+X^2) = 1G per essere dritto. Per capire quanta potenza dare ai motori di solito si usa un algoritmo PID

Ottima fonte low cost di accelerometri 3 assi: il nunchuk della wii, stessa cosa per il motion plus ma sono giroscopi 3 assi, trovi miliardi di guide per l'interfacciamento con arduino.

Sui data sheet trovo una sensibilita' di 1000 mV/g e 0g Voltage di 2,5V

significa che a 0G hai un voltaggio in uscita di 2.5V. Se G aumenta di 1, la V aumenta di 1, se G diminuisce di 1 la V diminuisce di 1. (G non è grammi, ma forza di gravità), 2 G=2volte la forza di gravità

Ok..grazie...mi sono chiarito almeno quell'idea. Mi e' chiara la funzione dell'asse X diversa da Zero, che mi darebbe l'inclinazione rispetto al piano...ma la funzione Z ? D'accordo...con l'asse X so solo da che parte sto cadendo, ma se so da parte sto cadendo...nonso anche se sono dritto ? Se non cado ne' da una parte ne' dall'altra...ehehe sono dritto Noo? ;D Scusa se insisto....ma l'asse Z none' quello dell'imbardata, cioe' quello della rotazione laterale? Per intenderci....L'asse X e' quello del beccheggio...cioe' immaginando un aereo....e' quello che legge se l'aereo alza il naso o lo abbassa...ed e' quello che mi serve per misurare l'inclinazione rispetto a g...e fin qui ci siamo..... L'asse Y direi che non mi serve...perche' e' il roll...cioe' e' come se l'aereo ruotasse le ali per virare...(asse del tonneaux per intenderci)..e l'asse Z e' quello su cui ruota l' aereo con il timone di direzione, praticamente piatto ...o semplicemente imbardata. Non riesco a capire come l'asse Z possa darmi 1g e farmi capire che sono dritto...se mi da' un g significa che se ad esempio fossi sopra un Segway...starei ruotando sul mio asse verticale (quello che va' dalla testa ai piedi.....O no ? Correggimi se sbaglio.... Per l'asse X...ci siamo...quello mi serve sicuro..mi da' l'inclinazione rispetto a g, quindi mi dice se sono dritto , rispetto alla forza gravitazionale.....poi pero' come risolvo il rpoblema di stabilire se sono inclinato rispetto al terreno ? cioe' se sto salendo o scendendo un dosso ? E chiaro che non posso usare un sensore ad ultrasuoni... che sistema uso ? Io pensavo di mettere un gyro SEMPRE sull'asse X..che poi e' lunico che mi interessa...e leggere le variazioni angolari dell'asse X....interpolando l'AC e il Gyro sempre sullo stesso asse ..nonriesco a mantenere in equilibrio l'uniciclo ?

È vero, il controllo sulla Z è ridondante. pensavo che per muoverti la lettura dell'asse X sballa, ma l'errore sarebbe esattamente l'accelerazione che vuoi imprimere, e quindi eliminabile via software.

Cmq parlare di azze XYZ è errato perchè dipende dalle convenzioni adottate, io in analisi per azze Z intendo l'altezza, ma secondo il piano cartesiano la Z è la profondità... in teoria bisognerebbe parlare di imbardata(yaw), rollio(roll) e beccheggio(pitch): http://www.nasm.si.edu/exhibitions/gal109/NEWHTF/ROLL.HTM

non capisco il problema del dosso. La gravità punta verso il centro della terra, non il centro del dosso, e il robot per non cadere deve sconfiggere la gravità non il dosso. quindi se tu non sei sul dosso vedi il bot dritto e il dosso inclinato. ti basta un asse di accelerometro, comunque che controlli il tuo pitch(beccheggio, quello che stiamo chiamando asse X)

ho dato un'occhiata alla tua IMU, ottimo che abbia gli accelerometri mem, diciamo che se usiamo l'asse X come pitch, hai un'accelerometro per pitch e roll, e un giroscopio per yaw. Questo perchè sulla rotazione yaw, come dicevo prima, non puoi basarti sulla gravità e quindi l'unica è usare un giroscopio e integrare la rotazione

SAPUTELLO ON (se non sai cos'è un'integrale, sappi che semplicemente moltiplichi il valore letto per il tempo trascorso dall'ultima lettura(dt).

valore*tempo

come puoi immaginare consideri la rotazione a velocità fissa nel lasso di tempo il che è erroneo, non puoi sapere come si comporta. se fai un grafico di questa integrazione vedresti una scala, in pratica ogni lettura "salta" di un gradino, cosa che in fisica è assolutamente impossibile una sottigliezza è trasformare l'incremento in una funzione lineare Y=X(bisettrice), quindi fai la media tra valore precedente e attuale, sommi il valore precedente (così hai la l'incremento medio) e moltiplichi per il tempo

(valore1+(valore2-valore1)/2)*tempo

il che da valori che sballano meno velocemente. Purtoppo i giroscopi hanno altri problemi aggiuntivi come lo shift che comunque ti sballano le letture, in pratica non sempre tornano a 0 ma rimangono un pò sballati. I mem risolvono un poco questo errore, da quanto ho letto)

per intenderci beccati sto grafico(trovato a caso): in rosso "l'integrazione lineare"(chiedo venia ai matematici, è per farsi capire) e in blu "l'integrazione classica" http://3.bp.blogspot.com/_4J-GA1MPgGQ/TGhqPVTfUhI/AAAAAAAABg0/Zsl3FXctdG0/s400/interpola.png

Questo solo anche per gli accelerometri! non devi integrare i risultati, ma il tuo bot non schizza da 0 a 1G!! crescerà più o meno linearmente, in realtà farà una curva che aumenta più si avvicina a terra, ma la forma della curva varia da moltissimi fattori, una semplificazione a urva sarà più che sufficiente.(ricordati che anche l'accelerazione dei motori segue queste regole.. semplicemente perchè non si può andare da 0 a 100 in tempo 0 e perchè è impossibile leggere gli infiniti valori tra tempo0 e tempo1)

spero di non aver scritto troppe boiate, perdonate l'uso di termini non tecnici, analisi e fisica non mi stanno particolarmente simpatiche (infatti devo ancora darle :) anche se sono utilissime )

ah aggiungerei che IMHO più che integrali si tratta di sommatorie di finiti numeri, mavabè, in generale si usa dire di integrazione credo per via del tempo SAPUTELLO OFF ;D ;D

Ohohoh.....frena frena :o...

IGNORANTE ON :'( Se cominci con la matematica superiore...mi spiazzi...per il momento vorrei limitarmi ad un problema alla volta...Avendo per cosi' dire "lasciato" in 2a superiore....agli integrali...non ci sono mai arrivato :'(...pero' visto che la sai lunga....eeheheh ho trovato chi stressare quando avro bisogno di qualche "conticino" da fare :D ;D Avendo pero' una mente abituata a ragionare LOGICAMENTE...dove non arrivo con lo studio :-[..sono spesso arrivato per passettini. Quindi iniziamo dal primo problema...Mi serve UN SOLO accelerometro...quindi la mia IMU e' ridondante..( per il momento).perche' a me serve il controllo del SOLO asse picth o come si dice il TILT ( credo sia conosciuto cosi tra i "non" aeronautici ). Ponendo il fatto che una volta in movimento, la precessione giroscopica della ruota, creera' le condizioni per il mantenimento dell'equilibrio dell'asse ROLL ( piu' grande sara' la ruota, piu' sara' stabile una volta in movimento), e necessitando quindi del controllo sul solo asse PITCH...ho bisogno di un semplice accelerometro. Dell'asse Yawl non so che farmene..( al momento magari..poi in seguito vedro' di poterlo inserire nel computo in qualche modo rinforzando la stabilita' dinamica del mezzo per mezzo di accelerazioni o decelerazioni quando il mezzo entrera' in curva ...e qui magari potro' acquisire anche l'asse ROLL...per ora pero' vorrei limitarmi al semplice bilanciamento dell'asse PITCH ).forse se avessi voluto fare un Segway...mi andava bene anche il controllo dell'assse Yawl, per interpolare il controllo dei singoli motori.

Ok....abbiamo stabilito che mi serve un accelerometro sull'asse PITCH..e lasciamo stare i dossi :) Quindi potendo sfruttare la g per stabilire se sono dritto o meno...controllando le letture sull'asse PITCH avrei risolto il problema....MA....C'e' sempre un ma !!

DOPPIO IGNORANTE ON: ora pero come stabilisco che sto cadendo in avanti...e non semplicemente accelerando in avanti ???

DOPPIO IGNORANTE OFF:

Ho provato a fare una lettura della IMU applicando dei paremetri che "spero" siano giusti....ripresi dal datasheet....e queste sono alcune letture della seriale con la IMU praticamente "virtualmente" piatta sulla scrivania: Il primo dato e' del gyro , gli altri due i due assi.

308492 , -0.24 , -1.00 305780 , -0.20 , -0.99 305796 , -0.25 , -0.99 308568 , -0.22 , -0.99 305792 , -0.20 , -0.98 305784 , -0.24 , -0.99 308568 , -0.22 , -0.99 305784 , -0.24 , -0.86 308580 , -0.25 , -0.87

Se inclino in avanti la IMU inclinando l'asse X i dati cambiano: (Inclinazione di circa 30° in avanti)

306544 , 0.85 , 0.00 306548 , 0.79 , 0.00 306552 , 0.88 , 0.00 306548 , 0.83 , 0.00 306540 , 0.82 , 0.00 306552 , 0.87 , 0.00 306548 , 0.80 , 0.00 306544 , 0.86 , 0.00

e ora ?????....Non so da che parte muovermi ! :-/ Intendo...come posso utilizzare al meglio i dati ?

Pensavo di inviare i comandi ad un Hub di circa 800-1000W di quelli venduti per bici elettriche o per scooter...ma da altri post letti ho visto che c'e' il pericolo che non siano comandabili sia in marcia avanti che in marcia indietro ( altrimenti il controllo come lo faccio ? ) ...

Vabbe' adesso smetto per non annoiarti.....magari se hai voglia e tempo se riesci a schiarirmi un po' le idde sul resto di cui sopra....

Per ora cerchero' di capire quali parametri inserire nella routine che ho trovato per cercare di capire quali dati escono dal sensore....e come sono strutturati...

Per ora...se considero il solo asse PITCH.... Con l'ACC piano sulla scrivania registro un valore di circa 0

Con l'ACC inclinato in avanti di c.a 30° ho un valore di c.a 0.85 Con l'ACC inclinato in avanti di c.a 45° ho un valore di c.a 0.96 Con l'ACC inclinato in avanti di c.a 90° ho un valore di c.a 1

Con l'ACC inclinato in avanti di c.a 30° ho un valore di c.a -85 Con l'ACC inclinato in avanti di c.a 45° ho un valore di c.a -96 Con l'ACC inclinato in avanti di c.a 90° ho un valore di c.a -99

Pensi vadano bene i dati che escono ??

IGNORANTE OFF :-[

Ops…scusa ho commesso un errore.
Nella seconda serie di dati l’inclinazione e’ naturalmente indietro e non in avanti…sorry…svista del copia incolla. :slight_smile:

ok, non so se i dati son giusti, a occhio sono un poco sballati, sicuro di fare tutte le oprazioni matematiche attraverso i float? altrimenti con gli int hai troncamenti che causano questi errori, e lavorando con valori tra 0 e 1 un errore minimo si sente subito... senza contare che i numeri a virgola mobile sono intrinsecamente arrotondati, seppur di poco 0 è ok, 0.85 è 60 gradi 0.95 è 71 gradi 1 è 90 gradi (ok) stessa cosa coi numeri negativi (ti sei dimenticato lo 0. davanti ma vabè) per tirare fuori l'angolo basta fare angolo = arcsin (valore); l'angolo risultante è compreso tra -90 e +90 in gradi, tra -PI/2 e PI/2 in radianti (sono la stessa cosa, solo in 2 unità di misura differenti, dipende da come arsin lavora ) sia senza sbatti di angoli (è solo un riferimento per controllare i valori) devi usare un PID. esiste una libreria pid di base per l'arduino, controlla nel reference.

Infine per pilotare i motori non ho capito. considera che l'arduino ha un output molto debole di A, e se lo sforzi lo bruci. di solito per i motori brushed si usano i ponti H e per i brushless gli esc(quelli per le macchine hanno anche la retro), in pratica sono circuiti che prendono il segnale, lo elaborano e lo amplificano con un'alimentazione esterna abbastanza potente. poi dovrai modificare i valori P I D finché il trabiccolo non sta in piedi da solo. buon proseguimento

Allora...vado avanti.

Poiche' sono partito da uno sketch pronto.....del quale pero' non riesco a ben interpretare il codice e non rendendomi bene conto di cosa avvenisse....ho deciso di ricominciare da capo tutto e ....intanto voglio capire il sensore con cui ho a che fare..... Allora...dispongo di una IMU con ACC su assi X e Y e un gyro su asse Z.....e un ACCELEROMETRO sui due assi X Y.

Insomma...son partito da zero..un foglio bianco e..... Ho iniziato a scrivere ( WOW...tutta farina del mio sacco...senza copia e incolla..eheh) un piccolo sketch che vada a leggermi semplicemente la tensione in uscita sul pin 0 di arduino....

Poi ho collegato entrambi i sensori all'alimentazione ( 5V..pper la IMU...mentre l'ACC seppur alimentato a 5V ha un regolatore interno a 3,3V)

Ora...ho comparato le letture che uscivano dai pin degli assi dei due sensori e ho trovato questi dati:

Vp= Voltaggio presente sui pin di uscita dell'asse X

IMU: Orizzontale al terreno: 500 Vp 2,39 Asse a 90° in avanti :710 c.a Vp 3,37 Asse a 90° indietro :300 c.a Vp 1,43

ACCELEROMETRO: Orizzontale al terreno: 335 Vp 1,64 Asse a 90° in avanti :380 c.a Vp 1,87 Asse a 90° indietro :290 c.a Vp 1,42

considerando la tensioni di Vp e il fatto che Arduino ha un ADC a 10 bit e che la tensione Arduino e' di 5V dovrei avere quindi una sensibilita' di

IMU = (5/1024) * (710-300)/2 = c.a 1.000 mV/g ACC = (5/1024)* ( 380-290)/2 =c.a 220 mV/g

Quindi la l'ccelerometro della IMU e' circa 5 volte piu' sensibile dell' ACC.....

GIUSTO ????? ( Prima Domanda) Se si...mi conviene usare l'accelerometro della IMU

Ora...partendo dal presupposto che l'accelerometro varia piu' o meno linearmente...... Dovrei avere una lettura di circa 11,348 mV per grado di inclinazione...

GIUSTO ?? ...O sto dando i numeri ?????? (Seconda domanda)

analogRead(SAPUTELLO) ;D