Official topic: multicotteri con arduino!

astrobeed:

milvusmilvus:
io credo che un arduino dedicato alla navigazione sia sufficente, forse con dei limiti, ma dovrebbe riuscire a fare qualcosa... forse il 32bit, non sara potentissimo, ma credo che se non fosse un passo in avanti, non sarebbe implementato

Al momento si potrebbe prendere in considerazione la scheda di Digilent, la chipKIT UNO32, o la versione Mega32, costa come un normale Arduino e sopra c'è un processore 32 bit che è decisamente superiore agli ARM7.
E' vero che con la chipKIT ci sono problemi di compatibilità con alcune shield, ma ci saranno lo stesso anche con un ipotetico futuro Arduino ufficiale a 32 bit, e che diverse librerie esterne all'IDE non si possono usare senza prima modificare tutte le parti che accedono direttamente all'hardware, ma in questo caso non credo sia un problema.
Diciamo che usare questa scheda è un modo semplice e poco costoso per poter disporre di molta potenza di calcolo, e anche molta memoria, senza doversi costruire schede e/o spendere molti soldi.

io ho sentito che hanno problemi coi bus, soprattutto I2C che in questo progetto è fondamentale.

però si potrebbe riscrivere il software da tutta la community italiana (nel senso riadattarlo) per un chip più potente "convertito" ad arduino.

intendo che alla fine arduino non è altro che una scheda con un microcontrollore e una serie di chip per rendere più facile la prototipazione e il caircamento, flashando da ISP un bootloader per dsPIC e facendo una schedina con le stesse caratteristice (anche i dsPic supportano il ICSP da quanto so) si potrebbe ampliare di molto il software lasciando magari prezzi accessibili o comunque immagino esistano dsPic in formato DIP che tutto possano saldare, se uno vuole la fa su millefori o si fa una scheda o si fanno una serie di schede senza e con componenti da distribuire.

il problema principale è che l'utente finale non può comprarsi un programmatore ISP e quindi bisognerebbe distribuire Pic con bootloader precaricato (come con arduino).

