Official topic: multicotteri con arduino!

lesto: per il gps esistono dei chip che fanno solo da FPU, tipo questa, non basterebbe? http://www.sparkfun.com/products/8129

Questo in specifico non lo conoscevo, ho dato un'occhiata al data sheet e si tratta sicuramente di un dsPIC30F3012 programmato per fare da FPU, il pin out corrisponde perfettamente, solo i dsPIC30 funzionano anche a 5V e il set di calcoli è quello del set matematico del C30 con aggiunte le funzioni della libreria matematica estesa per i dsPIC, insomma niente di strano, per il GPS si limita a verificare la validità delle sentenze nmea. Come ho già detto servono calcoli a 64 bit per tracciare un percorso partendo da coordinate gps, per rendersene conto basta pensare che mediamente un secondo d'arco sulla latitudine vale circa 300 metri, ed è una frazione pari a 1/(360*3600), per rendersi conto che con solo 32 bit non vai da nessuna parte, sulla longitudine è pure peggio perché la distanza varia in funzione della latitudine, sono identiche solo all'equatore.

tra l'altro se non erro buona parte dei GPS che ho visto usano l'NMEA e restituiscono già delle coordinate,

Tutti i gps commerciali forniscono le coordinate tramite sentenze NMEA, è uno standard de facto.

quindi basta trovare l'orientamento del vettore tra il punto attuale e quello di arrivo, e con uno o più PID (magari uno specifico per l'altezza, così il problema diviene 2D)

Il pid non serve a nulla in questo caso, devi tracciare una rotta tra due coordinate cartesiane trasformandole in polari, e fin qui sarebbe pure semplice da fare, però la terra non è piatta ed ecco perché diventa un problema di geometria sferica. Anche se su distanze molto brevi, poche decine di metri, puoi approssimare il tutto in 2D rimane sempre il problema che i calcoli vanno fatti a 64 bit visto che il GPS ti ritorna una cosa del tipo 32* 18' 14,128" sia per la latitudine che per la longitudine ovvero un bel numero composto da +/- 2 cifre e 10 decimali e i way point vanno espressi con la stessa risoluzione La terra è grossa e per poter specificare un punto con precisione, diciamo +/- 1 metro, serve molta risoluzione :)

milvusmilvus: e siccome la precisione dei gps non è assoluta (il che rende inutile anche il calcolo a 64bit)

Un GPS decente di ultima generazione, con EGNOS disponibile, garantisce un circolo di confusione di circa 3 metri, la precisione/risoluzione ti serve sempre e comunque perché i conti li devi fare con i giusti valori, se cominci ad arrotondare pure quelli puoi dire addio alla precisione della rotta.

basta che ricalcola l' intinerario ogni 10s (credo che sia sufficente a fare il calcolo :D) poi man mano che si avvicina, potrebbe aumentare la frequesnza dei controlli, puo controllare le coordinate gps in realt ime e confrontarle con quelle del viewpoint, quando la distenza è inferiore a un tot metri si ferma

La rotta deve essere calcolata, e corretta, istante per istante, diciamo almeno una volta al secondo, ed è pure poco, sia perché il mezzo non vola mai perfettamente allineato con la rotta preimpostata, vuoi per le tolleranze meccaniche, vuoi per il vento, le turbolenze, le termiche, sia perché tocca fare i conti con il drift della IMU che non è assolutamente trascurabile. Altro dettaglio, un quadricottero può tranquillamente volare a oltre 50 km/h, in 10 secondi percorre oltre 130 metri, penso di non dover dire altro :)

ma su 100m calcolare una itinerario relttilineo invece che curvilineo cosa comporta??? chredo che su una distanza cosi piccola, crei piu problemi l' erba che cresce sul terreno che la circonferenza terrestre, salvo che si voglia far volare un uav sul campo di calcio di holly e benjy :D, al limite si puo calcolare un itinerario rettilineo, e impostare la distanza da terra (con un sensore, un telemetro, o qulasuasi cosa calcoli la distanza) e dire di mantenerla costante, ovviamente la velocità del mezzo non deve essere alta senno si possono avere problemi. a che velocità viaggia un uav, ovviamente quelli da 1000-2000 euro, come il mikrocopter, e non un predator :D

