![]() |
Mobit |
NAVIGAZIONE SATELLITARE GPS TRASMISSIONE DATI VIA GSM/GPRS BLUETOOTH MICROPERIFERICHE TECNOLOGIE LISTINO COME CONTATTARCI SITI CONSIGLIATI |
Note sullo standard NMEA 0183 in relazione al GPS
a cura di Roger Stewart - Mobit srl - mobit@tin.it
aggiornato al 12 luglio 2003
NMEA 0183 è uno standard di interfacciamento tra apparecchiature digitali. Il sistema ha origini e finalità prevalentemente nautiche e viene utilizzato anche, per esempio, per sistemi di autopilota di imbarcazioni. Pertanto, per coprire le molteplici applicazioni marine e l'interfacciamento di un'ampia gamma di apparecchiature nautiche, i formati di dati del sistema NMEA sono molto numerosi, e solo una parte molto limitata ha rilevanza nell'ambito del GPS, dove il sistema NMEA viene prevalentemente impiegato per trasmettere dati da un ricevitore GPS verso un computer.
Esistono moltissimi altri protocolli di dati generati da un ricevitore GPS: in effetti ogni costruttore di GPS ha il suo: Trimble, SiRF, Garmin, Rockwell, … spesso in formati "binari" - praticamente formati non leggibili "a occhio nudo" perché i dati sono in formati compressi, ottimizzati per la comunicazione verso un computer. Tali formati hanno il vantaggio di occupare un numero minore di byte (ormai non molto rilevante con le attuali capacità di trasmissione e memorizzazione) ma talvolta anche di contenere informazioni non disponibili nel formato NMEA: dati relativi ai segnali radio delle portanti dei satelliti, la loro fase, e altre informazioni potenzialmente utilizzabili per ricavare dai segnali radio ricevuti una accuratezza superiore. Il formato NMEA è tuttavia efficiente, facilmente interpretabile "a occhio nudo" ed altrettanto facilmente decodificabile dal software di un elaboratore. E soprattutto è, appunto, uno standard.
L'ente che gestisce lo standard (e che ne detiene il copyright) si chiama National Marine Electronics Association. E' una associazione composta di produttori, distributori, rivenditori, scuole ed altri parti che si occupano dell'elettronica in campo nautico. NMEA definisce una serie di standard, fra cui NMEA 0183. Lo standard NMEA 0183 intero, in forma stampata, comprensivo degli addendum, può essere acquistato (per $325) presso NMEA. Ulteriori dettagli in proposito sono reperibili presso www.nmea.org, o scrivendo a info@nmea.org.
Lo standard contempla i segnali elettrici, il protocollo e la temporizzazione della trasmissione ed i specifici formati di dati - detti "sentences" ovvero "frasi" -, operanti su un bus dati seriale (tipicamente RS232, ma anche sue semplificazioni fino all'essenziale RX-TX-GND) a 4800 bps. Nell'ambito del sistema ogni bus dati può avere un unico elemento trasmittente (talker) e molti riceventi (listeners). All'atto pratico, alcuni ricevitori sono in grado di emettere i dati a velocità di trasmissione maggiori (fino a 38,4 kbps come contemplato nell'addendum NMEA 0183-HS 1.0 della versione NMEA 0183 3.01), fermo restando aggiornamenti solo una volta al secondo. In quanto all'hardware, poi, oltre che su RS232, esistono ricevitori GPS fisicamente interfacciati su USB, PCMCIA/CompactFlash, infrarossi e Bluetooth.
Come per tutti gli standard, NMEA 183 ha visto il rilascio di molte successive versioni. Non sempre le caratteristiche delle nuove versioni sono rilevanti ai fini dell'interfacciamento di un ricevitore GPS ad un computer.
I software per personal computer e palmari generalmente specificano la versione NMEA 0183 2.0 o successiva e in realtà necessitano, per il corretto funzionamento, di pochissime "frasi" NMEA.
La versione 2.3 dello standard aggiunge in alcune frasi, tra cui RMC, VTC e GLL, un campo prima del checksum che contiene A = Autonomous, D = Differential, E = Estimated, N = Non Valid Data.
Struttura
delle frasi NMEA
Tutte le frasi NMEA sono costituite da una sequenza di caratteri ASCII, e
costituiti da un prefisso, una serie di campi ed un checksum finale. L'inizio
della frase è delimitato da un carattere "$", la fine da una sequenza
CR LF ed i singoli campi sono separati da virgole. Esempio:
$PREFISSO, campo, campo, …, campo, *checksumCRLF
Una frase NMEA può contenere fino a 82 caratteri compresi "$" e CR LF.
Se i dati per un campo non sono disponibili, il campo viene omesso, ma le virgole che lo delimiterebbero sono comunque aggiunte, senza spazi tra di loro.
I
prefissi
I tipi di dispositivi collegabili tra loro con sistema NMEA ricadono in
diverse categorie: autopiloti, dispositivi di comunicazione (radio e anche GPS),
sensori di direzione (bussole e giroscopi), dispositivi LORAN, sensori di
velocità ed una categoria per altri trasduttori. Tutte le "sentences"
NMEA iniziano con un prefisso costituito da un carattere "$", seguito
da due caratteri che identificano l'entità che le genera, il "talker",
o trasmettitore sul bus di tali informazioni. Nell'ambito
quindi del GPS, tutte le "frasi" iniziano con "$GP", dove
"GP" denota che la "frase" è generata da un dispositivo GPS.
I successivi tre caratteri del prefisso della frase indicano il tipo di
frase. Per esempio una frase che inizia con $GPGLL è inviato da un
dispositivo di tipo GPS (GP) ed è del tipo Geographic position, Longitude and
Latitude (GLL).
I
formati dei campi
La frase, dopo il prefisso, è costituito da una serie di campi, separati
tra di loro da virgole. Si noti che tra le varie versioni (e spesso tra
diverse implementazioni e costruttori) talvolta le lunghezze dei campi possono
variare, ed essere o meno presenti. Chi deve scrivere un software di
decodifica deve, per sicurezza, considerare i campi di lunghezza variabile e
basarsi, per la separazione dei campi, sulle virgole. Inoltre, alcune
implementazioni includono gli zeri davanti ai numeri, altri no, e il numero di
cifre decimali varia tra diverse implementazioni. Ecco i formati dei dati usati
dalle frasi NMEA GPS:
hhmmss.ss Ore, minuti, secondi e centesimi di secondo (es: 132957.94 =
13:29:57.94)
ddmmyy Campo data giorno, mese, anno (es: 151005 = 15 ottobre 2005)
A Campo numerico di lunghezza fissa di un carattere
A-A Campo alfanumerico di lunghezza variabile
llll.ll Campo latitudine (es: 4531.47 = 45°31.47')
yyyyy.yy Campo longitudine (es: 00917.21 = 009°17.21')
x Campo numerico con n cifre intere
x.x Campo numerico con n cifre intere e n cifre decimali (es: 123.45)
n Campo numerico, singola cifra
nn Campo numerico, due cifre
nnnn Campo numerico, quattro cifre
Riferimenti
a gradi si intendono sessagesimali.
Riferimenti a UTC si intendono relativi all'ora universale, praticamente GMT,
detto anche ora Zulu. In effetti ci sono piccoli scostamenti (costanti e
accuratamente monitorati) tra l'ora
"interna" del sistema GPS e l'ora GMT, normalmente usata per gli
orologi, attualmente intorno ai 13 secondi.
Il
checksum
Al termine di ciascuna frase NMEA viene posto, dopo un asterisco, un
checksum per poter individuare eventuali errori sulla linea di trasmissione tra
emettitore e ascoltatore (talker e listener). Con le attuali tecnologie,
una trasmissione a 4800 bps su una interfaccia RS232 è, a dir poco,
affidabile, ma qualora la trasmissione avvenisse mediante un sistema più
complesso (infrarosso, Bluetooth) o una catena più lunga (come nel campo della
localizzazione veicolare, magari su GSM/GPRS o ponti radio) il checksum può
venire comodo per assicurare l'integrità della trasmissione.
Il checksum
è l' exclusive OR a 8-bit (senza i bit di start o stop) di tutti i caratteri
della frase NMEA, compresi i delimitatori "," (le virgole), tra - ma
escludendo - i delimitatori "$" e "*". Il
valore esadecimale dei 4 bit più "alti" e "bassi" del
risultato vengono convertiti in due caratteri ASCII (0-9, A-F). Viene trasmesso
per primo il carattere più significativo.
Il terminatore
La frase viene terminata da una sequenza CR LF.
Le
frasi GPS
Il gruppo GPS è costituito da un gran numero (una sessantina) di "sentences"
(frasi) tra cui oggi le più usate (in campo GPS) sono:
$GPRMC - Recommended Minimum specific GPS/TRANSIT data
$GPRMB - Recommended Minimum navigation info (waypoint based navigation active)
$GPGGA - Global Positioning System fix data
$GPGSA - GPS DOP and Satellites Active
$GPGLL - Geographic Position - Latitude/Longitude
$GPGSV - Satellites in View
$GPRTE -
$GPBOD -
$GPWPL -
$GPVTG -
$GPBWC -
$GPAAM -
$GPXTE -
$GPMSS -
A questi si aggiungono alcune frasi speciali come $HCHDG (per la direzione ricavata da sensore magnetico) e frasi proprietarie, specifiche di ciascun produttore di GPS.
Infine,
il protocollo GPS viene anche usato per inviare frasi di configurazione ai
ricevitori GPS.
Le frasi NMEA in dettaglio
Per un trattamento completo delle frasi NMEA occorre evidentemente far riferimento al documento dello standard. Tuttavia da una varietà di fonti e dalla osservazione diretta ricaviamo le seguenti decodifiche delle frasi più comuni. In alcuni casi abbiamo indicato note di vario tipo o punti interrogativi, di particolari da chiarire. L'autore apprezzerà vivamente contributi al completamento del presente documento!
$GPRMC
- Recommended Minimum Specific GPS/TRANSIT Data
Una delle frasi più complete, comprendente dati essenziali relativi a
data/ora, posizione, velocità e un minimo relativo alla qualità della
rilevazione.
| Campo | Formato | Esempio | Descrizione |
| 1 | hhmmss.ss | 125642.57 | Ora UTC-GPS |
| 2 | A | A | Stato: A=Active, Attivo; V=Void, Nullo (per ricordarne il significato: è come una freccia in su/giù) |
| 3 | llll.ll | 4512.72 | Latitudine della posizione attuale (numero variabile di decimali) |
| 4 | A | N | Emisfero della posizione attuale: N=Nord; S=Sud |
| 5 | yyyyy.yy | 00934.88 | Longitudine della posizione attuale (numero variabile di decimali) |
| 6 | A | E | Verso della posizione attuale: E=Est; W=Ovest |
| 7 | x.x | 023.45 | Velocità al suolo, in nodi |
| 8 | x.x | 358.20 | Track Made Good - Direzione di movimento, in gradi reali |
| 9 | ddmmyy | 291105 | Data |
| 10 | x.x | 1.2 | Variazione / declinazione magnetica , in gradi |
| 11 | A | E | Verso della variazione / declinazione magnetica |
| 12 | A | D | Tipo di rilevazione: A=Autonomous, D=Differential, E=Estimated, N=Non valid data (dalla versione 2.3) |
$GPRMB
- Recommended Minimum Navigation Info (Waypoint based navigation active)
Frase dedicata alla navigazione tra waypoint, con indicazioni relative
all'avvicinamento alla destinazione.
| Campo | Formato | Esempio | Descrizione |
| 1 | A | A | Stato: A=Active, Attivo; V=Void, Nullo (freccia in su/giù) |
| 2 | x.x | 1.3 | Cross Track Error (Scarrocciamento) in miglia nautiche |
| 3 | A | L | Verso dello scarrocciamento: L=Left, Sinistra; R=Right, Destra |
| 4 | A-A | BOA52 | Identificatore del waypoint di destinazione |
| 5 | A-A | PORTO | Identificatore del waypoint di origine |
| 6 | llll.ll | 4613.83 | Latitudine del waypoint di destinazione |
| 7 | A | N | Emisfero del waypoint di destinazione |
| 8 | yyyyy.yy | 00945.99 | Longitudine del waypoint di destinazione |
| 9 | A | E | Verso del waypoint di destinazione |
| 10 | x.x | 123.45 | Distanza (Range) dalla destinazione in miglia nautiche |
| 11 | x.x | 356.2 | Direzione verso la destinazione in gradi reali |
| 12 | x.x | 12.2 | Velocità di avvicinamento in nodi |
| 13 | A | A | Allarme arrivo: A=Arrivato; V=Non arrivato |
$GPGGA
- Global Positioning System fix data
Frase che comprende dati relativi al fix tridimensionale (3D) e all'uso
della correzione differenziale.
| Campo | Formato | Esempio | Descrizione |
| 1 | hhmmss.ss | 125642.57 | Ora UTC - GPS |
| 2 | llll.ll | 4512.72 | Latitudine della posizione attuale (numero di decimali variabile) |
| 3 | A | N | Emisfero della posizione attuale: N=Nord; S=Sud |
| 4 | yyyyy.yy | 00934.88 | Longitudine della posizione attuale (numero di decimali variabile) |
| 5 | A | E | Verso della posizione attuale: E=Est; W=Ovest |
| 6 | n | 1 | Qualità del rilevamento GPS: 0=non valido; 1=GPS; 2=DGPS |
| 7 | x | 8 | Numero di satelliti in vista (teorica, non necessariamente in uso o ricevuti) |
| 8 | x.x | 1.9 | HDOP - Horizontal Dilution Of Precision |
| 9 | x.x | 540.4 | Altitudine dell'antenna GPS relativa al livello medio del mare (geoide) |
| 10 | A | M | Indicatore dell'unità di misura dell'altitudine M=metri (ma è mai diverso da M?) |
| 11 | x.x | 45.8 | Altezza (separazione) del geoide (livello medio del mare) rispetto all'elissiode WGS84 |
| 12 | A | M | Indicatore dell'unità di misura della separazione del geoide M=metri (ma è mai diverso da M?) |
| 13 | x.x | 8.0 | Tempo in secondi dall'ultimo aggiornamento DGPS |
| 14 | nnnn | 1023 | Identificatore della stazione DGPS (0000-1023) |
$GPGSA
- GPS DOP and Satellites Active
Frase che comprende dati relativi alla qualità del fix e l'indicazione dei
satelliti ricevuti (o di cui i vari canali stanno tentando la ricezione).
Esistono significative differenze di implementazione nell'ordine e
organizzazione dei campi indicanti i satelliti attivi. Taluni ricevitori
li raggruppano all'inizio della sequenza (lasciando campi vuoti alla fine),
alcuni li ordinano per numero (Garmin), altri li lasciano in ordine sparso con
campi vuoti intermedi (Evermore).
| Campo | Formato | Esempio | Descrizione |
| 1 | A | M | Tipo di selezione
del tipo di rilevamento (2D o 3D): M=Manuale; A=Automatico |
| 2 | n | 3 | Tipo di rilevamento: 2=2D (bidimensionale); 3=3D (tridimensionale) |
| 3 | nn | 03 | Identificatore (SV = PRN) di satellite ricevuto |
| 4 | nn | 12 | Identificatore (SV = PRN) di satellite ricevuto |
| ... | |||
| ... | |||
| 14 | nn | 01 | Identificatore (SV = PRN) di satellite ricevuto |
| 15 | x.x | 1.9 | PDOP - Position Dilution Of Precision |
| 16 | x.x | 1.2 | HDOP - Horizontal Dilution Of Precision |
| 17 | x.x | 2.2 | VDOP - Vertical Dilution Of Precision |
$GPGLL
- Geographic position - Latitude/Longitude
Frase minima, solo dati posizionali, ora e validità del fix.
| Campo | Formato | Esempio | Descrizione |
| 1 | llll.ll | 4512.72 | Latitudine della posizione attuale (numero di decimali variabile) |
| 2 | A | N | Emisfero della posizione attuale: N=Nord; S=Sud |
| 3 | yyyyy.yy | 00934.88 | Longitudine della posizione attuale (numero di decimali variabile) |
| 4 | A | E | Verso della posizione attuale: E=Est; W=Ovest |
| 5 | hhmmss.ss | 125642.57 | Ora UTC GPS |
| 6 | A | A | Stato: A=Active, Attivo; V=Void, Nullo (freccia in su/giù) |
$GPGSV
- Satellites in View
Indica dati relativi a tutti i satelliti che il ricevitore, in base ai
propri dati di almanacco e eventualmente la maschera di elevazione, ritiene di
poter ricevere. Di ciascun satellite vengono indicati identificatore,
azimuth, elevazione, e livello di segnale ricevuto. La frase completa si
struttura in un gruppo (ciclo) di più frasi di tipo GSV per poter contenere
tutti i campi necessari. Un ricevitore a 12 canali potrà indicare un
massimo di 12 satelliti, suddivisi in fino a tre frasi da 4 satelliti ciascuna.
| Campo | Formato | Esempio | Descrizione |
| 1 | n | 3 | Numero di frasi del gruppo |
| 2 | n | 1 | Numero progressivo della frase nel gruppo (1 di 3 nell'esempio) |
| 3 | nn | 09 | Numero totale di satelliti teoricamente ricevibili |
| 4 | nn | 03 | Identificatore (SV = PRN) di satellite ricevuto del primo dell'elenco |
| 5 | nn | 85 | Elevazione in gradi sull'orizzonte del primo satellite dell'elenco |
| 6 | nnn | 224 | Azimuth in gradi del primo satellite dell'elenco |
| 7 | nn | 37 | Livello del segnale ricevuto dal primo satellite dell'elenco |
| 8 | nn | 09 | Identificatore (SV = PRN) di satellite ricevuto del secondo dell'elenco |
| 9 | nn | 125 | Elevazione in gradi sull'orizzonte del secondo satellite dell'elenco |
| 10 | nnn | 34 | Azimuth in gradi del secondo satellite dell'elenco |
| 11 | nn | 24 | Livello del segnale ricevuto dal secondo satellite dell'elenco |
| ... | |||
| 16 | nn | 31 | Identificatore (SV = PRN) di satellite ricevuto del quarto dell'elenco |
| 17 | nn | 17 | Elevazione in gradi sull'orizzonte del quarto satellite dell'elenco |
| 18 | nnn | 120 | Azimuth in gradi del quarto satellite dell'elenco |
| 19 | nn | 42 | Livello del segnale ricevuto dal quarto satellite dell'elenco |
$HCHDG - Heading
Una frase particolare è quella che indica la direzione. Questa frase è emessa da dispositivi come per esempio eTrex Summit, eTrex Vista, MAP76S e Geko 301.
| Campo | Formato | Esempio | Descrizione |
| 1 | n.n | 12.3 | Direzione ricavata dal sensore magnetico, in gradi |
| 2 | n.n | 1.5 | Deviazione magnetica in gradi (non implementata su Summit) |
| 3 | A | E | Verso della deviazione magnetica (non implementata su Summit) |
| 4 | n.n | 2.2 | Variazione magnetica in gradi |
| 5 | A | E | Verso della variazione magnetica |
Esempi
SirfStarII
$GPVTG,,T,,M,,N,,K*4E
$GPMSS,0,0,0.0,0,*68
$GPGGA,204619.999,4530.6671,N,00916.9484,E,0,00,50.0,101.9,M,,,,0000*38
$GPGLL,4530.6671,N,00916.9484,E,204619.999,V*29
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPRMC,204619.999,V,4530.6671,N,00916.9484,E,,,160702,,*1C
$GPGGA,204620.999,4530.6671,N,00916.9484,E,0,00,50.0,101.9,M,,,,0000*32
$GPGLL,4530.6671,N,00916.9484,E,204620.999,V*23
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPRMC,204620.999,V,4530.6671,N,00916.9484,E,,,160702,,*16
$GPGGA,204621.999,4530.6671,N,00916.9484,E,0,00,50.0,101.9,M,,,,0000*33
$GPGLL,4530.6671,N,00916.9484,E,204621.999,V*22
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPRMC,204621.999,V,4530.6671,N,00916.9484,E,,,160702,,*17
$GPGGA,204624.596,4530.5918,N,00916.8979,E,1,05,12.5,204.1,M,,,,0000*31
$GPGLL,4530.5918,N,00916.8979,E,204624.596,A*3E
$GPGSA,A,2,05,26,30,29,18,,,,,,,,14.2,12.5,6.8*3C
$GPRMC,204624.596,A,4530.5918,N,00916.8979,E,0.65,34.35,160702,,*39
$GPGGA,204625.596,4530.5925,N,00916.8980,E,1,05,12.5,201.7,M,,,,0000*3B
$GPGLL,4530.5925,N,00916.8980,E,204625.596,A*37
$GPGSA,A,3,05,26,30,29,18,,,,,,,,14.2,12.5,6.8*3D
$GPGSV,3,1,10,09,82,350,,05,52,252,41,07,29,051,,26,25,169,40*7C
$GPGSV,3,2,10,30,20,246,37,29,17,166,39,21,15,287,,18,13,251,32*7C
$GPGSV,3,3,10,14,12,320,,04,05,098,*7F
Frasi
presenti: VTG, MSS???, GGA, GLL, GSA, RMC, GSV
Osservazione su RMC: non ha il campo 12 del tipo di rilevazione.
Garmin
GPS V
$GPRMC,200118,A,4530.6145,N,00916.9136,E,0.0,234.8,170702,0.9,E,A*11
$GPRMB,A,0.00,R,Via Luigi Galvani,N,4530.6287,N,00917.0609,E,0.104,82.1,,V,A*72
$GPGGA,200118,4530.6145,N,00916.9136,E,1,04,5.2,140.5,M,48.1,M,,*41
$GPGSA,A,2,05,,,18,,,26,,29,,,,5.3,5.2,1.0*30
$GPGSV,3,3,10,29,38,164,44,30,05,237,00*7B
$GPGLL,4530.6145,N,00916.9136,E,200118,A,A*4A
$GPBOD,350.1,T,349.1,M,Road(N),Via Xv Martiri*10
$PGRME,23.1,M,15.4,M,27.8,M*13
$PGRMZ,461,f,2*19
$PGRMM,WGS 84*06
$GPRTE,1,1,c,*37
Frasi
presenti: RMC, RMB, GGA, GSA, GSV, GLL, BOD, RTE, PGRME, PGRMZ, PGRMM
Altre frasi - Allarme? WPL?Waypoint? XTE? Turn? …
Evermore
$GPRMC,203915,A,4530.6038,N,00916.9056,E,0.00,0.00,170702,0.0,W*60
$GPGGA,203916,4530.6038,N,00916.9056,E,1,04,3.7,193.5,M,193.5,M,0.0,0000*58
$GPGSA,A,3,05,09,07,18,29,30,21,26,14,,,,5.5,3.7,4.1*3B
$GPGSV,3,1,09,05,50,250,42,09,80,339,35,07,31,053,00,18,14,253,27*73
$GPGSV,3,2,09,29,19,166,29,30,19,245,00,21,07,286,00,26,27,169,36*72
$GPGSV,3,3,09,14,08,315,00,,,,,,,,,,,,*4A
Ogni contributo (completamento, correzione, precisazione ...) a questo documento è apprezzato!
NAVIGAZIONE SATELLITARE GPS TRASMISSIONE DATI VIA GSM BLUETOOTH MICROPERIFERICHE TECNOLOGIE LISTINO COME CONTATTARCI SITI CONSIGLIATI
Il nostro numero di telefono è:
0245478405
Il nostro numero di fax è: 0245478406
Il nostro indirizzo di posta elettronica è: mobit@tin.it
Il nostro indirizzo è: via Luigi Galvani 20 - 20093 Cologno Monzese (MI) Italia/Italy
Le nostre coordinate sono: N 45°31.476' - E 009°17.213'