Pages: 1 ... 85 86 [87] 88 89 ... 106   Go Down
Author Topic: [Multicotteri] Elettronica : IMU, MCU, Sensori ed algoritmi di controllo  (Read 99804 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ah okok pensavo esistessero modelli preassemblati...grazie mille dei consigli!

Quelli validi sono tutti in scatola di montaggio, però ci sono diversi rivenditori che offrono il servizio di montaggio e setup, ovviamente a pagamento, in modo da avere in mano un modello montato come si deve e già con le regolazioni di base effettuate.
Un ottimo modello elettrico per iniziare è questo, il kit combo include anche il motore e il regolatore, che da soli costano di più della meccanica, devi aggiungere quattro servo, il giroscopio, il radiocomando e la batteria (+ caricabatteria idoneo).
Costo complessivo per il modello in ordine di volo con una radio Spektrum 6  attorno ai 600 Euro, ed è un dei costi minori possibili per chi comincia.

Quote
c'è davvero così tanta differenza tra il pilotare un elicottero e un quadricottero con solo il giroscopio??

Ti faccio un paragone semplice, se il quadri è una panda l'elicottero è come una vettura sportiva molto grintosa se è settato per un volo tranquillo, è come Formula 1 se è settato per il volo acrobatico, è come un caccia militare se è settato per il volo 3D  smiley-grin
L'elicottero è un mezzo altamente instabile, non sta fermo da solo per più di pochi decimi di secondo, per quanto può sembrare strano la manovra più difficile da fare, parlando del volo di base, è proprio l'hovering che è indispensabile per atterrare e decollare, perché richiede continue correzioni molto delicate.
L'elicottero, a differenza dei quadri, è stabilizzato in automatico solo sulla coda tramite un giroscopio, e comunque non sta ferma da sola a meno che non usi un giroscopio di fascia alta, con relativo servo ultraveloce, che costa qualche centinaio di Euro, il quadri ha un giroscopio a tre assi che lo stabilizza nei movimenti rotazionali su questi rendendo il pilotaggio più semplice.
Un quadri è meno reattivo di un elicottero sia perché le manovre sono "filtrate" dal sistema di controllo e stabilizzazione sia perché la variazione delle forze avviene cambiando il  numero di giri dei motori che è un modo relativamente lento per agire sulle forze.
Sugli elicotteri le forze variano grazie ad un sistema meccanico che modifica il passo delle pale del rotore, sia principale che di coda, ad ogni rotazione dello stesso rendendo il tutto molto più reattivo, ma anche molto più delicato e soggetto a guasti se non viene fatta una regolare manutenzione e tutti i controlli prevolo del caso come si fa sugli aeromobili veri.
Logged

Tortona
Offline Offline
God Member
*****
Karma: 2
Posts: 590
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

wow non sapevo che un elicottero modificasse il passo dell'elica per aumentare o diminuire le forze, grazie della lezioncina smiley-grin ho visto un po di video, e in effetti di manutenzione se ne deve fare molta essendoci tutta quella meccanica.
Adesso che mi avete spiegato tutte queste cose però mi sorge un dubbio: perchè non si può utilizzare la stessa elettronica che si usa nei quadri per il controllo dell'assetto?? cioè un elicottero non riuscirebbe a stabilizzarsi da solo avendo a disposizione un accelerometro?
Logged

Se gommo tiene,io vince gara! Se gommo non tiene,io come bomba dentro montagna

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

wow non sapevo che un elicottero modificasse il passo dell'elica per aumentare o diminuire le forze

Escludendo dal discorso i giocattoli con il doppio rotore coassiale, che utilizzano un diverso sistema per volare e governare, tutti gli elicotteri monorotore come minimo hanno il passo ciclico, un sistema che tramite un piatto oscillante permette di cambiare il passo delle pale in modo simmetrico con verso opposto, una aumenta il passo mentre l'altra lo perde, in modo graduale durante una intera rotazione, questo permette all'elicottero di spostare il vettore della spinta all'interno di un cono e di dividerlo tra sostentamento e spinta in una direzione.
Una volta i modelli più semplici di elicotteri usavano la variazione del numero di giri del rotore, combinata al passo ciclico, per variare l'intensità della spinta e di conseguenza la forza che sostiene e spinge l'elicottero permettendo di farlo salire/scendere in verticale e gestire la velocità di spostamento, ora tutti i modelli di elicotteri RC, sempre esclusi i giocattoli, usano il passo collettivo che è la variazione del passo di ambedue le pale di una stessa quantità e con lo stesso verso, questo può avvenire tramite un apposito asse di comando coassiale all'albero del rotore, sistema ormai quasi in disuso, oppure sempre tramite il piatto oscillante che viene alzato e abbassato per variare il collettivo.
Sebbene può sembrare strano utilizzare il piatto oscillante per comandare sia il ciclico che il collettivo permette di semplificare la meccanica e consente comandi più precisi perché il piatto viene azionato direttamente, senza rinvii, tramite tre servo disposti a 120°, si chiama azionamento trilink e richiede uno speciale sistema di miscelazione dei comandi che deve essere presente sul radiocomando, quelli recenti per hely lo hanno tutti.

Quote
Adesso che mi avete spiegato tutte queste cose però mi sorge un dubbio: perchè non si può utilizzare la stessa elettronica che si usa nei quadri per il controllo dell'assetto?? cioè un elicottero non riuscirebbe a stabilizzarsi da solo avendo a disposizione un accelerometro?

Perché l'elicottero è un mezzo molto più instabile del quadricottero e la fisica del suo volo è molto diversa, comunque volendo è possibile stabilizzarlo elettronicamente, esistono appositi sistemi elettronici denominati flybar less, il nome deriva dal fatto che viene eliminato un componente del rotore che si chiama fly bar (è quella specie di piccolo rotore con le due palette che vedi montato a 90° rispetto al rotore), però costano diverse centinaia di Euro nelle versioni base, e non garantiscono la stessa stabilità di un quadri, fino ad arrivare anche a oltre 1000 Euro per quelli veramente efficaci.
Non ultimo tieni presente che se ad un pilota di hely che si diverte a fare volo acrobatico ad alto livello, come me per esempio, viene a proporre un sistema per rendere l'elicottero docile come minimo ti prendi un vaffa, noi l'hely lo vogliamo inc....to nero  smiley-mr-green

Per capire cosa intendo volo acrobatico ad alto livello guarda questo video (un quadri non può volare in questo modo).

Logged

Tortona
Offline Offline
God Member
*****
Karma: 2
Posts: 590
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

esaustivo come sempre e complimenti a quel ragazzino del video!
però non mi attira per niente fare volo acrobatico, mi piace la tranquillità e pacatezza del mio quadricottero, siamo in sintonia smiley-wink
Logged

Se gommo tiene,io vince gara! Se gommo non tiene,io come bomba dentro montagna

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao ragazzi, io sono in procinto di costruire un quadricottero, ho acquistato il necessario e ora sto provando a creare l'algoritmo per bilanciare due motori posti su un'asse (è la base di partenza) con scarsi risultati però.

Lavoro con un Arduino Mega2560 e un sensore giroscopio accelerometro GY-521, riesco a leggere i dati raw (che forse sono un po' ballerini) ma non ci sono dati aberranti. Volevo capire se avete consigli su un filtro semplice da utilizzare sui dati e la logica con la quale essi modificano l'output suoi motori. Se avete esempi consigli vi ringrazio molto anticipatamente.
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Guarda sulla mia firma il progetto quadrilatero completo, ma occhio che non credo sia veramente completo, non ricordo se ho aggiornato il codice. Però è una base di partenza. In pratica ora fai così: invia i dati letti al pc e crea una guida che visualizzi un oggetto 3d che farai muovere con il sensore. Quando questo è ok puoi passare alla fase braccio, poi alla fase quad, ed ifine volo
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho fatto qualche passo avanti, vi posto il video del risultato (ancora in beta) che ho ottenuto applicando un PID per cercare di bilanciare un asse: https://www.youtube.com/watch?v=Jo9mfy4mhxg

Ho notato però che l'input del sensore è poco uniforme, quindi per procedere devo assolutamente implementare un filtro di kalman come questo http://www.gioblu.com/tutorials/programmazione/98-filtro-di-kalman-con-arduino ma ho una domanda da niubbo, l'algoritmo nel link mi permette di filtrare solo un asse giusto?! Nel programma finale, avrò bisogno di controllare 2 assi quindi devo implementare 2 kalman e due PID?!

Grazie anticipate!
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho fatto qualche passo avanti, vi posto il video del risultato (ancora in beta) che ho ottenuto applicando un PID per cercare di bilanciare un asse: https://www.youtube.com/watch?v=Jo9mfy4mhxg

Direi che sei sulla buona strada smiley

Quote
Ho notato però che l'input del sensore è poco uniforme, quindi per procedere devo assolutamente implementare un filtro di kalman come questo http://www.gioblu.com/tutorials/programmazione/98-filtro-di-kalman-con-arduino ma ho una domanda da niubbo,

Si ti serve un Kalman, ma non quella cosa che trovi sul tutorial che hai linkato, è tutto meno che un vero Kalman smiley
Il Kalman lo applichi a tutto il sistema, ovvero a tutti i d.o.f., e questo richiede un grosso lavoro di analisi matematica e devi anche conoscere in modo abbastanza preciso le funzioni di trasferimento del sistema altrimenti te lo scordi di implementare un Kalman che sia realmente preciso.
Potresti optare per la soluzione di Lesto che utilizza solo la DCM, molto più semplice da implementare e offre lo stesso buoni risultati.
Ovviamente c'è sempre la questione pid, che è tutt'altro che secondaria, e da quello che hai scritto qui direi che non hai le idee molto chiare su cosa sia e come funziona il pid  smiley
Ti consiglio di cercare il corso pid di Livio Orsini, lo trovi in formato pdf liberamente scaricabile, è la miglior introduzione possibile al mondo del pid che, dietro l'apparente semplicità della formulazione canonica, nasconde molte insidie e alberga il maligno (come direbbe Bonolis  smiley-mr-green ).
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Guarda sulla mia firma il progetto quadrilatero completo,

Ma vola ?
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ottimo lavoro, è un buon inizio.
Come ti sei accorto i sensori vanno "puliti", in oltre i sensori hanno un "output rate" (vedi datasheet per i valori) che in pratica è quante volte al secondo si aggiornano. Leggere i sensori più in fretta senza apposita pulizia dei valori crea risultati sballati. Poi applichi il kallmann, che pulisce i segnali ulteriormente, e poi fai una "sensor fusion", ovvero applichi un algoritmo che "mischia" i dati dei sensori.
Lavora tranquillamente su un singolo asse, tanto tranne la rotazione su se stesso (yaw), che puoi implementare più avanti,
Io uso la DCM che fa sia da filtro che da sensor fusion (https://github.com/lestofante/arduinoSketch/blob/master/QuadricotteroCompleto/stabilization/Stabilizzazione.cpp), ed è lo stesso algoritmo usato nella libreria freeIMU, anzi, mi pare che lui usi la versione "base" di Mayhony mentre io uso quella modificata da Madgwick che incorpora la compensazione per la distorsione magnetica del magnetometro
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Guarda sulla mia firma il progetto quadrilatero completo,

Ma vola ?

no, è un codice vecchissimo (5 mesi fa), ora sono allo stesso punto di samu_87 ma con migliore stabilità e su tutti gli assi (yaw compreso) ma comnadabile solo come potenza motore(throttle) via Seriale (debug del quaternione graficamente a 30Hz se non ricordo male).
Ovviamente ora è tutto fermo perchè sto portando il codice sull STM32, se ne avessi il tempo. Forse sono riuscito a comunicarci via seriale attraverso un traslatore di livelli e un chip FTDI, l'USB per ora l'ho abbandonata che mi ha portato via un sacco di tempo senza risultati.

Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ovviamente ora è tutto fermo perchè sto portando il codice sull STM32, se ne avessi il tempo.

Io ho già fatto il porting del mio codice per dsPIC33 sulla STM32F3, funziona abbastanza bene devo solo finire di ottimizzare ed eliminare qualche bug minore.
Come prima impressione, corroborata da verifiche pratiche e strumentali, posso confermarti che i sensori della STM32F3 sono realmente superiori a quelli che utilizzavo sulla precedente versione della IMU, ovvero l'ITG3200 e l'ADXL345 con il magnetometro HMC5883L.
Inutile dire che avanza tempo cpu in abbondanza per gestire il quadri e il GPS con tanto di funzionalità per il volo autonomo, questo anche grazie alla presenza della fpu e del core dsp, impossibile chiedere di più per solo 14 Euro  smiley-mr-green
Logged

0
Online Online
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si, ma io voglio i dati via USB!!!!! a parte che in realtà se la seriale mi funziona bene, è giusto a 3,3v come gli xbee di cui ne ho una coppia a casa...
il problema è il tempo da dedicarci, speravo nelle vacanze di natale ma una capellona mi ha agguantato, e addio al già poco tempo libero smiley
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho fatto qualche passo avanti, vi posto il video del risultato (ancora in beta) che ho ottenuto applicando un PID per cercare di bilanciare un asse: https://www.youtube.com/watch?v=Jo9mfy4mhxg

Direi che sei sulla buona strada smiley

Quote
Ho notato però che l'input del sensore è poco uniforme, quindi per procedere devo assolutamente implementare un filtro di kalman come questo http://www.gioblu.com/tutorials/programmazione/98-filtro-di-kalman-con-arduino ma ho una domanda da niubbo,

Si ti serve un Kalman, ma non quella cosa che trovi sul tutorial che hai linkato, è tutto meno che un vero Kalman smiley
Il Kalman lo applichi a tutto il sistema, ovvero a tutti i d.o.f., e questo richiede un grosso lavoro di analisi matematica e devi anche conoscere in modo abbastanza preciso le funzioni di trasferimento del sistema altrimenti te lo scordi di implementare un Kalman che sia realmente preciso.
Potresti optare per la soluzione di Lesto che utilizza solo la DCM, molto più semplice da implementare e offre lo stesso buoni risultati.
Ovviamente c'è sempre la questione pid, che è tutt'altro che secondaria, e da quello che hai scritto qui direi che non hai le idee molto chiare su cosa sia e come funziona il pid  smiley
Ti consiglio di cercare il corso pid di Livio Orsini, lo trovi in formato pdf liberamente scaricabile, è la miglior introduzione possibile al mondo del pid che, dietro l'apparente semplicità della formulazione canonica, nasconde molte insidie e alberga il maligno (come direbbe Bonolis  smiley-mr-green ).

Intanto ti ringrazio, mi sa che inizierò la DCM.

Per quanto riguarda il PID ho trovato questi materiali, inserisco i link così che possano essere utili ad altri:

http://www.fabbrimarco.com/droboitalia/Le%20guide%20di%20Roboitalia%20-%20il%20PID%20facile1.pdf

http://www.plcforum.info/didattica/conreg/conreg.htm

Poi devo assolutamente visualizzare l'andamento dei valori con grafici tramite Processing.

Ringrazio molto anche lesto!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 23
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
P = errore / kP;
I = I + roll * kI;
D = ((errore - erroreOld) / interval) * kD;

float PID = P + I + D;

Ora le formule di PID dovrebbero essere corrette giusto?! considerando che interval è la durata dell loop.

Da qui capisco che con queste tre regole posso controllare una sola variabile di output, nel senso, il PID mi permette di correggere un errore, l'errore è dato da un valore aspettato e un valore letto, il PID minimizza questo errore. Se fin qui ci sono ora dico che il mio errore è lo scostamento dallo zero di un asse X del quale possiedo il valore, come attuatori ho due motori che compiono lo stesso numero di giri, il PID mi fornirà (se settato a dovere) un valore da sottrarre a un motore e sommare all'altro che mi garantisce la stabilità di tale asse.

Dovendo stabilizzare due assi X e Y dovrò gestire due PID distinti per ogni asse??
O mi sfugge il funzionamento della DCM che fonde gli input?!

Grazie!
Logged

Pages: 1 ... 85 86 [87] 88 89 ... 106   Go Up
Jump to: