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'

Copyright © 2000 Mobit srl | Questa pagina aggiornata al 12 luglio 2003