beh può volare a varie velocità ma dipende come imposti il software, se voglio che rispetti una certa velocità un vero UAV dovrebbe farlo, intendo che io nel waypoint gli metto la velocità, altitudine, eventuali configurazione (POI o stable mode attivo o alt hold od altro) e magari anche l'ora in cui deve essere in quel punto

poi per semplificare le cose il software su pc potrebbe creare più waypoint invece che solo 2 per rendere tutto più preciso. ad esempio se voglio che il quadri faccia 250 metri a 50 orari gli metto 1 waypoint di mezzo a 135 metri in modo che abbia un altro riferimento di rotta (con GPS 10Hz)

milvusmilvus: ma su 100m calcolare una itinerario relttilineo invece che curvilineo cosa comporta???

Vallo a dire a quelli che devono georefenziare le piantine per il GPS :grin: Il problema è molto complesso e non si può affrontare su un forum, ti consiglio di scaricarti un po di documentazione su come funziona il gps, i sistemi geodeteci, in particolare il WGS 84, e la matematica necessaria per convertire le coordinate GPS in una rotta, così ti rendi conto da solo che la cosa non è semplice da gestire. Giusto come curiosità, usando due gps i dentici di buona qualità, uno posto sul quadri e fisso a terra, è possibile ridurre l'errore a meno di 50 cm, è una specie di gps differenziale semplificato, è indispensabile un data link bidirezionale tra la postazione gps a terra e il velivolo.

buona l' idea di mettere piu wievpoint per aggiustare la rotta, comunque, io non è che non voglia fare un sistema con 64bit di profondità, voglio farne uno che possa funzionare con arduino, il mio gps sul cellulare, non ha un porcesore a 64bit, e mi porta ai punti voluti, li come riferimento ho il terreno, ovvimante non sarà precisissimo, ma per un sistema di navicazione casalingo credo che sia piu che sufficente, anche i dispositivi gps militari (che quasi sempre sono i piu evoluti.. purtroppo) non hanno una precisione assoluta, infatti i bersagli vengono illuminati con dei laser se richiedono piu precisione. riguardo al montare 2 gps, questo ridurrebbe l' errore, basta fare una media dei 2 punti rilevati, ma almeno nel mio caso, se la precisione è attorno al metro, sarei piu che soddisfatto

Un GPS decente di ultima generazione, con EGNOS disponibile, garantisce un circolo di confusione di circa 3 metri, la precisione/risoluzione ti serve sempre e comunque perché i conti li devi fare con i giusti valori, se cominci ad arrotondare pure quelli puoi dire addio alla precisione della rotta.

si può creare un tipo doi dato, o meglio una classe, che gestisca la matematica... insomma un tipo di dato apposito, basandosi sul codice che è usato per float o partendo da 0. Non dovrebbe essere troppo difficile, magari esiste già

Se dici che quel chip non è altro che un micro "tarpiato", tanto vale usare un secondo GPS. Un mio amico ha fatto un esperimento (in 2D) di una barra con eliche ai limiti che tende a raggiungere un punto; ha usato un PID per il mantenimento dell'orientamento, uno per la gestione dell'altezza, e uno per gestire la traslazione destra sinistra. Per il resto ha usato coordinate attuali e coordinate di arrivo.

Il problema però è che buona parte dei GPS (economici) viaggiano a 1Hz, massimo 10Hz, quindi sono forse un pò troppo lenti per essere usati da soli e bisognerebbe calcolare (o meglio stimare) lo spazio percorso in modo da poter rendere più veloce il loop di "posizionamento" usando la posizione attuale stimata. Direi che tutto questo lo farei fare a un micro apposta.

Il problema è molto complesso e non si può affrontare su un forum, ti consiglio di scaricarti un po di documentazione su come funziona il gps, i sistemi geodeteci, in particolare il WGS 84, e la matematica necessaria per convertire le coordinate GPS in una rotta, così ti rendi conto da solo che la cosa non è semplice da gestire.

