Go Down

Topic: GPS differenziale con Arduino per robot (Read 1 time) previous topic - next topic

marcus barnet

Ciao ragazzi,

vorrei realizzare un sistema basato sul gps differenziale per poter localizzare ilm io robot mobile e soprattutto stabilire un punto di ritrovo in modo che quando io gli dica di ritornare alla base, lui prenda le coordinate impostate del punto di localizzazione e sappia ritornarci.

Il problema è che non ho trovato molte informazioni sul gps differenziale e non ho ben capito come funziona.
Le stazioni fisse sono i satelliti già in orbita e le postazioni sparse per il mondo o devo realizzare delle mie postazioni fisse e calcolarne esattamente la posizione?

Credo che la risposta giusta sia la prima, se è così, quindi, cosa dovrei fare io?
Che tipo di sensore GPS dovrei prendere?
Esistono delle librerie che mi permetterebbero di attenuare l'errore o lo farebbe già il gps?

Vi ringrazio :)

marcus barnet

Ho letto che quando un sensore è predisposto per il differenziale, basta impostarlo e poi in automatico tira fuori i dati già corretti.

Ho trovato questo sensore che di default, mi pare, utilizzi i dati differenziali.
http://www.sparkfun.com/products/163

Secondo voi, posso usare con arduino?

uwefed

Il GPS differenziale funziona avendo una stazione GPS fisso di cui si sa precisamente la posizione. Dai dati ricevuti di questo GPS si possono calcolare l'entitá dell'errore di posizione (differenza posizione ricevuta dai sateliti GPS e dalla posizione conosciuta). Questa informazione del entitá del errore viene spedita via radio al GPS mobile che puó calcolare dal segnale GPS ricevuto e dal errore mandatoli dal GPS fisso la sua posizione con una maggiore precisione. Si arriva a una precisione del cm.

Nel Tuo caso non penso che sia necessaria un calcolo del errore assoluto ma di un calcolo della posizione relativa al GPS fisso. Metti il GPS fisso su un punto facilmente determinabile sulla cartina e assegnali le coordiante lette dalla cartina.

Per far ritornare il robot alla posizione di partenza non serve un sistema di GPS differenziale e percui la conoscenza della posizione esatta della stazione GPS fissa. Se usi 2 GPS e li "calibri" alla partenza in modo che sai la differenza di posizione dei 2 GPS. La stazione fissa puó misurare la variazione di errore di posizione dinamico nel tempo visto che non si muove e trasmetterlo al robot via XBee o similari. Cosí il robot sa ritornare alla posizione di partenza con piú precisione maggiore che gli avrebbe dato il GPS da solo.

Il prodotto segnalato da marcus barnet ha un entrata DGPS e puó elaborare i dati ricevuti, ma non so ne il formato dei dati ne il modo o frequenza in cui vengono mandati dalla stazione fissa.

Ciao Uwe

marcus barnet

Se usassi un WAAS GPS sarebbe meglio?

Il problema più che altro è che non ho mai usato un GPS e non so il formato dei dati che arriverebbero ad Arduino e, soprattutto, come usarli per gestire poi la navigazione del robot.

Qualcuno potrebbe farmi una panoramica su come potrei utilizzare i dati per correggere la traiettoria del robot?
I dati vengono inviati ad Arduino sotto forma di coordinate?

uwefed

Dal link che hai proposto: Il GPS invia i dati in formato nmea: "Serial output stream - configurable to NMEA Standard at 2400bps to 19200bps"
Ciao Uwe

marcus barnet

Sì, lo aveva letto, ma non avendo mai utilizzato moduli GPS volevo sapere se esisteva già librerie o funzioni che permettono di estrarre la latitudine e la longitudine in modo da poterli utilizzare direttamente per la navigazione del robot.
Inoltre, sarebbe interessante capire se qualcuno ha già implementato qualcosa del genere e se esiste della letteratura a riguardo in modo da immaginare come utilizzare le coordinate del gps per far orientare il robot e farlo dirigere verso la base.

uwefed

ma non c'é mai nessuno che cerca con google?

http://arduino.cc/playground/Main/InterfacingWithHardware cercare "GPS"

http://arduino.cc/playground/Tutorials/GPS

Ciao Uwe

marcus barnet

Non capisco cosa c'entri il GPS con le eventuali librerie di navigazione per il robot basate su segnale GPS :)

I link che hai postato, ovviamente, li avevo già visti da tempo.  8)

lesto

se li avessi letti con dovuta attenzione sapresti che le stinghe nmea sono stringhe di testo facilitate leggibile attraverso la seriale (stesso sistema con cui si comunica al PC, quindi stratestato e strafacile da usare), e se avessi cercato nmea sul forum italiano o su wikipedia avresti trovato  un sacco di "snippet" di codici nmea sparati fuori dai GPS. dico DAI gps perchè qusi tutti usano lo standard NMEA.

