Intelligens Rendszerek Gyakorlata GPS alapú rendszerek (gyakorlati feladat)
Adatfogadás GPS készülékkel Kommunikáció: protokollok alapján (NMEA, Sirf) Műholdas rendszer Interfész:RS-232 Bluetooth PC GPS vevő
Adat feldolgozása naplófájl alapján NMEA esetén szöveges állomány PC A GPS készülék működtetése közben napló készíthető Hyperterminal-al, vagy más segédprogrammal. Ennek eredménye egy könnyen értelmezhető szöveges fájl. A napló segítségével helyettesíthető a GPS készülék „visszajátszás” céljából.
GPS napló: NMEA mondatok Kezdőszimbólum ($) a mondat típusával A mondatot sortörés zárja
NMEA protokoll ASCII alapú szöveges formátum Mondat típusokat definiál (GPRMC, GPGGA, stb.) Minden mondat $ jellel kezdődik és sortörés zárja A mondatokon belül mezők hordozzák az adatokat, melyek vesszővel vannak elválasztva Az utolsó mező tartalmazza az ellenőrzőösszeget, ezt a mezőt * karakter választja el a többitől (nem ,) Hexadecimális számként kell értelmezni (1 bájt) A $ és a * közti karakterek között értelmezett XOR művelettel áll elő
Néhány mondattípus $GPGGA - Global Positioning System Fix Data $GPGLL - Geographic position, latitude / longitude $GPGSV - GPS Satellites in view $GPRMC - Recommended minimum specific GPS/Transit data
GPGPGGA $GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh 1 = UTC of Position 2 = Latitude 3 = N or S 4 = Longitude 5 = E or W 6 = GPS quality indicator (0=invalid; 1=GPS fix; 2=Diff. GPS fix) 7 = Number of satellites in use [not those in view] 8 = Horizontal dilution of position 9 = Antenna altitude above/below mean sea level (geoid) 10 = Meters (Antenna height unit) 11 = Geoidal separation (Diff. between WGS-84 earth ellipsoid and mean sea level. - =geoid is below WGS-84 ellipsoid) 12 = Meters (Units of geoidal separation) 13 = Age in seconds since last update from diff. reference station 14 = Diff. reference station ID# 15 = Checksum
Tengerszint feletti magasság Konkrét példa $GPGGA,075916,4731.9606,N,01902.2900,E,1,06,2.4,106.3,M,41.0,M,,*46 A földrajzi koordináták a percértéket decimális formátumban fejezik ki A vízszintes és függőleges polaritási értékeket a szélességi és hosszúsági adatokat tartalmazó mezőket közvetlenül követő mezők tartalmazzák (itt N- észak, E - kelet) Földrajzi szélesség 47° 31.9606’ Földrajzi hosszúság 19° 2.2900’ Tengerszint feletti magasság Ellenőrzőösszeg (hex)
Földrajzi pozíció leképezése bittérképre – kalibrációs pontok (63, 125) 47° 32.0123’ 19° 2.0386’ k1 (348, 233) 47° 31.9513’ 19° 2.2925’
Kalibrációs pontok Ki kell jelölni két pontot a bittérképen, majd meg kell adni, hogy ezekhez a pontokhoz milyen földrajzi koordináták tartoznak A kalibrációs pontok segítségével meghatározható, hogy a bittérkép (x, y) pixel-koordinátájához melyik földrajzi koordináta (Lat, Lon) társítható Ehhez csupán egyszerű matematikai számításokat kell elvégezni…
Feladat Adott egy térképet ábrázoló képfájl és egy GPS napló (az adott térképre leképezhető pozíciókkal) A naplóban minden sor egy NMEA mondatot tartalmaz A mondatokból ki kell olvasni a földrajzi koordinátákat (GPGGA mondat 2. és 4. mező) A térképen meg kell jeleníteni a naplóból kapott földrajzi pozíciókat a kalibrációs értékek segítségével „visszajátszás” formájában
Segítség az első részhez String műveletekkel kiolvashatók a vesszővel elválasztott mezők, így megkapjuk a szélességi és hosszúsági értékeket String formátumban A Stringeket át kell konvertálni numerikus típusokká, hogy a 2. feladatban számolni lehessen velük
Segítség a második részhez A fok-pixel arányt ki kell számítani a megadott kalibrációs pontok alapján (k1, k2) Az arány ismeretében a fokban mért elmozdulások átválthatók pixeles elmozdulásokra
Típusok public class Koordinata { public int szelessegFok; public float szelessegPerc; public int hosszusagFok; public float hosszusagPerc; } public class KalibraciosPont public int x, y; public Koordinata k = new Koordinata(); Földrajzi koordináta típus Kalibrációs pont típus: Reprezentálja az x, y pixel koordinátához rendelt földrajzi pozíciót
Metódusok ismertetése String readNMEA_GPGGA() Visszatér a fájlból kiolvasott aktuális GPGGA típusú mondattal Koordinata NMEA2Koordinata(String NMEA) A GPGGA mondatból kiolvassa a koordinátákat private void timer1_Tick(object sender, EventArgs e) Meghívja az előző két függvényt, majd a kapott értékek és a kalibrációs pontok alapján kiszámítja és megjeleníti az aktuális pozíciót a térképen