hai qualche spunto da cui iniziare? io pensavo di cavarmela usando l'algebra lineare.. qualcosa tipo calcolare la retta (3D) che congiunge partenza e destinazione, poi proiettarla su una sfera

scusate ma un quadri dubito riuscirà a volare per il tempo necessario a raggiungere 1km quindi non capisco perchè fasciarci la testa sulle 3 dimensioni.

il più dei quad ormai monta un altimetro di precisione basato su un barometro e ha uno scarto di pochi centimentri se non millimetri.

inoltre possiamo prendere la superficie terrestre come un piano per brevi tratti, un UAV come quello che intendete voi che possa volare per una lunghezza per cui la rotazione della terra incide (diciamo 3-4km?) non è fattibile con un quadricottero, 4 motori = 4 spinte = 4 volte il consumo.

un quadri in media vola a 40km/h per 15 minuti, raggiungerebbe nei casi migliori diciamo il km.

milvusmilvus: voglio farne uno che possa funzionare con arduino,

Con Arduino non puoi fare navigazione in real time su un UAV perchè non ha abbastanza potenza di calcolo. Intendiamoci nulla vieta di implementare routine matematiche a 64 bit su una cpu a 8 bit, del resto le prime calcolatrici tascabili scientifiche utilizzando processori a 8 bit, gettonatissimo lo Z80, e facevano calcoli precisissimi con risoluzione anche maggiore di 64 bit, però erano lente, per fare un logaritmo, una esponenziale o una qualunque operazione trigonometrica ci mettevano decimi di secondi, i calcoli di rotta richiedono decine di queste operazioni per ogni iterazione.

il mio gps sul cellulare, non ha un porcesore a 64bit, e mi porta ai punti voluti, li come riferimento ho il terreno,

Il tuo cellulare ha sicuramente un processore a 32 bit, un ARM, un MIPS o un Freescale, da qualche centinaio di MHz, potrebbe avere anche un DSP, e di sicuro non ha problemi a macinare calcoli a 64 bit.

anche i dispositivi gps militari (che quasi sempre sono i piu evoluti.. purtroppo) non hanno una precisione assoluta, infatti i bersagli vengono illuminati con dei laser se richiedono piu precisione.

Se ti dico la reale precisione di un GPS militare mi arrestano, sono informazioni riservate, ti dico solo che è migliore di quello che pensi, però il GPS, sulle armi, viene utilizzato esclusivamente sui missili a lunga gittata, p.e. i cruise, e non è lo strumento di rotta primario. Sulle armi ad uso immediato, come le bombe intelligenti, si usano gli illuminatori laser perché non servirebbe a nulla un GPS in questo caso, non perché non offre la necessaria precisione, ma perché è impossibile prendere al volo le coordinate del bersaglio ed è necessario un certo tempo per avviare il gps ed ottenere il fix, per non parlare del fatto che è facilissimo disturbarlo e che potrebbe essere non disponibile per via delle condizioni meteo.

Con Arduino non puoi fare navigazione in real time su un UAV perchè non ha abbastanza potenza di calcolo. Intendiamoci nulla vieta di implementare routine matematiche a 64 bit su una cpu a 8 bit, del resto le prime calcolatrici tascabili scientifiche utilizzando processori a 8 bit, gettonatissimo lo Z80, e facevano calcoli precisissimi con risoluzione anche maggiore di 64 bit, però erano lente, per fare un logaritmo, una esponenziale o una qualunque operazione trigonometrica ci mettevano decimi di secondi, i calcoli di rotta richiedono decine di queste operazioni per ogni iterazione.

per real time, intendevo 0,5s o 1s, cosi da poterle fare comunqe, ovviamente ad una certa distanza deve inziare a rallentare...

Il tuo cellulare ha sicuramente un processore a 32 bit, un ARM, un MIPS o un Freescale, da qualche centinaio di MHz, potrebbe avere anche un DSP, e di sicuro non ha problemi a macinare calcoli a 64 bit.

mi hai fatto venire un dubbio.... ora mi informo :D

