Portál AbcLinuxu, 5. května 2025 13:12
Všimněme si blíže významu jednotlivých vět, které získáváme z GPS přijímače. Popisovaný přístroj má ve svých parametrech uvedeno, že komunikace s počítačem probíhá prostřednictvím protokolu NMEA 0183. Protokol vytvořila asociace NMEA (National Marine Electronics Association).
Asociace NMEA na své stránce http://www.nmea.org/pub/0183/index.html uvádí, že komunikační standard je dokument podléhající copyrightu a lze jej pouze zakoupit od asociace NMEA. Cena představuje řádově stovky dolarů. Ostatní zdroje na internetu prý nejsou autorizované a mohou představovat porušení copyrightu. NMEA dále uvádí, že obsah rozličných stránek s touto tématikou mnohdy obsahuje zastaralé informace.
Pod klíčovým slovem NMEA 0183 lze na internetu skutečně nalézt řadu odkazů a jejich obsah se jeví býti konzistentním. Na základě popisů od různých autorů lze získat smysluplné informace z GPS přístroje, ale bohužel nemohu posoudit, zda se jedná o korektní popis standardu NMEA 0183. Dokument popisující standard jsem nezakoupil a i kdybych tak učinil, nesměl bych rozšiřovat informace v něm obsažené. Pokusím se však shrnout poznatky, které jsou dostupné na internetu. Aby nedošlo k nedorozuměním, nebudu již nadále komunikační protokol označovat NMEA 0183.
Protokol, kterým komunikuje přijímač Navilock 202U, má přenosovou rychlost (baud rate) 4800, počet datových bitů je 8, přičemž sedmý bit (MSB) je vždy nulový. Počet stop bitů je jeden nebo více, parita není žádná. Navzájem spolu komunikuje vždy jeden mluvčí (talker) a jeden nebo více posluchačů (listeners). Veškerá data jsou posílána ve formě vět (sentences). Jsou dovoleny pouze tisknutelné ASCII znaky plus znaky konce řádku, tedy <CR> a <LF> (0x0d, 0x0a hexadecimálně). Každá věta začíná znakem $ (dolar) a končí sekvencí <CR><LF>. Existují tři základní druhy vět:
Obecný formát vět ze strany mluvčího je
$ttsss,d1,d2,....<CR><LF>
První dvě písmena, která následují po znaku dolar, jsou označená
tt
a představují identifikátor mluvčího (talker identifier).
Další tři písmena (sss
) jsou identifikátor věty (sentence identifier). Následují datové položky oddělené čárkami (znak
","). Po nich následuje nepovinný kontrolní součet. Věta je
ukončena znaky <CR><LF>. Význam jednotlivých datových položek
je jednoznačně definován pro konkrétní typ věty (ten je určen identifikátorem sss
). Jestliže určitá datová položka není
k dispozici, zůstane datové pole prázdné, ale čárky oddělující datová
pole zůstávají (bez mezery). Kontrolní součet začíná znakem hvězdička ("*") a za ní jsou dvě hexadecimální číslice představující logickou operaci XOR (exclusive OR) ze všech znaků mezi "$" a
"*". Samotný dolar a hvězdička se do kontrolního součtu
nezapočítávají. Každá věta může obsahovat nejvýše 80 znaků plus "$" a <CR><LF>, celkem tedy 83 bajtů.
Věty proprietární umožňují výrobcům nadefinovat vlastní větu. Tyto věty začínají sekvencí "$P", pak následuje třípísmenný identifikátor výrobce, a dále následují jednotlivé datové položky v souladu s přáním výrobce. Obecný formát věty musí být zachován.
Dotazovací věty představují způsob, kterým může posluchač zažádat mluvčího o zaslání konkrétní věty. Obecný formát je
$ttllQ,sss<CR><LF>
První dva znaky (tt
) za znakem dolar jsou identifikátorem toho, kdo podává žádost. Následující dva znaky (ll
) označují
dotazovaného - tedy toho, komu je žádost posílána. Pátým znakem je vždy písmeno "Q", které označuje, že se jedná o dotazovací typ věty.
Následuje třípísmenná datová položka (sss
) určující, o jaký
typ věty se žádá. Příkladem dotazovací věty může být následující sekvence:
$CCGPQ,GGA<CR><LF>
V této větě písmena CC
označují počítač, který žádá přístroj
GP
(tedy GPS přijímač), aby zasílal věty typu GGA
. Po této dotazovací větě by měl GPS přijímač zasílat
každou sekundu větu typu GGA
, dokud nedostane povel
k zasílání jiného typu věty.
Dvoupísmenných identifikátorů existuje mnoho, pro nás je však v této
chvíli nejdůležitější, že pro GPS přijímače se používá identifikátor
GP
.
Existuje nepřeberné množství různých vět, avšak přístroj NAVILOCK 202U (a řada jiných) používá pouze čtyři, které jsou uvedeny v následujících tabulkách.
Příklad:
$GPGSA,A,3,29,26,22,09,07,05,04,,,,,,1.7,1.0,1.4*30
# | formát | příklad | komentář |
---|---|---|---|
1 | c |
A | Přepínání mezi N-rozměrnými módy (A=automatické, M=manuální) |
2 | d |
3 | Počet dimenzí N (1=?, 2=2D, 3=3D) |
3 | dd |
29 | ID prvního satelitu použitelného pro výpočet |
4 | dd |
26 | ID druhého satelitu použitelného pro výpočet |
5 | dd |
22 | ID třetího satelitu použitelného pro výpočet |
6 | dd |
09 | ID čtvrtého satelitu použitelného pro výpočet |
7 | dd |
07 | ID pátého satelitu použitelného pro výpočet |
8 | dd |
05 | ID šestého satelitu použitelného pro výpočet |
9 | dd |
04 | ID sedmého satelitu použitelného pro výpočet |
10 | dd |
N.A. | ID osmého satelitu použitelného pro výpočet |
11 | dd |
N.A. | ID devátého satelitu použitelného pro výpočet |
12 | dd |
N.A. | ID desátého satelitu použitelného pro výpočet |
13 | dd |
N.A. | ID jedenáctého satelitu použitelného pro výpočet |
14 | dd |
N.A. | ID dvanáctého satelitu použitelného pro výpočet |
15 | d.d |
1.7 | PDOP (Position Dilution Of Precision) v metrech |
16 | d.d |
1.0 | HDOP (Horizontal Dilution Of Precision) v metrech |
17 | d.d |
1.4 | VDOP (Vertical Dilution Of Precision) v metrech |
18 | *xx |
30 | Kontrolní součet |
Příklad:
$GPRMC,170138.615,A,4912.2525,N,01635.0378,E,0.04,16.43,280705,,*32
# | formát | příklad | komentář |
---|---|---|---|
1 | hhmmss.sss |
170138.615 | Čas (UTC) |
2 | c |
A | Status (A=OK, V=varování) |
3 | ddmm.mmmm |
4912.2525 | Zeměpisná šířka |
4 | c |
N | Indikátor sever/jih (N=sever, S=jih) |
5 | ddmm.mmmm |
01635.0378 | Zeměpisná délka |
6 | c |
E | Indikátor východ/západ (E=východ, W=západ) |
7 | d.d |
0.04 | Vodorovná rychlost (Speed Over Ground, v uzlech) |
8 | d.d |
16.43 | Kurz pohybu ve stupních |
9 | ddmmyy |
280705 | Datum ddmmyy |
10 | d.d |
N.A. | Magnetická deklinace ve stupních |
11 | c |
N.A. | Indikátor východ/západ (E=východ, W=západ) |
12 | *xx |
32 | Kontrolní součet |
Množství údajů závisí na počtu viditelných družic. Jedna věta může obsahovat nejvýše 80 znaků, což vystačí pouze k uložení dat týkajících se nejvýše čtyř družic. Informace proto bývá rozdělena do několika dílčích vět.
Příklad (trojice vět):
$GPGSV,3,1,11,09,84,297,41,05,48,256,45,07,38,059,41,26,22,178,41*74 $GPGSV,3,2,11,24,13,063,00,14,12,324,00,30,12,251,00,22,12,286,38*78 $GPGSV,3,3,11,29,10,173,35,04,09,105,30,18,06,254,00*46
Poznámka: Příklad v tabulce se vztahuje pouze k první větě.
# | formát | příklad | komentář |
---|---|---|---|
1 | d |
3 | Celkový počet vět (číslují se od 1) |
2 | d |
1 | Číslo aktuální věty (taktéž se čísluje od 1) |
3 | dd |
11 | Počet viditelných družic |
4 | dd |
09 | Identifikační číslo družice |
5 | dd |
84 | Úhlová výška, kde se daná družice nachází |
6 | ddd |
297 | Azimut, kde se daná družice nachází |
7 | dd |
41 | Odstup signálu od šumu (SNR - Signal to Noise Ratio). Je-li tento údaj roven nule, nelze daný satelit využít k výpočtu polohy. Nejčastěji proto, že je zastíněn. |
… | … | … | Podle počtu viditelných družic mohou následovat další čtveřice údajů (4-7) |
n | *xx |
74 | Kontrolní součet |
Příklad:
$GPGGA,170139.615,4912.2526,N,01635.0378,E,1,07,1.0,357.5,M,43.5,M,0.0,0000*7D
# | formát | příklad | komentář |
---|---|---|---|
1 | hhmmss.sss |
170139.615 | Čas (UTC), pro který platí údaje o vypočtené pozici |
2 | ddmm.mmmm |
4912.2526 | Zeměpisná šířka |
3 | c |
N | Indikátor severní/jižní šířka (N=sever, S=jih) |
4 | dddmm.mmmm |
01635.0378 | Zeměpisná délka |
5 | c |
E | Indikátor východní/západní délky (E=východ, W=západ) |
6 | d |
1 | Indikátor kvality: 0 — nebylo možno určit pozici 1 — pozice úspěšně určena 2 — pozice úspěšně určena (diferenční GPS) |
7 | dd |
07 | Počet viditelných satelitů 00 — 12 |
8 | d.d |
1.0 | Vliv rozestavění družic na určení polohy HDOP (Horizontal Dilution of precision) |
9 | d.d |
357.5 | Výška antény nad geoidem |
10 | c |
M | Jednotka pro předchozí údaj (č.9) (M=metr) |
11 | d.d |
43.5 | Geoidal separation, rozdíl mezi WGS-84 zemským elipsoidem a střední úrovní moře (geoid). Znaménko mínus znamená, že střední úroveň země je pod elipsoidem. |
12 | c |
M | Jednotka vzdálenosti pro předchozí položku (č.11) (M=metr) |
13 | d.d |
0.0 | Stáří poslední aktualizace DGPS. Údaj je uváděn v sekundách. Jestliže údaj chybí, nepoužívá se DGPS. |
14 | dddd |
0000 | Identifikační číslo referenční stanice pro DGPS (0000 — 1023) |
15 | *xx |
7D | Kontrolní součet |
GPS přijímač potřebuje znát přesnou pozici všech družic, jejichž signál používá k výpočtu vlastní polohy. Každá družice proto vysílá informace o své pozici ve formě souřadnic. Tyto souřadnice jsou vztaženy k souřadnému systému nazývanému ECEF WGS-84 (Earth Centered Earth Fixed, World Geodetic System 1984). Jedná se o pravoúhlý souřadný systém, který je definován na základě elipsoidu, který byl v roce 1984 stanoven referenčním. Jeho tvar je zvolen tak, aby co nejlépe vystihoval tvar Země. Do geometrického středu tohoto elipsoidu je umístěn počátek souřadné soustavy — bod [0,0,0]. Osa z je totožná s osou rotace, osa x prochází průsečíkem rovníku a Greenwichského poledníku (nultého). Osa y je zvolena tak, aby systém x, y, z byl pravotočivý.
Veškeré výpočty probíhají právě v této souřadné soustavě a výsledná pozice přijímače je taktéž určena v systému ECEF. Výsledek se následně přepočítá do běžnějších zeměpisných souřadnic (zeměpisná délka a šířka) vzhledem k referenčnímu elipsoidu WGS-84. Třetí souřadnicí je výška, ale nikoli nadmořská, nýbrž vzdálenost od povrchu referenčního elipsoidu. Některé GPS přijímače však znají rozdíl mezi povrchem referenčního elipsoidu a místní střední výškou mořské hladiny. Je potřeba si to ale ověřit. Plyne z toho zásadní poznatek — výška, kterou udává GPS přijímač, nemusí souhlasit s výškovými kótami na mapě. V našich podmínkách bývá rozdíl několik desítek metrů a pro danou oblast se příliš nemění, takže stačí pouze přičíst nebo odečíst konstantu. Udávat výšku vzhledem k hladině moře je značně nepraktické a doufejme, že tento způsob co nejdříve skončí v propadlišti dějin. Až do této chvíle je vše relativně přehledné. Uživatel dostane obvyklé zeměpisné souřadnice a výšku.
Problém však nastává s takzvanými lokálními souřadnými systémy, které vznikly v historii a bohužel se drží do dnešní doby. Například v České republice se vyskytují mapová díla nejen v systému WGS-84. Používá se také S-JTSK (souřadnicový systém jednotné trigonometrické sítě katastrální) a S42 (vojenský souřadnicový systém 1942). Systém S42 se používá v zemích bývalé Varšavské smlouvy. Kartografii nerozumím, ale zdá se, že vzájemné převody mezi těmito soustavami jsou obestřeny tajemstvím. Informací je na internetu velmi poskrovnu, jsou nejasné a mnoho odkazů je neplatných. Běžní uživatelé jsou spokojení, protože existuje řada konverzních programů — s koncovkou .exe a bez zdrojového kódu. Pevně doufám, že se najde sdílný člověk, který rozumí pojmům jako Křovákovo zobrazení, Gauss-Krügerovo zobrazení, Besselův elipsoid, Krassovského elipsoid a poskytne algoritmus, který si pak každý může naprogramovat ve svém oblíbeném programovacím jazyce.
Turistické mapy KČT (Klub českých turistů), které se běžně prodávají v České republice, mívají vyznačenu čtvercovou síť o straně 1 kilometr. Vysvětlivka praví, že souřadnice jsou zavedeny v systému S-1942 a že prodejce GPS přijímače jistě rád poradí, jak údaje do tohoto systému přepočítat. Pokusím se shrnout, co je potřeba provést, jestliže chceme vědět, kde na mapě se momentálně nacházíme. GPS přijímač, který popisuji v tomto článku, interně provedl výpočty v kartézské soustavě ECEF WGS84. Následně je převedl do úhlových souřadnic (šířka, délka) a výšky.
To je od něj hezké, ale bohužel potřebujeme souřadnice v původní soustavě. Bude nutné je přepočítat. Není to složité, stačí ponásobit nějaké siny a kosiny, přičemž do hry vstoupí parametry elipsy WGS84 (délka hlavní poloosy a excentricita). Protože systém S42 používá elipsoid Krassovského, bude potřeba kartézské souřadnice přepočítat do jiných kartézských souřadnic vztahujících se k tomuto elipsoidu. Souřadnice se navzájem liší a převod se provádí maticovým vztahem, který obsahuje sedm parametrů, které definují převod. Vzniklé souřadnice musíme dále převést na zeměpisné (a výšku), což analyticky nelze provést. Existuje však numerický postup, který poměrně rychle konverguje a po dvou či třech iteracích máme výsledek. Výšku si můžeme někam zapsat — s tou jsme již hotovi. Jenže zbývající dvě souřadnice představují bod na povrchu elipsoidu a musíme zjistit, jak se zobrazí na mapě.
V systému S42 se používá zobrazení Gauss—Krügerovo. Jde o válcové zobrazení a k jeho výpočtu je nutné (mimo jiné) vypočítat délku oblouku na elipse, což představuje vyčíslení eliptického integrálu. Toto se obvykle provádí rozvojem do nekonečné řady. Když je všechna práce hotova, můžeme konečně píchnout prstem do mapy a říct "Tady jsem.". Zmíněné výpočty jistě budou hračkou i pro toho, kdo bloudí na pokraji smrti hladem a mrazem. Raději se nebudu zmiňovat o obráceném postupu, kdy chceme zjistit, jaké "GPS souřadnice" má nějaké místo na mapě.
GPS je globální systém, který funguje všude na světě, je velmi dobře zdokumentovaný a je zdarma přístupný každému. S tím ovšem velmi kontrastuje chaos panující při reálném použití, protože vývoj probíhá zcela živelně. Mnoho firem vydělává na lidské neschopnosti se domluvit, ujednotit standard a přestat používat zastaralé konvence. Tatáž práce se provádí neustále znovu a znovu. Chybí volně dostupné mapy, zdrojové kódy k programům, dokumentace k protokolům a datovým formátům a vše se hemží utajováním, licencemi a copyrighty. Naštěstí jsou však i tací, kteří si výsledky své práce nenechávají pro sebe a kterým tímto děkuji.
Poděkování
Tento článek vznikl za podpory grantu GAČR 103/06/1711.
The Interface Standard is a COPYRIGHTED document and available only from NMEA. Other internet offerings are not authorized and may constitute a copyright infringement. NOTE: ALL SALES FINAL.Pak se jedna o obycejnou licenci, ktera nezavadi zadna dalsi omezeni o proti ceskemu autorskemu pravu. Tudiz z knihy opisovat nemuzete (nad ramec citace), ale myslenky v knize obsazene muzete zcela svobodne reprodukovat.
Tyto souřadnice jsou vztaženy k souřadnému systému nazývanému ECEF WGS-84 … který je definován na základě elipsoidu, který byl v roce 1984 stanoven referenčním. … Problém však nastává s takzvanými lokálními souřadnými systémy, které vznikly v historii a bohužel se drží do dnešní doby. … Pevně doufám, že se najde sdílný člověk, který rozumí pojmům jako Křovákovo zobrazení, Gauss-Krügerovo zobrazení, Besselův elipsoid, Krassovského elipsoid a poskytne algoritmus, který si pak každý může naprogramovat ve svém oblíbeném programovacím jazyce.Kdyby se v tom Aristoteles, Koperník a další nevrtali, mohli jsme mít dodnes Zemi krásně placatou a s různými souřadnými systémy by nebyl problém. Pokud by se do toho teda nevložil Einstein s těmi jeho zakřivenými časoprostory
GGA - essential fix data which provide 3D location and accuracy data.
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
Where:
GGA Global Positioning System Fix Data
123519 Fix taken at 12:35:19 UTC
4807.038,N Latitude 48 deg 07.038' N
01131.000,E Longitude 11 deg 31.000' E
1 Fix quality: 0 = invalid
1 = GPS fix (SPS)
2 = DGPS fix
3 = PPS fix
4 = Real Time Kinematic
5 = Float RTK
6 = estimated (dead reckoning) (2.3 feature)
7 = Manual input mode
8 = Simulation mode
08 Number of satellites being tracked
0.9 Horizontal dilution of position
545.4,M Altitude, Meters, above mean sea level
46.9,M Height of geoid (mean sea level) above WGS84
ellipsoid
(empty field) time in seconds since last DGPS update
(empty field) DGPS station ID number
*47 the checksum data, always begins with *
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.