per la parte invece che è più difficile da cercare:
non vedo la necessità di imbarcarsi col differenziale. Un normale GPS di fascia medio-bassa da un'accuratezza di 5m circa. il calcolo del percorso è un'operazione un pò pesante per arduino, circa un millisecondo e mezzo, e bisogna usare delle tabelle precalcolate o comunque dei valori che dipendono dalla posizione per ottenere il raggio della terra nel punto (se rimani in un raggio diciamo di 100km puoi farne a meno poi non conosco bene il limite), in oltre mancano variabili double a 64bit necessarie per la precisione soddisfacente.

nulla di irrealizzabile, ma bisogna fare attenzione ai limiti.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

astrobeed


nulla di irrealizzabile, ma bisogna fare attenzione ai limiti.


Prima di tutto il calcolo della rotta (distanza e angolo) su Arduino richiede centinaia di ms, solo 1.5 ms forse ce la fa la DUE, inoltre senza la matematica a 64 bit la precisione è ridicola, parliamo di risoluzione a livello di molte decine di metri che è assolutamente inutile su un piccolo mezzo mobile autonomo.
In presenza di EGNOS, con segnale buono e bassi valori D.O.P., la precisione di un buon gps è circa 2.5 metri mentre l'errore medio di posizionamento attorno al punto è di circa 30-50 cm, ovvero vieni localizzato all'interno di un cerchio con raggio 2.5 metri il cui centro è il punto reale dove ti trovi e se rimani fermo la tua posizione cambia costantemente all'interno di un cerchio con raggio 30-50 cm.
Per farla breve con Arduino puoi visualizzare su un display, o inviare sulla seriale, tutti i dati ricevuti dal GPS estrapolandoli dalle varie sentenze NMEA, però non è in grado di utilizzarli per ricavare un rotta per via del insufficiente supporto matematico dovuto al fatto che Arduino si basa su una mcu a 8 bit.

marcus barnet

Teoricamente, questo non sarebbe un problema, perchè comunque tutti i sensori collegati attualmente su Arduino inviano i dati tramite cavo di rete ad un calcolatore con CPU Intel Dual Core e 4GB di ram DDR; mi andrebbe bene, quindi, leggere i soli dati GPS e inviarli come pacchetti all'applicazione in C che gira sull'altra macchina se proprio non è possibile eseguire calcoli attendibili direttamente con Arduino.

Lo chiedevo perchè avevo visto su youtube alcuni video di ragazzi che usavano Arduino per leggere da un GPS e pilotare delle macchinine.. 

lesto



nulla di irrealizzabile, ma bisogna fare attenzione ai limiti.


Prima di tutto il calcolo della rotta (distanza e angolo) su Arduino richiede centinaia di ms, solo 1.5 ms forse ce la fa la DUE, inoltre senza la matematica a 64 bit la precisione è ridicola, parliamo di risoluzione a livello di molte decine di metri che è assolutamente inutile su un piccolo mezzo mobile autonomo.
In presenza di EGNOS, con segnale buono e bassi valori D.O.P., la precisione di un buon gps è circa 2.5 metri mentre l'errore medio di posizionamento attorno al punto è di circa 30-50 cm, ovvero vieni localizzato all'interno di un cerchio con raggio 2.5 metri il cui centro è il punto reale dove ti trovi e se rimani fermo la tua posizione cambia costantemente all'interno di un cerchio con raggio 30-50 cm.
Per farla breve con Arduino puoi visualizzare su un display, o inviare sulla seriale, tutti i dati ricevuti dal GPS estrapolandoli dalle varie sentenze NMEA, però non è in grado di utilizzarli per ricavare un rotta per via del insufficiente supporto matematico dovuto al fatto che Arduino si basa su una mcu a 8 bit.


per la precisione c'è poco da fare, ma per i tempi sto usando quelli calcolati usando i test delle tue vs mie funzioni di calcolo di cui discutemmo qualche tempo fà, prendendo per buono il caso peggiore.

per la precisione (a anche la velocità) si può usare una FPU esterna come http://arduino.cc/playground/Code/Fpu64, che però ad occhio costa forse più che prendersi un micro più adatto (Suggested Retail Price: $24.95 USD)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

astrobeed


per la precisione c'è poco da fare, ma per i tempi sto usando quelli calcolati usando i test delle tue vs mie funzioni di calcolo di cui discutemmo qualche tempo fà, prendendo per buono il caso peggiore.


Non puoi fare un paragone di tempi tra un calcolo fatto con variabili a 64 bit (double) e uno fatto con dei float (32 bit).

stefa24

ciao
stavo pensando di realizzare una applicazione basata su arduino per un sistema di guida parallela per lavori in campo, è corretto dire che con un sistema gps differenziale e la FPU64 si ottiene una buona precisione di posizione

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

lesto

ho trovato una libreria per decimali a 64bit con l'atmega! http://www.mikrocontroller.net/topic/85256
ora devo solo riuscire ad usarla -.-"
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Go Up