Se ti dico la reale precisione di un GPS militare mi arrestano, sono informazioni riservate, ti dico solo che è migliore di quello che pensi, però il GPS, sulle armi, viene utilizzato esclusivamente sui missili a lunga gittata, p.e. i cruise, e non è lo strumento di rotta primario. Sulle armi ad uso immediato, come le bombe intelligenti, si usano gli illuminatori laser perché non servirebbe a nulla un GPS in questo caso, non perché non offre la necessaria precisione, ma perché è impossibile prendere al volo le coordinate del bersaglio ed è necessario un certo tempo per avviare il gps ed ottenere il fix, per non parlare del fatto che è facilissimo disturbarlo e che potrebbe essere non disponibile per via delle condizioni meteo.

per quanto siano precisi dubito che scendano sotto i 10cm, 1 perche è inutile per un missile :D, 2 perche anche una variazione di pressione atmosferica influisce sulla velocità del onda che invia il sengale

superlol: il più dei quad ormai monta un altimetro di precisione basato su un barometro e ha uno scarto di pochi centimentri se non millimetri.

Esagerato, è già tanto se l'altimetro ha una precisione al singolo metro con una risoluzione di circa 50 cm, e per ottenere questi risultati oltre ad usare un buon sensore c'è pure da fare un discreto numero di calcoli abbastanza complicati.

inoltre possiamo prendere la superficie terrestre come un piano per brevi tratti, un UAV come quello che intendete voi che possa volare per una lunghezza per cui la rotazione della terra incide (diciamo 3-4km?) non è fattibile con un quadricottero, 4 motori = 4 spinte = 4 volte il consumo.

Forse non mi sono spiegato bene, il problema è nel come il GPS fornisce le coordinate, sono riferite ad un ben preciso modello geodetico, tipicamente il WGS84, ed è per questo motivo che tocca ragionare in geometria sferica. Altro dettaglio, tra due punti cartesiani posti a quote diverse se non tieni conto del fatto che il percorso è in discesa, o in salita, ottieni un grosso errore se le consideri semplicemente su un piano, bastano poche decine di metri in differenza di quota per accumulare errori di molti metri sul piano, ed ecco che torniamo al 3D con tutti i calcoli relativi.

milvusmilvus:

Con Arduino non puoi fare navigazione in real time su un UAV perchè non ha abbastanza potenza di calcolo. Intendiamoci nulla vieta di implementare routine matematiche a 64 bit su una cpu a 8 bit, del resto le prime calcolatrici tascabili scientifiche utilizzando processori a 8 bit, gettonatissimo lo Z80, e facevano calcoli precisissimi con risoluzione anche maggiore di 64 bit, però erano lente, per fare un logaritmo, una esponenziale o una qualunque operazione trigonometrica ci mettevano decimi di secondi, i calcoli di rotta richiedono decine di queste operazioni per ogni iterazione.

per real time, intendevo 0,5s o 1s, cosi da poterle fare comunqe, ovviamente ad una certa distanza deve inziare a rallentare...

Il tuo cellulare ha sicuramente un processore a 32 bit, un ARM, un MIPS o un Freescale, da qualche centinaio di MHz, potrebbe avere anche un DSP, e di sicuro non ha problemi a macinare calcoli a 64 bit.

mi hai fatto venire un dubbio.... ora mi informo :D

Se ti dico la reale precisione di un GPS militare mi arrestano, sono informazioni riservate, ti dico solo che è migliore di quello che pensi, però il GPS, sulle armi, viene utilizzato esclusivamente sui missili a lunga gittata, p.e. i cruise, e non è lo strumento di rotta primario. Sulle armi ad uso immediato, come le bombe intelligenti, si usano gli illuminatori laser perché non servirebbe a nulla un GPS in questo caso, non perché non offre la necessaria precisione, ma perché è impossibile prendere al volo le coordinate del bersaglio ed è necessario un certo tempo per avviare il gps ed ottenere il fix, per non parlare del fatto che è facilissimo disturbarlo e che potrebbe essere non disponibile per via delle condizioni meteo.

per quanto siano precisi dubito che scendano sotto i 10cm, 1 perche è inutile per un missile :D, 2 perche anche una variazione di pressione atmosferica influisce sulla velocità del onda che invia il sengale