in pratica quello che vorrei è che la communiti si attivasse dicendo quello che vorrebbe da arduino (io ad esempio vorrei una scheda che abbia più pin della UNO ma meno dell'atmega perchè sono sprecati), ci unisse cose per i quadricotteri (quindi potenza, calcolo in DSP o ci mettiamo un ARM), e poi si pensasse a come migliorare il software (con contatti con alexinparis e collaboratori) tenendo attiva e in sviluppo la parte arduino 8bit come stabilizzazione e poi per chi vuole un UAV passa alla scheda nuova.

secondo me non stiamo andando fuori tema perchè credo che stia nascendo in altri progetti il problema di passare a 32 bit o comunque a MCU più potenti e credo che questa nuova scheda con l'aiuto di Massimo, Davide, e gli altri creatori della vera arduino potrebbe diventare una nuova arduino rivoluzionaria!

Massimo diceva che non era facile far migrare una community da 8 a 32bit ma se prendiamo quello che vuole la community dai 32 bit il passaggio credo sarà quasi indolore.

anche se credo che il problema maggiore di una migrazione sarebbe il convertire produzione aggiungendo una scheda ma senza togliere dalla produzione l'altra, tanti costi iniziali insomma

io direi innanziutto di costruire un tricoso volante, il codice si puo prendere il prestito e studiarlo, per chi ne ha voglia...poi si potranno sempre fare degli upgrade...

superlol:
io ho sentito che hanno problemi coi bus, soprattutto I2C che in questo progetto è fondamentale.

Il "sentito dire" non è una cosa su cui fare conto :slight_smile:
Io ti posso dire con certezza che l'I2C su i PIC32 funziona perfettamente per un semplicissimo motivo, li uso per lavoro e oltre a conoscerli molto bene so perfettamente quali sono i punti deboli.
Tenuto conto che il livello medio di conoscenza dell'elettronica di chi usa Arduino, senza offesa per nessuno, è decisamente basso mi viene da pensare che i "problemi" sono dovuti al fatto che l'I2C dei PIC32 funziona con livelli di tensione a 3.3 Volt, il che può creare non pochi problemi con i device che usano l'I2C a 5V se non si mette in mezzo un apposito traslatore di livelli.

però si potrebbe riscrivere il software da tutta la community italiana (nel senso riadattarlo) per un chip più potente "convertito" ad arduino.

Adattare un diverso micro ad Arduino non è una cosa semplice che si fa poche ore di lavoro, un conto è inserire nell'elenco dei micro supportati una mcu Atmel 8 bit della serie ATxxxx, un conto è prendere un micro totalmente diverso e adattarlo ad Arduino, è un lavoro che richiede mesi da parte di gente molto esperta.

intendo che alla fine arduino non è altro che una scheda con un microcontrollore e una serie di chip per rendere più facile la prototipazione e il caircamento, flashando da ISP un bootloader per dsPIC e facendo una schedina con le stesse caratteristice (anche i dsPic supportano il ICSP da quanto so)

Tutti i micro moderni prevedono la programmazione ISP, alcuni hanno addirittura il bootloader già integrato nel chip, il problema non è realizzare una nuova scheda, è il software.
Volendo esiste già una scheda con sopra un dsPIC33 28 pin con case dil pensata apposta per lo sviluppo come Arduino, è questa ed è un mio progetto per conto di Droids, però non la puoi programmare in Wiring, devi usare MPLAB e il compilatore C30 di Microchip, da notare che ora c'è anche MPLABX, realizzato tramite Netbeans, che gira nativamente pure con Linux e MAC OS.

il problema principale è che l'utente finale non può comprarsi un programmatore ISP e quindi bisognerebbe distribuire Pic con bootloader precaricato (come con arduino).

Sulla MuIn dsPIC è precaricato un bootloader seriale, esattamente come con Arduino, e questo vale per quasi tutte le schede commerciali.

in pratica quello che vorrei è che la communiti si attivasse dicendo quello che vorrebbe da arduino (io ad esempio vorrei una scheda che abbia più pin della UNO ma meno dell'atmega perchè sono sprecati)

Guarda che la differenza di costo tra un micro con 23 gpio e lo stesso modello con 60 gpio è un paio di Euro, se devi mettere un micro che ha più gpio della UNO tanto vale montare subito un micro con moltissimi gpio, se avanzano poco male, si lasciano sconnessi, ma se poi vengono a mancare tocca riprogettare l'intera scheda.

, ci unisse cose per i quadricotteri (quindi potenza, calcolo in DSP o ci mettiamo un ARM), e poi si pensasse a come migliorare il software (con contatti con alexinparis e collaboratori) tenendo attiva e in sviluppo la parte arduino 8bit come stabilizzazione e poi per chi vuole un UAV passa alla scheda nuova.

Intenzione buona, ma il problema è "il software chi lo fa ?", un conto è scrivere un programma in wiring per Arduino, un conto è lavorare in C ANSI su un 32 bit che ha una miriade di registri macchina, DMA, etc, poi va a finire che chi ci lavora realmente sopra sono solo una, due persone e tutti gli altri fanno solo da beta tester.

riguardo agli uav, per raggiungere un punto, io avevo pensato a questo
montare un gps, ed una bussola elettronica

si inseriscono le coordinate da raggiungere e in base alle coordinate date dal gps, con qualche calcolo trogonometrico si calcola l ancolo di rotazione del mezzo per raggiungere il punto richiesto, siccome il multicottero, è autostabile, e comandato con un trasmettitore, "simulare" l' invio di un comando al trasmettotore che fa ruotare di x gradi il mezzo, poi quando la sistanza tra il punto da raggiungere,e magari controllare la rotta ogni 10s è inferiore a y metri, si ferma. penso che una cosa del genere un arduino ad 8 bit sia in grado di farla.....
ovviamente funzionerebbe in mancanza di ostacoli.... per l' atterraggio si potrebbe usare un sensore ad ultrasuoni, che rileva la distanza dal suolo, e gradualmente riduce la potenza dei motori.

un arduino dedicato, non dovrebbe avere problemi a fare questo

E con gli ostacoli che potrebbe incontrare come la metti ???

in campo libero potrebbe funzionare..... oppure si puo salire a 100m di quota e poi riscendere....per gli ostacoli si potrebbe risolvere solo con tanti sensori....1 sotto, 2 avanti 2 dietro 2 per ogni lato, uno sopra... piu o meno.. ma sarebbe molto piu compllicato

si in effetti ne servirebbe almeno uno per lato più uno che senta il terreno.... sennò è quasi sicura la distruzione del mezzo ho paura....
e a livello di codice non è cosa da poco...

se qualcosa a 100mt di quota va male oltr a fare a pezzi tutto si richia di far del male alle persone.... a meno che non si metta un paracadute.....

milvusmilvus:
si inseriscono le coordinate da raggiungere e in base alle coordinate date dal gps, con qualche calcolo trogonometrico

Il problema è che non è "qualche calcolo trigonometrico", è un problema di geometria sferica con risoluzione almeno al milionesimo di grado, è molto più complicato di quello che pensi, Arduino non è in grado di fare simili calcoli in real time, anzi non ti basta proprio la matematica a 32 bit, serve la precisione double long int (64 bit).

per il gps esistono dei chip che fanno solo da FPU, tipo questa, non basterebbe? Floating Point Co-Processor uM-FPU v3.1 - COM-08129 - SparkFun Electronics
tra l'altro se non erro buona parte dei GPS che ho visto usano l'NMEA e restituiscono già delle coordinate, 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) far coincedere l'orientamento del sensore con quello del multicottero. Sicuramente non si arriva precisamente nel punto, ma dubito che l'errore (escluso quello GPS) sia superiore al metro.

Non credo che astrobeed si riferisca alla insufficiente potenza di calcolo dell'Atmega solo per quanto concerne la precisione degli stessi ma anche per la velocità.
Ammesso di utilizzare un coprocessore matematico, resta la "velocità" con cui l'Atmega dovrebbe trattare quei, considerando che un velivolo non sta... fermo ma è in movimento. Quindi quando l'Atmega dovrebbe calcolare di fermarsi in un punto, avrebbe già passato quel punto XD

astrobeed:

milvusmilvus:
si inseriscono le coordinate da raggiungere e in base alle coordinate date dal gps, con qualche calcolo trogonometrico

Il problema è che non è "qualche calcolo trigonometrico", è un problema di geometria sferica con risoluzione almeno al milionesimo di grado, è molto più complicato di quello che pensi, Arduino non è in grado di fare simili calcoli in real time, anzi non ti basta proprio la matematica a 32 bit, serve la precisione double long int (64 bit).

per essere precisi, si serve un calcolo di geometria sferica, e 64bit di calcolo, solo che per fare un sistema homemade, si puo arrotondare con linee rette, e siccome la precisione dei gps non è assoluta (il che rende inutile anche il calcolo a 64bit) e quindi il punto di arrivo dovrebbe essere anche a 2 metri dalle coordinate immesse, l' errore non puo essere coacolato in modo assoluto, ma una volta a 2 metri dal punto da raggiungere, si puo ricalcore l' itinerario, e correggere l' errore.

ratto93:
si in effetti ne servirebbe almeno uno per lato più uno che senta il terreno.... sennò è quasi sicura la distruzione del mezzo ho paura....
e a livello di codice non è cosa da poco...

se qualcosa a 100mt di quota va male oltr a fare a pezzi tutto si richia di far del male alle persone.... a meno che non si metta un paracadute.....

io dicevo 2 per lato (uno per motore) che sono le parti piu sporgenti..... ovvio che se cade da 100m si fanno danni, ma almenocche vuoi farlo volare su una folla, non dovrebbero esservi problemi, di solito i sistemi di "return to home" funzionano cosi, salgono ad una certa altezza, e impostano una rotta, facendo cosi si evitano ostacoli come alberi o muri, ma in campo libero, si puo anche impostare un altezza di 5 metri o meno. comunque l' unico problema del ritorno, e che sbagli coordinate, o atterri in altri posti, l' atterraggio è una cosa piu delicata...

leo72:
Non credo che astrobeed si riferisca alla insufficiente potenza di calcolo dell'Atmega solo per quanto concerne la precisione degli stessi ma anche per la velocità.
Ammesso di utilizzare un coprocessore matematico, resta la "velocità" con cui l'Atmega dovrebbe trattare quei, considerando che un velivolo non sta... fermo ma è in movimento. Quindi quando l'Atmega dovrebbe calcolare di fermarsi in un punto, avrebbe già passato quel punto XD

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

lesto:
per il gps esistono dei chip che fanno solo da FPU, tipo questa, non basterebbe? Floating Point Co-Processor uM-FPU v3.1 - COM-08129 - SparkFun Electronics

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 :slight_smile:

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 :slight_smile:

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 :smiley:

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.