Primi test - UAV gioblu.com

Ciao a tutti ragazzi. Ieri ho effettuato i primi test dell'aereo RC che utilizzero' per creare un UAV che sappia atterrare da solo sull'erba (senza carrelli, quindi spanciare). Vorrei iniziare con un semplice ultrasonico orientato verso il suolo, arduino e una IMU 5dof di sparkfun.

Il test è stato effettuato con una telecamera onboard perchè il principale utilizzo sarà lanciarlo da casa mia e farlo atterrare nel giardino di un amico a + o - 10km di distanza, usando solo il gps, la imu 5 dof e un ultrasonico :wink:

Qui il video :P:

Prevedo PARECCHI avvistamenti di ufo nella tua zona..... 10km! Ma non sono troppi?!

hahaha potrebbe essere!!
L'aereo ha una velocità di crociera 50km/h, dovrebbero essere 12 minuti di volo. La batteria dovrebbe durare 20 minuti.

Fallo partire di notte, mettici qualche led ad altissima luminosità lampeggiante e un buzzer che emette qualche rumore strano.... ahahhaha

Scherzi a parte, quanto peserebbe il tutto?

ti conviene easyglidet, più che altro con l'elettronica che ci monti a bordo hai contato che l'autonomia diminuisce? :smiley:

comunque prima inizia a fare un sistema stabilizzato che raggiunga in volo da un punto a ad uno b che possa essere ripreso in caos di guasto dal radiocomando (e già qui è difficile).
poi fai un sistema che riesca ad atterrare in uno spazio limitato e conta che anche il GPS ha una precisione di circa 20 metri, a seconda di quale prendi e quanti satelliti riesce ad agganciare, prima fai delle prove e guarda le coordinate di quanto sballano, perchè il giardino del tuo amico è grande 30x50 metri? :smiley: (30 sulla larghezza, 20 metri più margine e 5 perchè 20 metri ma ci metterà una 15ina di metri ad atterrare se tutto va bene).

il progetto fidati che è molto complesso ma buona fortuna se serve una mano chiedi :wink:

comunque l'easystar ha 20 minuti di autonomia ma non con motore sempre a palla e implementare qualcosa che riesca a monitorare anche quello la vedo dura..

Sono d'accordo. Per fortuna l'amico ha un giardino dove si riescirebbe ad atterrare con un ultraleggero quindi la precisione del GPS puo' anche essere minore di una sfera di 20m, e non sarebbe troppo problematico.
Per autonomia, sono d'accordo che vanno rifatti tutti i calcoli.

Parto dalla stabilizzazione di base, cioè stabilizzare parallele al terreno le ali e correggere eventuali errori.
Pensavo di partire da questo codice:

usando una IMU 5 dof di sparkfun a cui va aggiunto il controllo del terzo asse dell'accelerometro per capire se stiamo salendo o scendendo. Poi va aggiunta la lettura del GPS da 2kHZ che mi sono procurato, che se non sbaglio funziona o in seriale o in binario. Per ultrasonico dite che è un problema che l'aereo si muova a 25 30km/h in atterraggio??
Visto che il sensore usa il suono (che è veloce ma non una scheggia) non è che a 30km/h con sensore perfettamente perpendicolare avrei una lettura di qualità peggiore che da fermo (ho paura che l'aereo superi l'ultrasuono emesso :stuck_out_tongue: e che quindi il ricevitore non possa percepirlo correttamente)?

gps da 2000hz?? e la seriale a cosa va a 1000 mila? con lo standard nmea?

Una k di troppo scusate. Il gps aggiorna la sua posizione 2 volte al secondo. :stuck_out_tongue:

per l'algoritmo di stabilità con una 6dof puoi usare questo algoritmo: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295218329, l'importante è che l'input dai giroscopi dia in radianti al secondo.
L'algoritmo lo puoi testare al pc con il programmino java postato quì: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1295219565 , arduino deve stampare via serial i quattro valori di quaternione e poi andare a capo, java li legge e li rappresenta a schermo.