Il mio telefono è del 2008 ed ha una CPU qualcomm a 540Mhz :P:P

milvusmilvus: 2 perche anche una variazione di pressione atmosferica influisce sulla velocità del onda che invia il sengale

Questa non l'ho capita, il GPS usa onde radio micrometriche, la pressione atmosferica non ha nessun effetto sulla velocità del segnale. Forse volevi dire che tocca tenere conto degli effetti relativistici dovuti alle differenze di velocità e gravità tra l'orologio del ricevitore sulla terra e l'orologio posto sul satellite, errore che ha un valore massimo di circa 23 ns però varia in funzione della posizione orbitale del satellite e deve essere calcolato ad ogni ciclo di ricezione.

astrobeed: Questa non l'ho capita, il GPS usa onde radio micrometriche, la pressione atmosferica non ha nessun effetto sulla velocità del segnale. Forse volevi dire che tocca tenere conto degli effetti relativistici dovuti alle differenze di velocità e gravità tra l'orologio del ricevitore sulla terra e l'orologio posto sul satellite, errore che ha un valore massimo di circa 23 ns però varia in funzione della posizione orbitale del satellite e deve essere calcolato ad ogni ciclo di ricezione.

veramente mi riferivo al fatto che le onde radio nel vuoto viaggiano a 300'000 km al secondo, nell aria a un po meno, con la pressione diferente dell aria la variazione c'è, anche se forse è trascurabile, poi come hai detto tu c'è l' errore dovuto agli orologi....non si avrà mai una precisione al mm.

i medoti di navigazione posso essere: 1) dico allo uav di fare 100m verso nord, lui a causa della circonnferenza terrestre avra un certo errore(non calcolando a 64bit) 2) dico di recarsi ad un certo punto, caloca l' itinerario iniziale e lo raggiunge con un certo errore(non calcolando a 64bit) 3)dico di recarsi ad un certo punto, caloca l' itinerario iniziale e lo raggiunge con un certo errore, ripete il calcolo e riduce l' errore, e cosi via (non calcolando a 64bit)

io invece, volevo fare un sistema molto piu grezzo, e semplice, in pratica siccome per 2 punti passa solo una linea retta(per semplificare supponiamo i punti alla stessa altezza da terra, e senza ostacoli tra di loro) una bussola di bordo dice in che direzione è rivolto il mezzo, si calcola l' angolazione rispetto a questo verso del punto di arrivo, e si fa ruotare di tot gradi, poi sapendo la distanza(ricalcolandola ogni secondo) mi dirigo verso il viewpoint, quando la distanza sarà inferiore ad un certo numero si ferma. come non farlo schiantare a terra?? n sensore gli dice di mantenere un altezza costante.

approposito, oltre ai barometri, che non sono precisissimi, ed agli ultrasuoni, che funzionano solo a piccole distanze, ci sono dei telemetri laser per arduino?

milvusmilvus: approposito, oltre ai barometri, che non sono precisissimi, ed agli ultrasuoni, che funzionano solo a piccole distanze, ci sono dei telemetri laser per arduino?

Come sensore altimetrico usa usa il BMP085, facilmente reperibile e costa 7 Euro (solo chip), ho avuto modo di provarlo a lungo e posso confermare che la risoluzione riportata dal data sheet, circa +/- 25 cm, è reale anche se al costo di una serie abbastanza complessa di calcoli, ovviamente deve essere installato all'interno di una camera con presa d'aria statica. Gli ultrasuoni puoi usarli solo per l'avvicinamento finale al suolo, diciamo da tre metri fino all'atterraggio, c'è il problema che i classici sensori a 40 kHz funzionano malissimo sull'erba e sono facilmente influenzati dalle armoniche delle vibrazioni dovute ai rotori, per quanto equilibri ci saranno sempre, l'ideale è utilizzare sensori a 200 kHz, purtroppo non facilmente reperibili e costosetti. Un telemetro laser è un oggetto abbastanza ingombrante, pesante e molto costoso, il più economico che puoi trovare è il metro laser della Stanley, circa 100 Euro, però non prevede nessuna interfaccia, tocca hackerarlo, e ci mette diversi secondi per fare la misura, praticamente inutile. Tra parentesi stavo valutando proprio in questi giorni la realizzazione di un progetto Arduino Based che ho battezzato AlVarIno, è un Altimetro con Variometro realizzato con il BMP085 e un micro dedicato (devo decidere quale) che fa tutti i conti e fornisce direttamente la quota e il rateo di salita/discesa aggiornandoli 30 volte al secondo, il tutto interrogabile tramite I2C o Seriale/RS485.

milvusmilvus: io invece, volevo fare un sistema molto piu grezzo, e semplice, in pratica siccome per 2 punti passa solo una linea retta(per semplificare supponiamo i punti alla stessa altezza da terra, e senza ostacoli tra di loro) una bussola di bordo dice in che direzione è rivolto il mezzo, si calcola l' angolazione rispetto a questo verso del punto di arrivo, e si fa ruotare di tot gradi, poi sapendo la distanza(ricalcolandola ogni secondo) mi dirigo verso il viewpoint, quando la distanza sarà inferiore ad un certo numero si ferma. come non farlo schiantare a terra?? n sensore gli dice di mantenere un altezza costante.

Io chiedevo perchè mi serve per grosse distanze, e non nell'ambito quadricottero.. per piccole distanze secondo me con coordinate cilindriche o sferiche risolvi tutti i tuoi problemi (dipende da come vuoi implementare il controllo sull'altezza)

ovviamente pirma si provera con altezze uguali… poi si implementa il controllo del altezza dal suolo, che non dovrebbe essere difficile da tenere con un il multiwii, il controllo si puo fare con un barometro per grandi altezze, o con un sensore ad ultrasuoni

non si puo costruire con arduino un telemetro laser??? il funzionamente è abbastanza semplice, ma non ho capito come fa a capire quanto il laser colpisce l’ oggetto, non credo che venfa riflesso per centinaia di metri…

superlol: un quadri in media vola a 40km/h per 15 minuti, raggiungerebbe nei casi migliori diciamo il km.

Veramente se uno fa 40km in 1 ora, in 15 minuti che e' 1/4 di ora fa 40/4km, quindi ne fa 10, non 1. In tutti i video che ho visto, quelli che li lanciavano "a bomba" facevano il km in un attimo... F

Federico:

superlol: un quadri in media vola a 40km/h per 15 minuti, raggiungerebbe nei casi migliori diciamo il km.

Veramente se uno fa 40km in 1 ora, in 15 minuti che e' 1/4 di ora fa 40/4km, quindi ne fa 10, non 1. In tutti i video che ho visto, quelli che li lanciavano "a bomba" facevano il km in un attimo... F

io ho visto video di tricotteri che toccavano punte di 60 km/h ma lanciandoli al massimo della potenza consumano molto di piu.... e la durata arriva a 5 min....

milvusmilvus: io ho visto video di tricotteri che toccavano punte di 60 km/h ma lanciandoli al massimo della potenza consumano molto di piu.... e la durata arriva a 5 min....

La velocità massima arriva senza problemi anche oltre i 100 km/h, esattamente come per un modello di elicottero. Un classico errore è confondere la potenza necessaria per accelerare e quella necessaria per il volo, quando si passa dal volo stazionario a quello traslato le quattro eliche diventano a tutti gli effetti un'ala con la conseguente portanza, più veloci si vola e meno potenza serve per sostenere il mezzo. Ovviamente c'è un punto oltre il quale la resistenza aerodinamica invalida l'effetto portante dei rotori e serve maggiore potenza per volare rispetto a quella per il volo stazionario. Quale sia la velocità massima per il volo traslato ove si raggiunge la massima efficienza, cioè minor consumo di energia in funzione dello spazio percorso, dipende da molti fattori, però mi sento di azzardare che per un quadricottero ben costruito sia attorno ai 30-35 km/h, diciamo che se in hovering le batterie durano 10 minuti in questa condizione di volo durano almeno 13-14 minuti.