Noterai che lo YAW accumula errore: il problema lo puoi parzialmente risolvere con il GPS, semplicemente guardando in che direzione stai andando e estrapolando il tuo angolo YAW (in realtà può essere erroneo nel caso hai un vento frontale a 100km/h, perchè il GPS ti da lo spostamento rispetto alla terra, mentre a te serve lo spostamento rispetto all'aria...) oppure usando il classico magnetometro 3 assi(quindi 9DOF)

Anche io sono interessato a un autopilota del genere, ma ho deciso di partire prima dai multicotteri che hanno il vantaggio della partenza in verticale(a mio avviso il decollo/atterraggio è solo questione di qualche sensore in più) e algoritmi più complessi di stabilità (che invece sono la vera "anima" dell'autopilota)

qualche consiglio: non usare l'accelerometro per conoscere l'altezza, o almeno non fidarti, perchè in quel caso la lettura è relativa e effettui un'integrazione dei valori, che quindi comporta un'errore che si accumula (lo stesso problema dello YAW), mentre hai il GPS che ti da una lettura assoluta, e anche se canna di 20m non è un problema, tanto se ti avvicini troppo al suolo se ne accorge l'ultrasonico :slight_smile:

tieni aggiornato questa discussione che sono felice di aiutarti!

ps. nell'aria la velocità del suono è di 1.193,4 km/h... certo che perdi di precisione, a seconda di come sistemi il sensore (inclinato o dritto ecc..) leggerai dei valori più o meno piccoli in base alla velocità.. ma credo che se anche fosse una variazione notabile, con un paio di test trovi la proporzione che in base alla velocità e al valore letto ti restituisce la vera altitudine.

l'erba mi pare rifletta bene la luce, perchè non usare un laser?

insomma è vero che il suono fa i 300m/s e forse dici ho uno sfalsamento di 3ms ma allora con il laser questo sfalsamento si ridurrebbe a 0,0000001s (ad occhio :wink: )

Grazie Lesto delle res!!!
Io per rappresentare graficamente i dati dalla imu uso una cosa simile a questo programmino che ho scritto:

io vorrei utilizzare per regolare il beccheggio unicamente altitudine GPS e un asse dell'accelerometro.

Quindi il mio algoritmo è composto da:
Una parte che analizza un giroscopio, e due assi dell'accelerometro (di cui viene fatto l'arco tangente), il tutto filtrato con Kalman. Con i dati ottenuti viene utilizzato il PID per pilotare gli alettoni e regolare il rollio. Fondamentalmente deriva dal codice di Nicola Lugato per il suo robot self-balancing, leggermente rivisto:

Poi c'è una seconda parte (che sto ancora progettando) che analizza il dato altitudine dal GPS e lo integra all'accelerazione del terzo asse dell'accelerometro per pilotare il servo che muove il timone di profondità e che regola di conseguenza il beccheggio.

Per ridurre la problematica dello stallo dell'ala in virata (che nell'easystar è frequente) sto pensando di utilizzare un semplice tail lock gyro da elicottero, per pilotare direttamente il timone di coda e imporre all'aero il volo coordinato correggendo l'imbardata.

Se il codice ci sta, vorrei usare un Arduino MINI 168.

Credo che per mantenere il volo rettilineo possa anche funzionare, non so come possa reagire il sistema a virate a piu di 30° di inclinazione.

Ciao gbm
io ver visualizzare più grafici contemporanemente da arduino con il mio accelerometro (mma7260) uso un terminale chiamato Realterm
http://realterm.sourceforge.net/index.html#downloads_Download
ed un software chiamato kst

provali , se ti serve aiuto nella configurazione basta chiedere :wink:
oppure

uhm.. con l'easystar non bisognerebbe superare i 15° (parlo da modellista proprietario di un easyglider :slight_smile: )
comunque sto pensando che prima ti conviene anche trovare uno sketch che ti conti i punti: la traiettoria è un insieme di punti, questo lo devi calcolare e dare ad arduino il comando di raggiungere il punto prossimo.
poi io farei una cosa del genere: (schema del programma)

lancio contro vento (questo lo fai tu :wink: ) -> l'aereo raggiunge i (mettiamo) 35 metri d'altezza -> calcola la rotta GPS -> inizia la navigazione con una virata non superiore ai 13° -> arriva in linea retta fino al punto previsto per la discesa (in base all'angolo dell'atterragio) -> (qui puoi implementare un sistema che faccia atterrare l'aereo controvento, atterrare con un ES col vento in coda è difficile) -> rileva l'altezza tramite il GPS e scende con un'inclinazione non superiore ai 20-25° (nell'aeronautica figurarsi che l'ILS è configurato a 7° come standard :stuck_out_tongue: ) -> l'accellerometro controlla che l'aereo non si muova a causa del vento (raffiche di traverso) e in caso corregge con timone e alettoni per bilanciare il rollio generato -> continua a scendere finche non si rileva un'altezza di 10cm da terra, quindi si stacca motore alza il muso dell'aereo fino a 3-4° massimo..

questa sarebbe una procedura completa, infatti il decollo va fatto controvento e la traiettoria bisogna studiarla nel fatto che l'aereo non può virare in mezzo alle case, quindi necessita di arrivare almeno a 35 metri d'altezza per virare. l'altezza la calcoli così: all'accensione del modello si accende l'arduino che sal'va l'altezza a terra del gps, quindi alle letture sottrai quel valore a avrai l'altezza relativa :wink: puoi anche usare un sensore barometrico..

Da profano: a che altezza comincia a prepararsi per l'atterraggio?

bisognerebbe fare un calcolo trigonometrico su un triangolo:
ti prendi magari i 35metri coma altezza, un angolo e con un calcolo goniometrico arrivi a stimare anche la distanza in linea d'aria dal punto :wink:

hai il coseno dell'angolo (-75°) = 35 metri
in trigonometria non sono molto bravo ma il calcolo dovrebbe essere facile :wink: