Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar
Nagy Krisztina ROBOTREPÜLŐKÖN ALKALMAZHATÓ MAGASSÁGMÉRÉSI MÓDSZEREK VIZSGÁLATA
KONZULENS
KÜLSŐ KONZULENS
Szabó Zoltán
Mikó Gyula
BME AUT
BHE Bonn Hungary Electronics Ltd.
Budapest, 2014
Tartalomjegyzék 1.
Bevezetés ................................................................................................................... 5
2.
Abstract...................................................................................................................... 6
3.
Elméleti áttekintés ..................................................................................................... 7 3.1
4.
Global Positioning System (GPS) ...................................................................... 7
3.1.1
A rendszer felépítése ................................................................................... 7
3.1.2
Működési elv............................................................................................. 10
3.1.3
Horizontális hibák és korrekciós módszereik ........................................... 13
3.1.4
Korrekciós módszerek .............................................................................. 16
3.2
Rádiós magasságmérés..................................................................................... 19
3.3
Barometrikus magasságmérés .......................................................................... 26
3.4
Elvárt pontosság ............................................................................................... 28
Felhasznált eszközök ............................................................................................... 30 4.1
Raspberry Pi ..................................................................................................... 30
4.2
GPS modul ....................................................................................................... 31
4.2.1
5.
Felhasznált NMEA üzenetek .................................................................... 32
4.3
Barometrikus magasságmérő modul ................................................................ 35
4.4
Rádiós altiméter ............................................................................................... 37
4.4.1
Státusz információk .................................................................................. 37
4.4.2
Magasságinformációk ............................................................................... 37
4.5
Giroszkóp ......................................................................................................... 38
4.6
Soros – USB átalakító ...................................................................................... 41
4.7
Tápellátást biztosító panel ................................................................................ 42
Szoftverrendszer ...................................................................................................... 45 5.1
Mérésadatgyűjtő szoftver ................................................................................. 45
5.2
Adatok finomítását végző szoftver................................................................... 48 2
5.3 6.
Kiértékelő szoftver ........................................................................................... 52
Mérési adatok kiértékelése ...................................................................................... 54 6.1
GPS magasságadatok pontosságának értékelése .............................................. 54
6.2
GPS és rádiós altiméter adatok összehasonlítása ............................................. 56
6.3
UAV fedélzeti mérés ........................................................................................ 58
7.
Összefoglaló ............................................................................................................ 63
8.
Továbbfejlesztési lehetőségek ................................................................................. 64
9.
Köszönetnyilvánítás ................................................................................................ 65
10. Irodalomjegyzék ...................................................................................................... 66 11. Ábrajegyzék ............................................................................................................. 68 12. Függelék .................................................................................................................. 70 12.1
Az adatgyűjtő szoftver forráskódja (Python) ................................................... 70
12.2
Az adatfeldolgozó szoftver forráskódja (JavaScript) ....................................... 72
3
HALLGATÓI NYILATKOZAT Alulírott Nagy Krisztina, szigorló hallgató kijelentem, hogy ezt a szakdolgozatot meg nem engedett segítség nélkül, saját magam készítettem, csak a megadott forrásokat (szakirodalom, eszközök stb.) használtam fel. Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen, a forrás megadásával megjelöltem. Hozzájárulok, hogy a jelen munkám alapadatait (szerző(k), cím, angol és magyar nyelvű tartalmi kivonat, készítés éve, konzulens(ek) neve) a BME VIK nyilvánosan hozzáférhető elektronikus formában, a munka teljes szövegét pedig az egyetem belső hálózatán keresztül (vagy hitelesített felhasználók számára) közzétegye. Kijelentem, hogy a benyújtott munka és annak elektronikus verziója megegyezik. Dékáni engedéllyel titkosított diplomatervek esetén a dolgozat szövege csak 3 év eltelte után válik hozzáférhetővé. Kelt: Budapest, 2014. 12. 12.
...……………………………………………. Nagy Krisztina
4
1. Bevezetés Napjainkban egyre elterjedtebbé válnak a katonai, felderítési és felügyeleti feladatokat ellátó pilótanélküli kisrepülőgépek, quadrocopterek, gyűjtőnevükön UAV-k (Unmanned Aerial Vehicle). Ezeknél az eszközöknél az egyes repülési fázisok – felszállás, repülési szakasz, leszállás – során kritikus lehet a repülési adatok pontosságának ismerete, ezzel biztosítva az automatizált működés helyességét. Ugyanakkor a mérőeszközök kiválasztásánál minden esetben fontos szempont, hogy azok kompaktak és könnyűek legyenek, ezzel növelve a repülőgép hatótávolságát és biztosítva használhatóságát. Katonai berendezéseknél nem szükséges, hogy az eszközök költséghatékonyak legyenek, azonban vannak olyan felhasználási területek, ahol ez igencsak fontos szempont. Ilyen lehet például bármilyen mérésadatgyűjtést végző, területet felügyelő, esetleg szállítási és kapcsolattartási feladatokat ellátó eszköz. A vizsgált mérési adatgyűjtő rendszer GPS modult, giroszkópot, egy rádiós elven működő altimétert és egy barometrikus szenzort tartalmazott. A magasság mérésére ezekkel a hardverelemekkel több lehetőség kínálkozik: egyrészt mérhetünk a rádiós altiméter segítségével, pontosítva az adatokat a giroszkóp által szolgáltatott dőlési szögek adataival, vagy használhatjuk a GPS által szolgáltatott magasságadatokat, illetve a barometrikus magasságmérő szenzor adataira is támaszkodhatunk. A szakdolgozat fő témája annak vizsgálata, hogy a GPS alapú magasságmérés milyen módon pontosítható, és használható fel más módszerek ellenőrzésére. Továbbá arra is keresi a választ, hogy a repülés során milyen feltételek mellett tekinthető megbízható mérési módszernek.
5
2. Abstract The unmanned small airplanes and quadrocopters used for military, intelligence and surveillance purposes are getting widespread in our days. Regarding the flight periods (taking off, flying and landing) of these UAVs (Unmanned Aerial Vehicle) the accurate determination of the flight altitude can be crucial in automated control. However, in the case of UAVs the compact and light design of the sensor devices is of great importance, because it can greatly affect the usability and range of the plane. Although in military applications cost-effectiveness is not the most important aspect, in other applications it must be carefully considered. Such applications can be introduced in the field of datacollection, surveillance, transportation and communication. The examined system consists of a GPS module, a gyroscope, a barometric altimeter, and a radio altimeter. With this configuration more possibilities are available for altitude measurement. We can measure altitude with the radio altimeter, improving its acquired data with the help of the gyroscope, or we can use the altitude data of either the GPS module or the barometric module. The thesis concentrates on the possibilities lying in GPS data correction, and the way this corrected data can be used to validate altitude data coming from other sources. Furthermore, it aims at determining the circumstances in which it can be considered as a reliable measurement method.
6
3. Elméleti áttekintés 3.1 Global Positioning System (GPS) 3.1.1 A rendszer felépítése A GPS rendszer három fizikailag is elkülöníthető részre osztható. Az űrben műholdak végzik a számításokat és az adatok továbbítását. A földön vezérlőállomások helyezkednek el, melyek a műholdak pontos helyzetének meghatározását végzik. Ahhoz pedig, hogy tömegek számára elérhető legyen a rendszer által biztosított helymeghatározási funkció, GPS vevők állnak a felhasználók rendelkezésére. 3.1.1.1 Űr-szegmens A GPS műholdak a Föld felszínétől nagyjából 20200 km-re, 14000km/órás sebességgel keringenek a Föld körül, naponta kétszer kerülik meg azt. A műholdak pályái úgy vannak elosztva, hogy minden pillanatban a Föld bármely pontjából árnyékolatlan esetben legalább négy műhold látszik. A konstellációt alkotó 24 műhold hat, az Egyenlítővel 55°os szöget bezáró pályán kering, a pályák az Egyenlítő síkját 60°-onként metszik. A folyamatos lefedettség biztosításának érdekében 31 műhold kering a pályákon, de az alapelrendezésben ezekből csak 24 kap helyet. 2011 júniusában az Amerikai Légierő 3 további műhold bevonásával bővítette az alapelrendezést, így jelenleg 27 műhold biztosítja a még jobb lefedettséget.
3-1. ábra: A GPS műholdak elrendezése a Föld körül[1]
7
A GPS konstellációt különböző, akár 20 éve fellőtt műholdak illetve egészen új, modern egységek alkotják. A legújabb egységet, a GPS IIF-8 műholdat 2014. október 29-én lőtték fel a pályájára. A 3-2. ábra a jelenleg működő műhold-generációk jellemzőit mutatja be. IIA BLOKK
IIR BLOKK
IIR(M) BLOKK
IIF BLOKK
GPS III
5 működő műhold
12 működő
7 működő műhold
8 működő műhold
gyártás alatt
Az összes korábbi jel
Minden IIR(M) Blokk
Minden IIF Blokk jel
műhold
Durvább felbontású
C/A kód L1
(C/A) kód L1
frekvencián
jel Második civil jel L2
frekvencián továbbítva civil célokra
P(Y) kód L1 és L2
frekvencián (L2C)
Negyedik civil jel Harmadik civil jel
frekvenciákon Új katonai M kód
Precíziós P(Y) kód L1
Megbízhatóbb jel, Továbbfejlesztett
és L2 frekvencián Rugalmas katonai
katonai felhasználásra
(L1C)
(L5) nagyobb pontosság
atomi órák Satellites 9+: lézer
jelszintek Jobb pontosság,
reflektorok, keresési és
jelerősség és minőség
mentési funkciók
1990-1997
1997-2004
2005-2009
2010-
2016-
7,5 év tervezett
7,5 év tervezett
7,5 év tervezett
12 év tervezett
15 év tervezett
élettartam
élettartam
élettartam
élettartam
élettartam
3-2. ábra: Műhold generációk[1]
3.1.1.2 Vezérlési szegmens A vezérlési szegmenset 30 földi állomás hálózata alkotja. Az állomások a GPS műholdakat követik, az általuk küldött adatokat monitorozzák, ezeket az adatokat analizálják, majd az eredmények függvényében vezérlik a műholdakat. A vezérlési szegmens üzemeltetéséért a 2nd Space Operations Squadron (2SOPS) felel. A 3-3. ábrán a földi vezérlőállomások hálózata látható.
8
3-3. ábra: A vezérlési szegmens földi állomásai és szerepük[1]
A monitorozó állomások a felettük elhaladó műholdak által küldött adatokat figyelik. A navigációs jelek mellett az atmoszférára vonatkozó adatokat is gyűjtik. Az állomások precíziós, különösen nagy teljesítményű GPS vevőkkel rendelkeznek. A Földön elszórva összesen 16 ilyen állomás található. A fő vezérlőállomás (Master Control Station) Colorado államban, a Schriever Légitámaszponton helyezkedik el. Ez az állomás végzi a fő vezérlési feladatokat a rendszer pontosságának fenntartásához. A monitorozó állomásoktól kapott adatok alapján pontosan kiszámítja a műholdak aktuális helyzetét, majd ezeket az adatok a műholdakra küldi. A műholdakkal való S-frekvenciasávban (2-4GHz) történő kommunikációt a földi antennák biztosítják. Navigációs adatokat és vezérlő utasításokat küldenek a műholdaknak, illetve a telemetrikus adatok gyűjtése is rajtuk keresztül valósul meg. 3.1.1.3 Felhasználói szegmens A felhasználói szegmens alkotói a GPS vevők, melyek a műholdak által küldött adatokon számításokat végezve pozícióadatokat szolgáltatnak. A felhasználási területek között a jól ismert közlekedési navigáció mellett szerepelnek mezőgazdasági, szabadidős, időzítési vagy akár biztonsági feladatokat ellátó lehetőségek is.
9
3.1.2 Működési elv A helymeghatározás a trilateráció elvén alapul, mely a háromszögeléshez hasonló folyamat. Elve a pozíció meghatározása három ismert koordinátájú ponttól való távolság ismeretében. Az ismert távolságok egy-egy gömbfelületet jelölnek ki. Az első két műhold által meghatározott gömbfelület egy kört jelöl ki, melyet még egy gömbfelülettel elmetszve két pontot kapunk. A két pont egyike a keresett pozíció. A pontok közüli választást elősegítheti egy negyedik műhold, de sokszor a két pont egyike olyan távolságra helyezkedik el a modellezett földfelszíntől, hogy egyértelművé válik, hogy ez nem lehet a keresett pont.
3-4. ábra: A trilateráció elvén meghatározott pozíciók
A GPS vevő minden esetben legalább 4 műholddal tart kapcsolatot, ez lényegesen pontosabbá teszi a helymeghatározást. Amennyiben a GPS vevő nem lát legalább négy műholdat, úgy nem elérhetőként definiálja a pozíciót, nem biztosít pozícióadatokat. Ahogy a távolságok ismeretében a pozíció meghatározása, úgy a távolság mérése is egyszerű elven alapul, számítására az adat küldése és annak fogadása közötti időkülönbséget használjuk fel. A GPS műhold a küldött adatot mindig egy nagyon pontos időbélyeggel látja el. A fogadás pillanatában a GPS vevő letárolja a saját órája által mutatott időértéket. A rádióhullám elektromágneses hullám, tehát fénysebességgel terjed. Így a terjedés során megtett út a fénysebesség és a terjedési idő szorzataként adódik: 𝑠 = 𝑣𝑡, ami adott esetben: 𝑠 = 𝑐(𝑡1 − 𝑡0 ) Bár a műholdakon precíziós atomi órák gondoskodnak az időmérés lehető legnagyobb pontosságáról, ez a módszer a földi vevőkben nem elérhető, ugyanis ez olyan mértékű költségnövekedést hozna, hogy általános felhasználásra nem lenne használható a
10
rendszer. Három tökéletesen pontos óra használatával megoldható lenne a pozíció meghatározása, de a költségek miatt inkább négy műhold adatát használjuk fel, és kevésbé pontosan mérünk. Amennyiben négy műhold adatát precíziós órával ellátott vevővel dolgoznánk fel, akkor a negyedik gömbfelület szinte tökéletes pontossággal illeszkedne a meghatározott pontra. A GPS vevőkben alkalmazott óra használatakor ez a negyedik gömbfelület jelentősen eltér a másik három adatból meghatározott ponttól. A vevő így érzékeli, hogy eltérés van az adatok között, és megkeresi azt az időkorrekciós tényezőt, mellyel a vett adatokból a legpontosabban rajzolható ki a pozíció. Tehát a negyedik műhold felhasználásával korrigálni tudjuk az időmérés pontatlanságát. Ezzel a módszerrel a négy kevésbé pontos távolságadat közel olyan mérési pontosságot biztosít, mintha a földi egység is atomi órát használna, és csak három műhold adatait dolgozná fel. Mindeddig feltételeztük, hogy pontosan ismerjük a műholdak helyzetét, és így használhatjuk őket viszonyítási pontként. Azonban ilyen távolságban, ilyen sebességgel keringő műholdak esetén az előre meghatározott pozíció a számítási hibák miatt eltérhet a ténylegestől. Ez komoly problémákat okozhat a számításoknál. Ennek kiküszöbölésére időről időre vizsgálnunk kell a műholdak pontos helyzetét, hiszen csak hiteles referenciapontokat alkalmazva lehet pontos a mérésünk. Az alapvetően nagyon egyszerű helymeghatározási elv a gyakorlatban a műholdak precizitása és a vezérlés hihetetlen bonyolultsága miatt éri el a GPS pozícionálás ismert pontosságát. A felmerülő hibák óriási skálájából bizonyosakat csak nagyon körültekintő módon, másokat egyáltalán nem lehet kiküszöbölni. Az alábbiakban egy nem kézenfekvő hibajelenség korrekciós módszere kerül bemutatásra, illetve annak becslése, hogy a korrekció nélkül milyen mértékű lenne a hiba. A speciális relativitáselmélet kimondja, hogy két, egymáshoz viszonyítva mozgásban levő vonatkoztatási rendszerben eltérően telik az idő. A GPS műholdak gyors mozgása (közel 4 km/s) és a módszer pontosság-kritikussága miatt ez olyan tényező, mellyel számolnunk kell. Az elmélet szerint inerciarendszerekben eltérően telik az idő, attól függően, hogy a rendszerek egymáshoz képest milyen sebességgel mozognak. Az idődilatációt leíró egyenlet a következő: ∆𝑡 = 𝛾∆𝑡0 , ahol
∆t0: mozgásban levő megfigyelő által mért idő
11
∆𝑡: nyugalomban levő megfigyelő által mért idő 𝛾: Lorentz-tényező 1 𝑣2 = √1 − 2 𝛾 𝑐 v: a nyugalomban levő megfigyelő ekkora sebességgel látja mozogni a mozgó rendszert Számításunk során a műhold mozgási sebessége a Földhöz képest 𝑣 = 3880𝑚/𝑠. Kis v/c értékekre a √1 − 𝑥 első fokú Taylor polinomját felhasználva így közelíthetünk: 1 𝑣2 =1− 2 𝛾 2𝑐 A műhold órája így a Földről nézve lassabban ketyeg. A számítások alapján egy nap alatt 7236ns eltérés van a műholdon illetve a Földön levő órák között [1]. Ez az aprónak tűnő hiba, korrigálás nélkül, pár nap alatt felgyűlve hatalmas hibákat okozna a rendszerben, helymeghatározásra teljesen alkalmatlan lenne az elviekben egyszerű és jól működő módszer. Azonban ez még csak egy relativisztikus jelenség, a gravitáció miatt fellépő időferdüléssel még nem is számoltunk.
3-5. ábra A műholdak órái a sebességük miatt lassabban, a gravitációs mező gyengébb volta miatt pedig gyorsabban járnak[3]
12
3.1.3 Horizontális hibák és korrekciós módszereik A GPS pozíció hibája több összetevőből adódik össze, ezek egy része természeti adottságokból, másik része pedig a technika nem tökéletes pontosságából következik. A helymeghatározó rendszer mikrohullámok szórásán és azok vételén alapul. A légkör különböző részeiben ezek a hullámok szóródást, törést szenvedhetnek el, melynek következtében csökken a helymeghatározás pontossága. Tökéletesen pontos órát és számítási hiba nélküli digitális eszközt elméletileg se tudunk biztosítani, így újabb hibákkal kell számolnunk. A 3-6. ábra [4] a különböző forrásokból adódó helymeghatározási hibák mértékét szemlélteti. Hiba forrása
Hiba mértéke (m)
Ionoszféra
4
Óra
2.1
Műholdak állása
2.1
Troposzféra
0.7
GPS vevő
0.5
Több utas szóródás
1
Összesen
10.4 3-6. ábra: Horizontális helymeghatározás hibáinak mértéke
3.1.3.1 Atmoszféra Az Ionoszféra a földfelszín felett 50-500 km magasan helyezkedik el, nagyrészt ionizált részecskék alkotják, melyek szerepet játszhatnak a GPS jelek zavarásában. Bár az ionizált részecskék eloszlása matematikailag jól modellezhető, és ezáltal a hiba nagyrészt kiküszöbölhető, mégis ez számít az egyik legjelentősebb hibaforrásnak. A Troposzféra az Atmoszféra földfelszínhez közeli része, mely a nagy páratartalom miatt némileg lelassítja a hullám terjedését. Bár egy nagyon inhomogén közegről van szó, a Troposzféra mégis relatíve kis szerepet játszik a hibák felhalmozásában. Itt is használhatunk modellezést, mely a meteorológiai viszonyokat figyelembe véve korrigálja az adatokat. A modellezés csak úgy tud valós időben segítségünkre lenni, ha a vevőkészülékünk tisztában van a korrekciós tényezőkkel. Ezért a műholdak folyamatosan küldik a modellek frissítéséhez szükséges adatokat. A vevőkészüléknek továbbá olyan adatokat is
13
ismernie kell, hogy milyen szögben látszanak az egyes műholdak, ez ugyanis meghatározza a zavaró közegen való áthaladás távolságát. Két különböző frekvencián továbbítva az adatokat, további pontosítást érhetünk el. Mivel a kisebb frekvenciájú jel jobban lelassul a közegbe belépve, mint a nagyobb frekvenciájú, így differenciális számításokat végezve meghatározhatjuk a közeg típusát, és ennek ismeretében már tudunk korrigálni. Azonban ez a módszer csak nagyon kifinomult vevőegységek esetén alkalmazható, és csak katonai egységek férnek hozzá mind az L1, mind az L2 frekvenciához. 3.1.3.2 Több utas szóródás A GPS alapkoncepciójával ellentétben a műholdak és vevők között csak nagyon ritkán valósul meg a teljesen egyenes vonalú átvitel. A jel általános esetben többszörösen szóródik domborzati elemeken és épületeken. Ezáltal a direkt jel vétele után még többszörösen vehetjük a szórt jelet. Ennek kiküszöbölésére kifinomult jelfeldolgozási módszereket használnak, annak biztosítására, hogy csak az első (direkt) jel adatait vegyék figyelembe. 3.1.3.3 Műhold hibák A műholdak órái bár mai technikai tudásunk szerint a legpontosabbak, mégis hordoznak magukban minimális pontatlanságot. Továbbá a műholdak helyzete a folyamatos monitorozás ellenére sem határozható meg tökéletesen pontosan. A vevőegységek egy adatbázist frissítenek az óránként kapott műholdpozíciós adatokkal. 3.1.3.4 Szándékos hibák A GPS rendszert fenntartó és üzemeltető amerikai kormány 2000. május 1-ig korlátozta a GPS által meghatározható helyrajzi pontosságot. Ezt a „Selective Availability”-nek nevezett vezérelv védelmi célokat szolgált. A műholdak óráit zajjal terhelve csökkentették az elérhető helymeghatározási pontosságot. Az amerikai katonaság ismerte ennek a hibának a dekódolási módszerét, így az ilyen célú készülékek sokkal pontosabb navigálást tettek lehetővé, mint a polgári célú társaik. A hivatalos, üzemeltetői adatok szerint (GPS.gov) 95%-os valószínűséggel 7,8 méteres a GPS műhold és a vevő közötti távolság meghatározásának hibája. Ez tehát nem a pozíció meghatározás hibája, hanem az egyes műholdak és a vevőegység közötti távolság, tehát a képzeletbeli gömbök sugarának mérete. A helymeghatározás tényleges pontosságát a kormány hatáskörén kívül álló, fent említett hatások határozzák meg, de ugyancsak
14
hivatalos adatok szerint az FAA (Federal Aviation Administration) nagypontosságú vevői akár 3,5 méteres pontossággal üzemelnek.[5] A FAA által 2014. májusban kibocsátott tanulmány a 3-7. ábrán látható értékeket határozza meg pontossági szabványként.
3-7. ábra: A FAA által meghatározott pontossági követelmények
Az itt említett adatok szerint az általános elvárás a pontossággal szemben az, hogy az eltérés vertikálisan maximálisan 15m, horizontálisan pedig maximálisan 9m legyen 95%os konfidenciával. Az FAA azonban a WAAS bázisállomásokon ennél sokkal kisebb eltérésű mérésekről számol be. Ezeken a bázisokon csupán 3,351m-es a horizontális és 4,684m-es a 95%-os konfidencia-intervallumhoz tartozó vertikális hiba. Ez a lényeges eltérés abból ered, hogy ezeken az állomásokon precíziós vevőegységeket használnak.
3-8. ábra: Horizontális hibák eloszlása 2014 április 1–2014 június 30 között[6]
15
3-9. ábra: Vertikális hibák eloszlása 2014 április 1–2014 június 30 között
3.1.4 Korrekciós módszerek A GPS horizontális hibája bizonyos módszerek segítségével csökkenthető. Ezek a módszerek differenciális vétellel határozzák meg a hiba nagyságát, és ennek ismeretében pontosítják a GPS adatokat. Ismert, nagyon pontosan meghatározott pozícióba elhelyezve egy referencia GPS vevőt, a vevő a saját és a műholdak helyzetét ismerve pontosan ki tudja számítani, hogy az adott műholdaktól mekkora időeltolódással kellene adatot kapnia. Ennek ismeretében, amikor ténylegesen megkapja az adatot, kiszámolja az eltérés mértékét, ez alapján pedig hibaértéket kalkulál. A becsült hibát közvetíti a többi vevőegységnek. A közvetítés módjában különböznek az egyes korrekciós módszerek. 3.1.4.1 DGPS A DGPS rendszer az Egyesült Államok Parti Őrsége (US Coast Guard) által telepített két irányító központból, és a part mentén, illetve belső területeken létesített 60 állomásból áll. A hajózási rádiófrekvenciákat használják a korrekciós adatok továbbítására, 300kHzes frekvenciasávban üzemelnek, és állomástól függően 100 vagy 200bps sebességgel küldenek adatot. Bár az állomások által küldött adat a számítási és küldési feladatok időigénye miatt néhány (2-5) másodperces késéssel jut el a GPS vevőkhöz, ez a hibák lassú változása miatt nem bír nagy jelentőséggel. Egy sokkal lényegesebb probléma az, hogy a DGPS állomástól távolodva egyre kevésbé tekinthető pontosnak az állomás által
16
küldött adat. Azonban még ezeket a pontatlanságokat figyelembe véve is elmondható, hogy a helymeghatározás pontossága 1 és 5 méter közötti.
3-10. DGPS lefedettség az Egyesült Államok területén[1]
3.1.4.2 WAAS (Wide Area Augmentation System) A WAAS az Egyesült Államok Szövetségi Légiigazgatósága (Federal Avation Administration) által fenntartott rendszer, mely a földi állomások által számított hibákat geostacionárius műholdakra továbbítja, majd a GPS vevő készülékek ezektől kapják meg a helyileg rájuk vonatkozó adatokat. Főleg az Észak-Amerika felett repülő gépek navigációjának pontosítására használják. 3.1.4.3 CORS (Continuously Operating Reference Stations) A GPS vevő által mért adatokat kimentve utólagosan, szoftveres támogatással végezhetjük el azok pontosítását. A CORS hálózat által mért adatok korrekciós fájlokban találhatók meg a National Geodetic Survey honlapján. Bár ez egy akár centiméteres pontosságot biztosító módszer, azonban nagy hátránya, hogy nem jelent valósidejű megoldást. A 3-11. ábra a CORS bázisállomások elhelyezkedését mutatja.
17
3-11. ábra: A CORS bázisállomások hálózata[1]
3.1.4.4 Kereskedelmi műholdszolgáltatók Az előző rendszerekkel csak az Egyesült Államok területén érhetünk el pontosabb pozícióadatokat, hiszen a földi állomások csak ezeken a területeken helyezkednek el. Vannak olyan szolgáltatók, akik az egész Földön biztosítják ezeket a korrekciókat, ilyen például az OmniSTAR, Racille, és Landstar. Ezek mind fizetős szolgáltatások, éves szinten $1000 nagyságrendű előfizetésekkel. 3.1.4.5 GDGPS (Global Differential GPS) Nagyon pontos (10 cm pontosságú), szintén differenciális elven működő megoldás, melyet a NASA Jet Propulsion Laboratory (JPL) fejlesztett ki. Globálisan több, mint 100 állomás gyűjti, és 1Hz-es frekvencián továbbítja a mérési adatokat a GDGPS feldolgozó központokba. Nagy előnye, hogy valós időben biztosít korrekciós lehetőségeket és az egész földgömbön elérhető.
3-12. ábra: GDGPS állomások[1]
18
3.1.4.6 IGS (International GNSS Service) 80 ország 350 megfigyelőállomása gyűjti folyamatosan az adatokat a pontosítás érdekében. Ezek közül nagyjából 100 állomás egy órán belül közzéteszi a mért adatokat. Hátránya, hogy nem biztosít valósidejű feldolgozást, így navigációra nem, viszont adatok elemzésére előnyös megoldást jelenthet.
3-13. ábra: IGS megfigyelőállomások világszerte[1]
3.2 Rádiós magasságmérés A
rádiós
magasságmérés
a
kibocsátott,
és
a
visszaverődő
rádióhullámok
összehasonlításán alapul. A kibocsátott hullám a földfelszínen visszaverődik, majd visszajut a kibocsátó forráshoz, mindeközben a földtől való távolság nagyjából kétszeresét teszi meg. Ekkor a hullám kibocsátásának és beérkezésének időkülönbségéből számítható a távolság. 2ℎ = (𝑡1 − 𝑡0 )𝑣 ahol
ℎ: az altiméter magasága a földfelszíntől 𝑡0 : a rádióhullám kibocsátásának időpontja 𝑡1 : a rádióhullám visszaérkezésének időpontja 𝑣: a rádióhullám sebessége, a fénysebesség: 299 792 458 m/s
19
Az utasszállító repülőgépeken a gép hasán elhelyezett rádiós magasságmérő pontos adatokat szolgáltathat a kritikus felszállási és leszállási szakaszokban. Az altiméter a futóművekhez minél közelebb helyezkedik el, hogy a gép billenése ne befolyásolja lényegesen a mérési adatokat. A futóművek magasságát korrigálják, hogy az eszköz akkor mutasson nulla értéket, amikor a gép a kifutópályán gurul.
3-14. ábra: Rádiós altiméter elhelyezkedése egy személyszállító repülőgépen [7]
Az ismertetett modell nagyban idealizált, ugyanis a szóródási és törési jelenségek miatt nem csak egy hullám verődik vissza, és a hullámok nem a távolság pontosan kétszeresét teszik meg. Továbbá az esetünkben nagy sebességgel mozgó objektumon elhelyezett magasságmérő a mérés folyamán jelentős elmozdulást végez, melyet valahogy ki kell küszöbölnünk. A rádiós magasságmérők két alapelven működhetnek: vagy rövid mikrohullámú impulzusokat bocsátanak ki, és mérik a visszaérkezésig eltelt időt, vagy folyamatos frekvenciamodulált jel kibocsátásával biztosítják az időzítést. A frekvenciamodulált folyamatos jelű radar (FMCW, Frequency-Modulated Continuous Wave) használata pontosabb felbontást biztosít, így a mérési pontosságot behatóan vizsgáló dolgozat témájához ez illeszkedik jobban. A továbbiakban ennek a működését részletezem. Az FMCW radarok által kibocsátott jel frekvenciája az idővel lineárisan változik egy előre meghatározott frekvencia tartományban. A visszaérkező jel időben eltolódik a kibocsátotthoz képest. Adott frekvenciát tekintve a kibocsátás, és a vétel között eltelt időt tekinthetjük a földtől való távolság kétszeresének megtételéhez szükséges időnek (lásd 3-
20
15. ábra). Az időeltolódás miatt frekvencia eltolódás is lesz a két jel között, melyet detektálhatunk a jelek keverésével. Feltéve, hogy a kibocsátott jel frekvenciája a már említett módon, az idővel arányosan változik[8]: 𝑓𝑂𝑈𝑇 = 𝑓0 + 𝑘𝑓 ∙ 𝑡,
0 ≤ 𝑡 ≤ 𝑇,
ahol 𝑓0 az alapfrekvencia, T a frekvenciaváltozás periódusideje, 𝑘𝑓 pedig a frekvenciaváltozás meredeksége, ami az alábbi módon, a sávszélesség és a periódusidő hányadosaként eredeztethető: 𝑘𝑓 =
𝐵𝑊 𝑇
A késés miatt a vett jel a kimenő jel függvényében: 𝑓𝐼𝑁 = 𝑓0 + 𝑘𝑓 ∙ (𝑡 − ∆𝑡),
∆𝑡 ≤ 𝑡 < 𝑇 + ∆𝑡
A kibocsátott és a vett jel frekvenciakülönbsége tehát: ∆𝑓 =
𝐵𝑊 ℎ ∙2 𝑇 𝑐
Időkorlátozott jelek Fourier transzformációja csak 1
1 𝑇
felbontással tudja detektálni a jelet,
1
mivel ∆𝑡 ≪ 𝑇, ∆𝑡 ≫ 𝑇 , tehát a detektálható távolság minimuma, azaz a mérés felbontása: ∆ℎ =
𝑐 2 ∙ 𝐵𝑊
A levezetett képlet alapján a mérés felbontása csak a végigsöpört frekvenciatartomány nagyságától függ, attól nem, hogy a mérés konkrétan milyen frekvenciákon történik. A munkám során egy 4,2-4,4GHz-es frekvenciákon működő altimétert használtam. Ez esetben 200MHz-es a sávszélesség, ami a levezetés alapján: 𝑚 3 ∙ 108 𝑠 ∆ℎ = = 0,75𝑚 2 ∙ 200𝑀𝐻𝑧 0,75 méteres felbontást biztosít.
21
3-15. ábra: A fűrészfog jellegű pásztázó frekvencia [9]
Ha a repülőgépnek a földhöz képest sugárirányú sebességkomponense is van (tehát vagy emelkedik, vagy ereszkedik), akkor a Doppler effektus által okozott frekvencia eltérést is figyelembe kell vennünk. Ekkor ugyanis a műszer nem csak az időeltolódásból eredő ∆𝑓, hanem a Doppler effektusból eredő 𝑓𝐷 frekvenciát is érzékeli, így a pontos méréshez elengedhetetlen ennek kiküszöbölése. Amennyiben a Doppler frekvenciából eredő eltérés nem összemérhető a sávszélesség által meghatározott felbontással, úgy nem szükséges figyelembe vennünk. Ha a pontosság növelése érdekében mégis szükségünk van a jelenség kiküszöbölésére, úgy erre jó módszer lehet egy háromszög jel kibocsátása az eddig ismertetett fűrészjel helyett. Ekkor a frekvencia felfutásakor és lefutásakor is végezhetünk egy-egy mérést. Ha nincs Doppler effektus, akkor a két mérés során kapott frekvencia különbség azonos nagyságú, ha pedig ezek eltérőek, akkor a Doppler frekvencia a következőképpen számítható: 𝑓𝐷 =
|∆𝑓1 − ∆𝑓2 | 2
A mérési frekvencia, amiből megállapítható a távolság pedig: ∆𝑓 =
|∆𝑓1 + ∆𝑓2 | 2
22
3-16. ábra: A háromszögjegű pásztázó frekvencia
A rádiós magasságmérés az egyszerű alapelv ellenére viszonylag sok számítással, korrekcióval valósítható csak meg, és tökéletes pontosságot csak síkfelületek felett garantál. Gondoljunk csak bele, hogy a repülőgép bármilyen kis dőlése esetén a kibocsátott rádióhullámok már nem derékszögben érintik a földfelszínt, így a mérés pontatlansága igen nagy lehet. Ennek kiküszöbölése érdekében fontos, hogy tisztában legyünk a gép pontos helyzetével, a dőlésszögekkel, hiszen ez alapján már lényegesen pontosíthatók az adatok. Ez legegyszerűbben egy giroszkóp csatlakoztatásával lehetséges, hiszen az ilyen eszközök többsége szolgáltat Euler szög adatokat, melyek alapján rekonstruálható a gép helyzete. Három adattal (roll, pitch, yaw) minden esetben pontosan megadható a pozíció.
3-17. ábra: Repülőgépek dőlési szögei [10]
A yaw szög csak a földfelszínnel párhuzamos síkban való elfordulást mutatja, ez tehát nem befolyásolja a rádiós mérést. A pitch és roll adatok ezzel szemben komoly
23
befolyással lehetnek a mérésre. A roll a géptest hosszanti irányú tengelye körüli elfordulást jelöli, a pitch pedig a gép orrának süllyedéséről illetve emelkedéséről biztosít információt. A tényleges magasságot ℎ-val, a mért magasságot 𝑚-mel jelölve az alábbi összefüggést írhatjuk fel a két adat között: ℎ = 𝑚 ∙ cos(𝑝𝑖𝑡𝑐ℎ) ∙ cos(𝑟𝑜𝑙𝑙)
3-18. ábra: A repülési magasság és a mért magasságérték közötti összefüggés
Ez a számítás még egy kevésbé nagy teljesítményű mikrokontroller számára is könnyen elvégezhető,
nem
jelent
különösebb
nehézséget.
Előre
tárolt
szinusz-táblák
alkalmazásával viszonylag könnyen elvégezhetők a számítások. Az eszköz azonban még így is csak abban az esetben garantál jó mérési eredményeket, ha teljesen sík felület felett mérünk. Ha a kibocsátott jel útjába valamilyen akadály (pl. hegy) kerül, mielőtt az elérné az idealizált földfelszínt, már teljesen más értékek adódnak a repülési magasságra. Ezt csak akkor tudjuk kiküszöbölni, ha pontosan ismerjük a domborzati viszonyokat és a dőlésszögeket. Tegyük fel, hogy van egy olyan adatbázisunk, amelyből a hosszúsági és szélességi koordináták alapján lekérdezhető az adott pontban a felszín magassága. A gép pozíciója és a mért magasságadat alapján meghatározhatjuk, hogy a műszer által kibocsátott rádióhullám honnan verődik vissza. Ebben a pontban lekérdezve a magasságadatot, korrigálni tudjuk az 𝑚 mért adatból számolt ℎ tényleges magasságot. Ha az adott pontban a földfelszín magasságát ℎ𝐴 -val jelöljük, akkor a korrigált magasságadat: ℎ = 𝑚 ∙ cos(𝑝𝑖𝑡𝑐ℎ) ∙ cos(𝑟𝑜𝑙𝑙) + ℎ𝐴
24
Azonban ha azt is figyelembe vesszük, hogy akár a gép alatt is lehet valamilyen domborzati kiemelkedés, akkor tovább korrigálandó ez a ℎ magasság. Ha ebben a pontban a földfelszín magassága ℎ𝐵 , akkor a magasságadat: ℎ = 𝑚 ∙ cos(𝑝𝑖𝑡𝑐ℎ) ∙ cos(𝑟𝑜𝑙𝑙) + ℎ𝐴 − ℎ𝐵 Egy ilyen adatbázis tárolása, és az adatok hozzáférési idejének minimalizálása olyan erőforrásokat igényelne, amelyek mikrokontrollerekkel nem biztosíthatók. Esetleg FPGA-k (Field Programmable Gate Array) használatával már megoldható lenne a feladat, amennyiben rendelkeznénk az ismertetett adatbázissal. A dolgozatban ennek implementálására nem kerül sor, de hasonló korrekciós módszer felhasználásra került a GPS adatok pontosításánál, ezt a későbbiekben részletezem. Mindaddig, amíg nincsenek ilyen megoldások, a rádiós magasságmérés akkor biztosít pontos adatokat, amikor a gép a kifutópálya felett száll. Fontos hangsúlyozni azt, hogy a sávszélesség függvényében a mérési adatok tovább pontosíthatók, így kisrepülők esetén egészen pontos, akár centiméteres pontossággal is számolhatunk.
3-19. ábra: Rádiós altiméterek blokkvázlata
Az esetünkben 200MHz sávszélességű pásztázó jel egy nagy frekvenciákat előállító VCO-ra (Voltage Controlled Oscillator) jut, ami esetleges további erősítésen keresztül táplálja meg az adóantennát. Ezt a nagy frekvenciájú jelet egy keverőre is kicsatoljuk még az eszközön belül. A vett és az adott jel keverése után egy aluláteresztő szűrő gondoskodik arról, hogy ténylegesen frekvenciakülönbséget kapjunk feldolgozandó jelként. Ezt a jelet egy mikrokontroller Analog-Digital átalakító perifériájára vezetve már könnyen feldolgozhatóvá tudjuk tenni a kontroller számára.
25
3.3 Barometrikus magasságmérés A barometrikus magasságmérés alapelve, hogy a légköri nyomás a magasság függvényében változik, annak növekedésével a nyomás egyre kisebb lesz. A 3-20. ábra szemlélteti a légköri nyomás nagyságát a magasság függvényében. Látható, hogy kb. 10km-es magasságig a karakterisztika viszonylag meredek, így az esetleges mérési pontatlanságokat
figyelembe véve, ezen a
tartományon viszonylag precízen
meghatározható a magasság. Az utasszállító repülőgépek 10-12 km magasan repülnek, így abba a tartományba esnek, ahol ez a módszer biztonsággal alkalmazható. Bár a nyomás alapú magasságmérés nem biztosít egzakt mérési eredményeket, a gépek irányítására jól használható. A nyomás lényegesen változhat légköri jelenségek (frontok, szelek), illetve a hőmérséklet függvényében. Mivel az egymáshoz közeli gépek ugyanolyan légköri körülményeket érzékelnek, ezáltal mindegyik gépnél ugyanolyan irányba és ugyanolyan mértékben tolódnak el az eredmények. Tehát ha az egyik pilótának a 32000 lábas (10 km) magasságot kell tartania, a másiknak pedig 35000 lábon (11km) kell repülnie, akkor elképzelhető, hogy valójában 34000 és 37000 lábon repülnek, ez mégsem okoz köztük repülési konfliktust.
3-20. ábra: A légköri nyomás a magasság függvényében [11]
26
A magasságot a nyomásadatokból meghatározó formula: −𝑅∙𝐿0
𝑇0 𝑃 𝑔0 ∙𝑀 ℎ = ℎ0 + ∙ [( ) − 1] , 𝐿0 𝑃0 ahol
𝑃0 = tengerszinten mérhető nyomás [Pa] 𝑇0 = tengerszinten mérhető hőmérséklet [K] 𝐿0 = hőmérsékletváltozás méterenként: -0.0065[K/m] ℎ = tengerszint feletti magasság [m] ℎ0 = a felszín magassága [m] 𝑁∙𝑚
𝑅 = az egyetemes gázállandó: 8,31432[𝑚𝑜𝑙∙𝐾] 𝑚
𝑔 = gravitációs gyorsulás 9,80665[𝑠2 ] 𝑘𝑔
𝑀 = a légkör moláris tömege: 0,0289644[𝑚𝑜𝑙] A barometrikus szenzorok a nemzetközi barometrikus formulát, az előbb bemutatottnál sokkal egyszerűbb számítási lehetőséget használnak. Ennél a módszernél már csak két változó, a ténylegesen mért nyomás, és a tengerszinten mérhető nyomás határozza meg a magasságot. A tengerszinten mérhető nyomás pontos beállításával kalibrálható a mérés. 1
𝑃 5,255 ℎ = 44330 ∙ (1 − ( ) ) 𝑃0 A képlet alapján így 1hPa nyomásváltozás 8,43 méteres magasságváltozásnak felel meg a tengerszinten. Nagyobb magasságokban ugyanekkora nyomásváltozás nagyobb szintkülönbséget jelent a karakterisztika jellege miatt. A repülés története során nagy szerep jutott a barometrikus elvű magasságmérésnek, még napjainkban is találkozhatunk ilyen eszközökkel a gépek műszerfalán. Ezeket a műszereket manapság inkább csak veszélyhelyzetben alkalmazzák, illetve a többi, pontosabb műszer ellenőrzésére használják. Ugyanakkor nagyon fontos, hogy ilyen autonóm műszerek is elérhetőek legyenek a repüléskor, mivel bár az Amerikai Kormány ígérete szerint nem korlátozzák a GPS teljesítményét, és elérhetőségét, erre nem alapozható több százezer emberélet. Könnyen elképzelhető olyan nemzetközi konfliktus, mely a GPS rendszer kieséséhez vezet, ez pedig megengedhetetlen következményeket vonna maga után, ha nem lenne biztosított autonóm alternatíva a gépek fedélzetén.
27
3.4 Elvárt pontosság Kereskedelmi repülőgépek esetén a légiforgalmi irányító segít a pilótáknak a balesetmentes repülés biztosításában. A repülőknek a légtérben bizonyos szabályoknak megfelelő távolságokat kell tartaniuk egymástól [12]. A szabályok nem teljesülését konfliktus szituációnak nevezzük, mely két következménnyel járhat. A repülőgépek egyrészt összeütközhetnek, másrészt balesethez vezető turbulenciát okozhatnak környezetükben. A hatóságok a repülési biztonság érdekében pontosan meghatározott szabályokat fektetnek le, melyet a légiforgalmi irányítóknak és a pilótáknak követniük kell. A repülőgépek a rájuk vonatkozó szabályok alapján három csoportba sorolhatók. A kereskedelmi és utasszállító repülőgépek a korlátozott látási viszonyok miatt kivétel nélkül az Instrument Flight Rules (IFR) kategóriába esnek. A kisebb repülőgépek olyan látási viszonyok között repülnek, ahol manuálisan elkerülhető az ütközés, így a Visual Flight Rules (VFR) kategóriába sorolhatók. Bizonyos speciális esetekben a repülők a Special Visual Flight Rules (SVFR) szerint repülhetnek. Bár számunkra kifejezetten a vertikális elkülönítési szabályok relevánsak, fontos megemlíteni, hogy még az azonos irányban repülő gépekre is van laterális korlátozás. Az elől haladó gép által okozott turbulencia veszélyeztetheti az őt követő gépet, így laterálisan legalább 3 mérföld (kb. 5 km) távolságot kell tartani az azonos magasságban repülő gépek között. Vertikálisan két IFR gép között legalább 1000 láb (kb. 300 méter), VFR gépek között pedig legalább 500 láb (kb. 150 méter) távolságot kell tartani. Látható, hogy a GPS esetében megfigyelt pontatlanság valamilyen pontosító módszert felhasználva tökéletesen biztosítja a biztonságos repülést, utazás közben a személyszállító repülők robotpilótái is ezek alapján irányítják a gépet. Ilyenkor a domborzathoz viszonyító módszerek (pl. rádiós vagy lézeres altiméter) elviekben sem használhatók, azok sok esetben katasztrófákhoz vezetnének. Ekkor ugyanis a domborzathoz kéne viszonyítani a repülési szinteket, ami a domborzat gyors változása miatt 500-600 mérföld/óra repülési sebességnél követhetetlen lenne a nagytestű repülőgépekkel. Továbbá a rádiós elvű magasságmérés csak bizonyos magasságig alkalmazható, 25005000 láb (760-1500m) felett a jel már túl gyenge és megbízhatatlan ahhoz, hogy alkalmazható legyen pozícionálásra.
28
Leszállásnál ugyanakkor már nem megfelelőek a GPS által biztosított adatok. Egyrészt a GPS ofszetje miatt, hiszen a felszín magassága többnyire nem egyezik meg a tengerszinttel, másrészt a magasságadatok pontatlansága miatt. Bár leszálláskor többnyire megfelelőek a látási viszonyok, csupán érzékelésre nem lehet alapozni, a pilótának még tökéletes látási viszonyok esetén is nagyjából tisztában kell lennie a magassággal. Így kritikus repülési szakaszoknál (leszállás és felszállás), sokkal pontosabb módszereket kell alkalmaznunk. A síkfelületű leszállópálya esetén a rádiós altiméter különlegesen pontos adatokat szolgáltathat, melyekkel akár a teljesen automatizált leszállás is megoldható. A landolásnál nem csak a balesetek elkerülése végett, de az utazási élmény megteremtése és a futómű gumikopásának minimalizálása miatt is különösen fontos a magasság lehető legpontosabb monitorozása. A pilóta nélküli kisrepülők esetén is hasonló lehet a mérési elv választása az egyes repülési szakaszokban. Repülés közben a GPS által biztosított adatok elegendőek lehetnek, de landoláskor az UAV-k esetén különösen kritikus a magasság ismerete. A kis tömegű, aránylag kis sebességű gépek a földet éréskor sokkal sérülékenyebbek, és sokkal precízebb vezérlést igényelnek, mint a nagytestű személyszállítók. Összefoglalva, a személyszállító repülőgépek a különböző repülési fázisokban és eltérő magasságokban más-más magasságmérési módszert alkalmaznak. Ezek a megoldások UAV-k esetén is követendőek lehetnek, bár ebben az esetben nagyobb szerep juthat a rádiós altiméternek az alacsony repülési magasságok miatt.
29
4. Felhasznált eszközök Az elméleti összefoglalóban ismertetett módszerek teszteléséhez mindenképpen szükséges egy GPS vevő, egy giroszkóp, egy rádiós altiméter és egy barometrikus magasságmérő modul. Ahhoz, hogy ezeket kezeljük, szükségünk lesz valamilyen központi, számítási kapacitással, és irányítási lehetőségekkel bíró modulra. Továbbá az eszközöket egymással össze kell kötnünk, melyre USB elosztót, és soros-USB átalakítót használok. Az egész rendszer tápellátását, a különböző feszültségszintek megteremtését is biztosítani kell. Erre a feladatra egy tápegység panelt terveztem, mely egy akkumulátortól kapja az energiát, és ezt osztja tovább az egyes egységeknek.
4.1 Raspberry Pi A rendszer vezérlőegységének egy Raspberry Pi modult választottam a magas számítási kapacitása miatt. Bár a szenzorok kezelése nem igényel bonyolult megoldásokat, így ez nem indokolja a számítási kapacitásra való igényt, azonban az annál inkább, hogy már a tervezési fázisban felmerültek olyan igények, hogy a rendszerünk ne csak adatok lekérdezésére, hanem azok feldolgozására és kiértékelésére is képes legyen. Mivel a szenzorokat USB porton keresztül csatlakoztatjuk, így elvárás az is, hogy a kommunikációt a modul nagy sebességgel tudja biztosítani, amit a Raspberry Pi kiválóan teljesít. Ezekhez az igényekhez jól igazodik egy olyan egység, mely önálló operációs rendszerrel rendelkezik, és teljes értékű grafikus kezelőfelületet biztosít. A modul előnye továbbá az is, hogy kis feszültségről, akár USB portról is megtáplálható, és közvetlenül csatlakoztatható hozzá billentyűzet, egér, pendrive vagy bármilyen USB interfésszel rendelkező eszköz.
30
4-1. ábra: A Raspberry Pi B modell
A fejlesztőpanel rengeteg perifériája közül a munkám során az USB és Ethernet portokat, a tüskesor I2C kimeneteit, a HDMI csatlakozót és a tápellátást biztosító micro USB csatlakozót használtam fel. Az USB perifériához elosztón keresztül egeret, billentyűzetet, pendrive-ot és WiFi adaptert is csatlakoztattam. Az eszközön egy Debian alapú operációs rendszer, a Raspbian fut. A gyártó a Python nyelven történő fejlesztéshez biztosít széleskörű támogatást, így a programozáshoz ezt a nyelvet használtam.
4.2 GPS modul
4-2. ábra: u-blox TIM-5H GPS vevő modul
A kiválasztott GPS modul, az u-blox cég TIM-5H eszköze, GALILEO kompatibilis, így az európai helymeghatározó rendszer üzembehozatalakor még pontosabb adatok 31
szolgáltatására lesz képes. 2,7-3,6V közötti feszültségszintekről táplálható, áramfelvétele a kiválasztott működési módtól függően 30-45mA. A modullal UART-on keresztül, NMEA (National Marine Electronics Association) illetve UBX protokollokat használva tudunk kommunikálni. Az NMEA üzenetek ASCII karakterekre specifikáltak, míg az UBX protokoll bináris elvű. A programozáshoz a gyártó által specifikált UBX üzeneteket kell használnunk, így határozhatjuk meg, hogy a továbbiakban UBX vagy NMEA üzeneteket kívánunk kapni az eszköztől, illetve hogy milyen gyakran küldje azokat. A GPS vevő által soros porton küldött üzenetekként az NMEA adatcsomagokat választottam, mivel ezek az üzenetek széleskörűen ismertek, a haditengerészet is ezek alapján kommunikál, illetve sokkal jobban átláthatóak, és kezelhetőbbek, mint az UBX protokoll üzenetei.
4-3. ábra: NMEA üzenettípusok [13]
4.2.1 Felhasznált NMEA üzenetek Alapvető elvárás az, hogy konkrét időpillanathoz rendelve kapjuk meg a hosszúsági és szélességi koordinátákat, illetve a magasságra vonatkozó adatokat. Emellett a következtetések szempontjából az is fontos adat lehet, hogy pontosan hány műholddal tart kapcsolatot az eszköz. Működés közben a modul ciklikusan három típusú üzenetet
32
küld. Ezek az RMC (Recommended Minimum Data), GGA (Global Positioning System Fix Data), és GSV (GPS Satellites is View) üzenettípusok. Ebben a három üzenetben minden olyan információ benne van, ami a felhasználás szempontjából számunkra fontos lehet. Az RMC üzenet küldésével kezdi a modul a kommunikációt. Ebben az üzenetben dátum és időadatok, illetve a koordinátákra vonatkozó információk kerülnek küldésre. Az mv és mvE adatok a mágneses elhajlásra vonatkoznak. Bár elméletileg ezek is az üzenettípushoz tartozó adatok, a modul ezeket nem kommunikálja a külvilág felé. Mint minden NMEA üzenetnél, itt is egy 8 bites Fletcher-algoritmusra épülő ellenőrzőösszeg helyezkedik el a modul végén. A Fletcher algoritmust bemutató pszeudo kódban Buffer[N] tartalmazza az adatot, mely felett a CK_A és CK_B ellenőrzőösszeget kalkuláljuk. CK_A = 0, CK_B = 0 For (I=0; I
RMC üzenet formátum:
RMC üzenet példa:
A példában GMT 08:35:59:00 időpontban a GPS vevő a következő adatokat küldi: -
a vevő státusza aktív, érvényes adatokat küld,
-
helyzete északi szélesség 47° 17,11437’, keleti hosszúság 8° 33,91522’
-
a vevő sebessége 0,004 csomó, szöge 77,52°
-
a dátum 2002. december 9.
-
a kalkulált ellenőrző összeg 57
Az üzenetek küldése egy GGA üzenettel folytatódik. Ebben egy időbélyeg és a hosszúsági és szélességi koordinátákon kívül a látható műholdak száma (NoSV) és a tengerszint feletti magasság (msl) is szerepel.
33
GGA üzenet formátum:
GGA üzenet példa:
A példában GMT 09:27:25:00 időpontban a GPS vevő a következő adatokat küldi: -
helyzete északi szélesség 47° 17,11399’, keleti hosszúság 8° 33,91590’
-
a vevő GPS SPS (Standard Positioning Service) módban van
-
a számításokhoz felhasznált műholdak száma 8
-
a várható horizontális pozíció meghatározás pontossága 1.01 méter
-
a vevő tengerszint feletti magassága 499,6 méter
-
adott pontban a geoid eltérése az ellipszoidtól 48 méter
-
a kalkulált ellenőrző összeg 5B
A ciklikus üzenetküldés utolsó eleme a GSV típus. Ez a csomag a látható műholdakról biztosít adatokat a felhasználó számára. Az GSV üzenet meghatározza, hogy hány üzenetben fogja küldeni a műholdadatokat az eszköz (NoMsg), definiálja, hogy az aktuális üzenet hányadik üzenet ezek közül (MsgNo), illetve megadja a látható műholdak számát (NoSv). Ezután minden műholdról információt kapunk (azonosító, emelkedési szög, azimuth szög, vivő-zaj viszony). Minden GSV üzenetet ellenőrző összeg zár. GSV üzenet formátum:
GSV üzenet példa:
A látható műholdakra vonatkozó információk: -
összesen 3 GPGSV üzenetet fog küldeni a GPS vevő, 10 műholdat észlel,
-
az első üzenetben jelzi, hogy ez az első sorszámú üzenet, a műholdakról pedig a következő információt szolgáltatja: o a 23-as számú műhold emelkedési szöge 38°, azimuth szöge 230°, a vivő és zaj viszonya 44dBHz
34
o a 29-as számú műhold emelkedési szöge 71°, azimuth szöge 156°, a vivő és zaj viszonya 47dBHz o a 7-as számú műhold emelkedési szöge 29°, azimuth szöge 116°, a vivő és zaj viszonya 41dBHz o a 8-as számú műhold emelkedési szöge 9°, azimuth szöge 81°, a vivő és zaj viszonya 36dBHz o az ellenőrző összeg 7F -
a többi GSV üzenet is ugyanilyen formátumban épül fel
A GPS modul az inicializáló beállítások után 0,25 másodpercenként küldi az előzőekben ismertetett ciklikus üzeneteket. A soros kommunikáció sebessége 38400 baud.
4.3 Barometrikus magasságmérő modul
4-4. ábra: Bosch BMP 085 barometrikus magasságmérő modul fejlesztőpanelen
A BMP085 magasságmérő modul[14] hőmérsékletet és nyomást mér, majd ezeket a mért értékeket a kalibrációs táblázata alapján korrigálja. A korrekció által ±2,5hPa illetve ±2°C pontossággal biztosít nyomás és hőmérséklet adatokat. Az így megkapott adatok alapján a tengerszint feletti magasság a már ismertetett nemzetközi magasságformula alapján adható meg. Tekintsük át részletesebben, hogy hogyan történnek ezek a számítások. A folyamatábra (4-5. ábra) ismerteti az egyes lépéseket, melyek közül talán a legfontosabb felismerés az, hogy a számítások meglehetősen bonyolultak, és csak hőmérséklet és nyomás mérésére szorítkoznak. Mindenképpen érdemes tehát valamilyen magasabb szintű nyelven implementálni a feldolgozást, célszerűen Pythonban, hogy a lekérdező szoftver egyben a kalkulációs feladatokat is elvégezze.
35
4-5. ábra: A BMP085 modul lekérdezésének folyamata
A modult kedvező ára miatt sokan választják, így nyílt forráskódú támogatás is található hozzá. Az Adafruit által közzétett függvénykönyvtár [15] végigkövethetően ugyanazokat a kalkulációkat végzi, mint amit a 4-5. ábra is mutat. Így ezeket a függvényeket felhasználva sokkal egyszerűbbé tehető a fejlesztés. A modul importálása, és a szenzor példányosítása után már csak a szenzor által mért adatokat kell lekérdeznünk, amit az alábbiakban bemutatott egyszerű formátumban tehetünk meg.
36
#BMP barometric sensor import import Adafruit_BMP.BMP085 as BMP085 #instantiating a new barometric sensor device bar_sensor = BMP085.BMP085() temp = bar_sensor.read_temperature() pressure = bar_sensor.read_pressure() altitude = bar_sensor.read_altitude()
4.4 Rádiós altiméter Az altiméter a külvilággal soros porton keresztül kommunikál, 115000-es baud rate-et használva. Az egység által küldött üzenetek magasságadatokat és hibaüzeneteket tartalmaznak.
4.4.1 Státusz információk #MONI xx\r\n Paraméterek: xx: állapotleíró bájt hexadecimális számként 0
1
bit 0
Tápfeszültség OK
Tápfeszültség túl magas
bit 1
Tápfeszültség OK
Tápfeszültség túl alacsony
bit 2
Kimeneti RF jelszint OK
Kimeneti RF jelszint túl alacsony
bit 3
PLL zárva
PLL nyitva
bit 4
Főegységek hőmérséklete OK
Főegységes hőmérséklete magas
4.4.2 Magasságinformációk
#ALT xxxx.x ERR yy\r\n Paraméterek: xxxx.x:
az egység által mért magasság méterben mérve
yy:
Hibakód (00: hibátlan működés; 01: hiba, megbízhatatlan magasságérték)
37
4.5 Giroszkóp Az alkalmazott modul egy AHRS (Attitude Heading Reference System) eszköz, mely MEMS (MicroElectroMechanical Sensor) technológiával működik. Az integrált háromtengelyű gyorsulásmérő, giroszkóp, és magnetométer méri azokat az adatokat, melyek alapján egy beépített processzor bonyolult összesítő algoritmusokkal irányítottságot, illetve inerciális információkat generál.
4-6. ábra: MicroStrain 3DM-GX3-25 giroszkóp
A rengeteg biztosított adatból számunkra az elméleti összefoglalóban ismertetett dőlési szögek lényegesek. Az Euler szögek (Roll, Pitch, Yaw) lekérdezésére a modul külön parancsot biztosít. Ezt az eszközt nem ütemezett adatküldésre állítjuk be, hanem mindig a felhasználónak kell lekérdeznie az adatokat, amikor szüksége van arra. Tehát a számunkra érdekes adatok a modultól egy általunk kiadott konkrét parancs válaszüzeneteként
érkeznek.
A
modullal
három
üzenettípust
felhasználva
kommunikálunk. Először a mérésadatgyűjtés kezdetekor ellenőrizzük, hogy jelen van, működőképes, és lehet vele kommunikálni. Ezután beállítjuk, hogy a modul az adatokat lekérdezési üzenet hatására küldje, majd pedig a mérés folyamán az Euler szögadatokat kérdezzük le.
4-7. ábra: AZ üzenetek általános felépítése
38
Ellenőrző megszólítás A modul ellenőrző megszólítása egy külön üzenettípussal történik. Ez nem tartalmaz semmilyen paramétert, mivel csak az eszköz jelenlétét, és annak válaszoló képességét ellenőrzi.
4-8. ábra: Ellenőrző megszólítás üzenet
A válaszüzenet a lekérdezett üzenet kódját (0x01), illetve hibátlan működés esetén a 0x00 hibakódot tartalmazza. Ha nem kapjuk meg ezt az üzenetet, akkor nem működik jól a rendszer, a legtöbb esetben a kommunikációs kapcsolat kialakításával van probléma. A modul jelenlétét és válaszoló képességét csak az inicializáláskor ellenőrzöm, a későbbiekben működőképesnek tekintem az eszközt.
4-9. ábra: Ellenőrző megszólítás válasz
Lekérdezéses kommunikáció beállítása Az inicializálás során letiltjuk a folyamatos üzenetküldést, ezzel biztosítva a lekérdezéses információszerzés lehetőségét.
4-10. ábra: Lekérdezéses kommunikációt beállító parancs
Euler szögek lekérdezése Bármilyen adat lekérdezéséhez a „Poll IMU/AHRS Data (0x0C, 0x01)” üzenetet kell küldenünk, az adatmezőben megadva a lekérdezni kívánt adatstruktúrákat. Az Euler 39
szögeket tartalmazó adatstruktúra kódja 0x0C. Mivel külön utasítással nem állítjuk be, hogy pontosan milyen formátumban kívánjuk megkapni az üzeneteket, így az említett Poll üzenetnél a specifikus formátummegadást kell választanunk.
4-11. ábra: Adatlekérdező üzenet felépítése
Az üzenet a szinkronizáló karakterek (0x75, 0x65) után az üzenettípust és a hasznos üzenet hosszát (bájtokban) tartalmazza. Mivel esetünkben csak egy adatot kérdezünk le, így a hasznos üzenet hossza a 4 + 3 ∗ 𝑁 képlet alapján 7 bájt. A tényleges utasításmezőben megadjuk a mező hosszát, ami szintén 7 bájt, a mező típusát, majd kiválasztjuk, hogy szeretnénk nyugtázó üzenetet kapni. Megadjuk, hogy egyetlen leírót (Euler szögek) kérdezünk le, melynek 0x0C a kódja, majd biztosítjuk a fenntartott 0x0000 karaktereket. Ezután ellenőrző összeget kalkulálunk a két bájtos Fletcher algoritmus alapján.
40
A Fletcher algoritmus Pythonban a konkrét adatsorra alkalmazva: cka=0 ckb=0 data= [0x75, 0x65, 0x0c, 0x07, 0x07, 0x01, 0x00, 0x01, 0x0c, 0x00, 0x00] for i in data: cka = cka + i ckb = ckb + cka cka = cka & 0xff ckb = ckb & 0xff print cka print ckb
A program által biztosított ellenőrzőkaraktereket beillesztve az adatsorba, a kiküldendő vezérlőüzenet: command = [0x75,0x65,0x0c,0x07,0x07,0x01,0x00,0x01,0x0c,0x00,0x00,0x02,0xfc]
A válaszüzenetként kapott karaktereket a 4-12. ábra alapján kell értelmeznünk. A roll, pitch és yaw adatok a hasznos üzenetben 4-4 bájt hosszúságú helyet használnak, és az IEEE-754 szabvány szerint értelmezett lebegőpontos számok.
4-12. ábra: Az Euler szögeket tartalmazó üzenet formátuma
4.6 Soros – USB átalakító Szintén a cég saját fejlesztése egy több soros bemenetű, mini-USB kimenetű átalakító. Ez az eszköz végzi a szenzormodulok kezelését, így lehetővé téve azok csatlakoztatását a Raspberry Pi modulhoz. A Raspberry pi ezt az átalakítót egy eszköznek látja, és a
41
csatlakoztatott modulokat az eszköz interfészeiként érzékeli. Így a modulok kezelése során is interfészekként kell gondolnunk azokra.
4.7 Tápellátást biztosító panel A mérési összeállítás tápellátásának biztosítására egy tápegység panelt terveztem. Bár a fejlesztés során labortápot
használtam
az
egyes
egységek tápfeszültségének
biztosításához, a repülőgépen végzett mérések esetén ez a megoldás nem kivitelezhető. A panel feladata az altiméter számára szükséges 24V továbbosztása 5V-os és 3,3V-os feszültségszintekre. Az altimétert és a tápegység panelt akkumulátorról tápláljuk meg, az 5V-os feszültségszint a Raspberry Pi illetve az AHRS modul, a 3,3V-os feszültségszint pedig a GPS modul táplálásához szükséges.
4-13. ábra: A tápellátást biztosító panel kapcsolási rajza
A panel bemeneti tápellátását egy sorkapcson keresztül csatlakoztathatjuk, a kimenő feszültségek pedig MICS csatlakozókon keresztül jutnak el az egyes szenzoregységekig. A beérkező 24V-os feszültség egy 1,5A-es biztosítón keresztül jut el az SM5819 típusú egyenirányító Schottky diódára, amely a fordított polaritású bekötés ellen véd. Az 5V-os feszültségszint előállítását az LM2576 típusú kapcsolóüzemű táp végzi. Az SMBJ16A szupresszor dióda a negatív impulzusok ellen nyújt védelmet. Az 5V-os feszültségszintet közvetlenül az LM2576 típusú kapcsolóüzemű tápegység állítja elő, a körülötte elhelyezkedő alkatrészek az IC ajánlott kapcsolásának megfelelően
42
kerültek elhelyezésre. Az IC az Out lábán az R1 és R2 ellenállások értékétől függő feszültségszintet állít elő. 𝑅2 𝑉𝑜𝑢𝑡 = ( + 1) 𝑉𝑟𝑒𝑓 , 𝑅1
𝑉𝑟𝑒𝑓 = 1,23𝑉
A 3,3V a már előállított 5V-os feszültségszintről kerül leosztásra, melyet az LM317 feszültségszabályozó állít elő a kimenetén elhelyezett ellenállásértékeknek megfelelően. Az LM317 az Out kimeneten mindig akkora feszültséget állít elő, hogy az Adjust és Out lábak között állandó 1,25V feszültség legyen. A kapcsolási rajzon R3-mal és R4-gyel jelölt ellenállások értékeinek kiválasztásával tudjuk beállítani az Out lábon megjelelő potenciált.
4-14. ábra: A tápellátást biztosító panel nyomtatott huzalozású terve
43
A nyomtatott huzalozású lemez tervezésekor a csatlakozókat úgy helyeztem el, hogy a kábelek könnyen csatlakoztathatók legyenek a lemezhez. A csatlakozótípusok kiválasztásakor fontos szempont volt, hogy azok megfelelő rögzítést biztosítsanak, nem megengedhető ugyanis, hogy a repülés közbeni rázkódások miatt megszűnjön a kapcsolat a tápegység és a többi eszköz között. Külön figyeltem arra, hogy az LM2576-os kapcsolóüzemű táp hőelvezetést szolgáló nagyméretű GND lába a lehető legnagyobb földfelülettel érintkezzen, ezzel megelőzve az IC túlmelegedését. A panelen négy furatot is elhelyeztem, hogy a repülés közben biztosítva legyen a panel rögzítése.
44
5. Szoftverrendszer A szoftveres megvalósítás legalapvetőbb eleme a szenzorok lekérdezése, és az így megszerzett adatok előre meghatározott formátumba való kimentése. Ezt az alapvető feladatot lényegesen kibővítjük. A repülés során gyűjtött adatok egy részét egy alkalmazással pontosabbá tesszük, majd ezeket az adatokat összevetjük a más elvű mérések
eredményeivel.
Ezáltal
egy
olyan
adathalmazhoz
jutunk,
melyből
következtetéseket tudunk levonni arra vonatkozólag, hogy az egyes mérési módszerek milyen körülmények között használhatók, mennyire pontosak, és így melyik repülési fázisban előnyös a használatuk.
5.1 Mérésadatgyűjtő szoftver Az eszközök működését először a screen programon keresztül ellenőriztem. A screen lényegében egy soros kommunikációt monitorozó program, mely sokat segített a fejlesztés során a hibák detektálásában. Volt olyan eszköz, melyhez nem volt elérhető dokumentáció, így ezzel a programmal határoztam meg a kommunikáció baud rate-jét. Az adatgyűjtő szoftver egy Python script, mely a Raspberry Pi-n futtatható. A nyelvvel való megismerkedés utáni első feladat az eszközök felismerése és kategorizálása volt. Mivel a Raspberry Pi-hez szinte minden perifériát USB interfészen keresztül csatlakoztatunk, így nem egyértelmű, hogy pontosan melyik USB eszköz az a soros konverter, melyhez az eszközeink kapcsolódnak. Minden USB eszköz tartalmaz valamilyen információt arról, hogy milyen típusú eszköz, melyik gyártó terméke, és milyen azonosítókkal hivatkozhatunk rá. Az eszközöknél négy attribútumot (bDeviceClass, bInterfaceClass, idVendor, idProduct) használok fel a csoportokba soroláskor és az átalakító azonosításakor. A bDeviceClass és bInterfaceClass az eszköz típusáról szolgáltat információt. Ez a két elnevezés ugyanazt a tulajdonságot takarja, de bizonyos eszközöknél csak az egyik attribútum tartalmazza a típusazonosítót, így a biztos besorolás érdekében a bDeviceClass és a bInterfaceClass attribútumokat is ellenőriznünk kell. A program az 5-1.ábrán ismertetett azonosítók alapján sorolja a megfelelő csoportokba az eszközöket.
45
Azonosító
Típus
0x02
WiFi és egyéb adapterek
0x03
HID eszközök (Human Interface Devices)
0x08
Adattároló eszközök (Mass Storage)
0x09
Hub eszközök 5-1. ábra: Az eszközcsoportok azonosítói
Minden csoporthoz hozzárendeljük a megfelelő eszközöket, ami pedig nem fedhető le az ismertetett kategóriákkal, azt egy sensor[] tömbbe helyezzük el. A sensor[] tömbben az alapvető eszközök csatlakoztatása esetén ekkor két eszközt találunk. Az egyik a Raspberry Pi egy integrált USB eleme, a másik pedig az átalakító. Annak érdekében, hogy minden esetben sensor[0]-lal tudjunk hivatkozni az átalakítóra, a sensor[] tömbből az integrált USB eszközt törölni kell. Az idVendor és idProduct attribútumok alapján az integrált eszközt azonosítani tudjuk. A sensor tömb nulladik elemére innentől converter néven hivatkozunk. A converter eléréséhez szükséges a Raspberry Pi soros portjainak inicializálása is, melyet a serial könyvtár importálása után egy egyszerű paranccsal megtehetünk. A függvény első paramétere jelöli ki a megfelelő soros portot, a második pedig a baud rate-et adja meg. port_gps = serial.Serial("/dev/ttyUSB0", 38400) port_alt = serial.Serial('/dev/ttyUSB1', 115200) port_rad = serial.Serial('/dev/ttyUSB2', 115200)
A converter interfészeinek eléréséhez továbbá az is szükséges, hogy a Python scriptünk jogosult legyen az eszköz vezérlésére. Ennek érdekében először az összes interfész irányítását átadjuk a kernelnek, hiszen nem tudhatjuk, hogy előtte lefoglalta-e már valamely modul az eszközöket. Majd miután a kernel átvette az irányítást, tőle vesszük el a vezérlés jogát, és adjuk át a programunknak. #giving back control to kernel try: converter.attach_kernel_driver(0) except: True #taking over control from kernel try: converter.detach_kernel_driver(0) except: True
46
A modulok elérése a converter változó aktív beállításainak lekérdezése után az egyes interfészek megjelölésével történik. cfg = converter.get_active_configuration() endpoint_GPS = cfg[(0,0)][0]
A GPS modul elérése és lekérdezése az első feladatunk, hiszen csak ez a modul biztosít pontos információt a tényleges időről. A modultól kapott üzeneteket feldolgozva kinyerhetjük az időinformációt, melyet a későbbiekben az időbélyegek előállítására használunk. Mivel a különböző magasságmérő modulok által mért adatokat külön fájlokban tároljuk, így nem megengedhető az, hogy minden mentéskor külön lekérdezzük a GPS időadatát, hiszen ez hosszú ideig eltarthat, és esetleges adatinkonzisztenciával járhat. Ezért a GPS időt egyetlen alkalommal, külön függvényben kérdezzük le. Az így megszerzett információ alapján beállítjuk a Raspberry Pi operációs rendszerének óráját, és a továbbiakban az adatok kimentésekor már ezt a rendszeridőt párosítjuk a mért értékekkel. Ezáltal minden adat a GMT időzónához van viszonyítva, nem vesszük figyelembe a helyi időzónákat. A rendszeridő beállítása után a mérőeszközök inicializálása, majd a megfelelő naplófájlok létrehozása történik meg. Mivel célszerű úgy beállítani a naplófájlok elhelyezkedését, hogy azok könnyen elérhetőek legyenek, így rögtön egy adathordozóra mentem ki azokat. A fájlok elnevezésében a létrehozó eszköz azonosítója (GPS, GYR, ALT, BAR) és a mérés kezdeti időpontja szerepel. Az ALT_data_save(), GPS_data_save(), RAD_data_save() és BAR_data_save() függvények végzik az adatok lekérdezését az egyes egységektől, illetve mentik ki a megszerzett adatokat a naplófájlokba. A GPS modultól egy lekérdezés során pontosan 512 bájt adatot kapunk, melyből az első két bájt bevezető karakter. Tehát 510 hasznos bájtot olvasunk be minden alkalommal. 510
Ahhoz, hogy ne vesszenek el karakterek, 38400bps küldési sebességnél 𝑡 = 38400 = 0,01328125𝑠 gyakorisággal kell kiolvasnunk az újabb adatcsomagot. Az ütemezett lekérdezést a sched könyvtár importálásával tehetjük lehetővé. A kódban s1 néven hozzuk létre az ütemezőt. Az ütemező tagfüggvénye az enter függvény, mely az ütemezőt inicializálja az elvégzendő feladatokkal. A függvény argumentumait egy példán szemléltetve ismertetem.
47
s1.enter(3.15, 1, RAD_data_save, (endpoint_RAD_IN, data_RAD, s1,))
Késleltetés (s) – A példában az ütemező indulása után 3,15s-mal hívja meg a RAD_data_save() függvényt.
Prioritás – 1 a legnagyobb prioritású
Meghívandó függvény – A rádiós altiméter adatait kezelő függvény.
A meghíváshoz használt paraméterlista – A kimenő kommunikációhoz használt port, a naplófájl neve, illetve az ütemezőre visszamutató kötelező paraméter.
Az ütemező futása a run() tagfüggvénnyel indítható. Az ismertetett ütemező pontosan egyszer fut le, így ha azt szeretnénk, hogy az eszközök lekérdezése folyamatos legyen, a kezelőfüggvényekben az ütemezőbe újra és újra be kell tölteni a meghívandó függvényt. Ezáltal folyamatossá tesszük az ütemező futását, és így a lekérdezés és adatmentés folyamatát is. def RAD_data_save(endpoint_in, file, sc): sc.enter(0.1, 1, RAD_data_save, (endpoint_in, file, sc,))
A naplózás során érdemes arra is figyelmet fordítanunk, hogy megfelelően kezeljük a sorok lezárását. Mivel az adatokat hordozható adattárolóra mentem, így többnyire Windows alapú rendszereken kerülnek kiértékelésre a Raspbian környezetben rögzített adatok. A Unix típusú és a Windows alapú rendszerek a sorvégződéseket nem egyformán kezelik. Unix típusú rendszereknél az LF (Line Feed) önmagában új sor kezdetét jelöli, míg Windows esetén a CR és LF (Carriage Return, Line Feed) kombinációjaként érjük el ugyanezt az eredményt. Tehát ahhoz, hogy Windows alapú rendszereken is jól áttekinthetőek, és könnyen feldolgozhatóak legyenek a naplózott adatok, a szövegfájlokba való íráskor „\r\n” karaktereket használtam a sorok elválasztására.
5.2 Adatok finomítását végző szoftver A Google Maps biztosít olyan alkalmazás fejlesztői interfészt (a továbbiakban API, Application Programming Interface), mely lehetővé teszi a Google Maps adatbázis felhasználását és grafikus megjelenítését weboldalakba integrálva. A legtöbb esetben bizonyos cégek, vagy egyéb létesítmények elhelyezkedésének bemutatására használják fel, azonban az API ennél jóval szerteágazóbb funkciók implementálására biztosít lehetőséget.
48
A GPS koordináták ismeretében kijelölhető egy útvonal, ezen az útvonalon pedig lekérdezhető a domborzat tengerszint feletti magassága. Ez a megoldás számunkra egy jól kiaknázható lehetőséget biztosít. A GPS vevő által mért magasságadatok egyik nagy hátránya az, hogy azok az idealizált forgási ellipszoidhoz viszonyítottak. A forgási ellipszoid és a geoid két eltérő fogalom. A forgási ellipszoid egy tengelye körül megforgatott ellipszis, míg a geoidot a Föld középtengerszintje határozza meg. A geoid formáját többek között a bolygó tömegeloszlása határozza meg, így az semmiképp sem modellezhető egy forgási ellipszoiddal. A GPS vevők az ellipszoiddal könnyen tudnak kalkulálni, a földi tájékozódáshoz viszont sokkal hasznosabb a geoidhoz való igazodás, hiszen a tengerek szintje jó viszonyítási alapot adhat. Az eltérő referencia szintek a GPS adatokkal kiküszöbölésre kerülnek, mivel a megfelelő szélességi és hosszúsági koordináták és egy adatbázis alapján a GPS korrekciót végez. Így az üzenetekből az ellipszoidra és a geoidra vonatkozó magasságadatokat is ki tudjuk nyerni.
5-2. ábra: Különböző magasságfogalmak[16]
Az 5-2. ábrán a GPS vevő egy hegyen helyezkedik el. A célunk a repülős felhasználás során az lenne, hogy bár jelentősen tengerszint felett vagyunk, a módosított GPS adataink közel zérus értéket mutassanak, hiszen a vevő a földfelszínen van. A Google Maps API JavaScript nyelven biztosítja a kiszolgáló függvényeket. Annak érdekében, hogy elérhessük a függvénykönyvtár funkcióit, regisztrálni kell a Google rendszerében egy egyéni Google Maps API azonosítóért. A szolgáltatás a kapott link forráskódba való integrálásával érhető el, és egy bizonyos napi megtekintési limitig díjkötelezettség
nélkül
használható.
A
JavaScript
scriptre
mindenképpen az oldal fejlécében (header) kell elhelyeznünk.
49
vonatkozó
linket
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=A...">
A weblap betöltésekor lehetőségünk van kiválasztani azt a GPS naplófájlt, amely adatait pontosítani kívánjuk. A fájl kiválasztása után megjelenik a térképen a GPS által naplózott útvonal. A térkép bármely pontjára rákattintva egy szöveges ablakban megjelenik a tengerszint feletti magasság az adott pontban. Az adatok beolvasását a GPS.txt fájlból a readDataFromTxtFile() függvény végzi Ajax XMLHttpRequest lekérdezésekkel. A fájlokból a GPRMC és GPGGA üzeneteket kiolvasva feldolgozzuk az azokban szereplő dátum és pozíció információkat. Ezután a kinyert adatokat JSON formátumba konvertáljuk, és így adjuk hozzá a CoordinateArray[] tömbhöz. var text = '{"time":' + time +', "date":' + date +', "latitude":' + latitude + ', "longitude":' + longitude + ', "measured_altitude":' + 0.0 + ', "satellites_in_view":' + 0 +
', "altitude_from_ground":' + 0.0 + '}';
var newCoordinate = JSON.parse(text); CoordinateArray.push(newCoordinate);
A CoordinateArray[] tömb elemei egy adott időpontot jellemző adatok csoportja. Egy adatcsomag időt, dátumot, hosszúsági és szélességi koordinátákat, a mért magasságot, a látható műholdak számát, és a tényleges földfelszín feletti magasságot tartalmazza. Az új adatcsomag a GPRMC üzenet olvasásakor kerül inicializálásra, és hozzáadásra a CoordinateArray[] tömbhöz. Mivel a mért magasság a GPGGA típusú üzenetekből olvasható ki, ezért a már létrehozott elemet módosítjuk, amikor feldolgozzuk ezt az adatot. A földtől mért távolság pedig a földfelszín magasságának lekérdezése után kerül módosításra. Annak érdekében, hogy ezeket a későbbiekben megszerzett információkat is integrálni tudjuk az adatstruktúrába, már inicializáláskor ennek megfelelően kell létrehoznunk az adattárolókat. Az útvonal definiálásához egy új tömböt kell létrehoznunk, mely a függvénykönyvtárhoz illeszkedő formátummal rendelkezik, azaz csak szélességi és hosszúsági koordinátákat tartalmaz. A Google Maps API Polyline() függvénye ezekből a koordinátákból rajzolja ki az útvonalat. A Polyline() függvény meghívásakor beállíthatjuk a térkép megjelenését. A térkép a beállítások szerint műholdképet mutat, és zölddel jelöli az útvonalat.
50
A weboldalon a térképen megjelenített útvonalon felül négy grafikon biztosít információkat a repülési adatokra vonatkozóan. Az első ábra (5-3. ábra) a repülés során a GPS vevő által mért adatokat ábrázolja. Már ez alapján is sejteni lehet, hogy a földfelszín magassága nagyjából 800m a repülés helyszínén, hiszen az első időtartamban – amikor a gép még a földön van – ekkora tengerszint feletti magasságot jelez. Fontos megjegyezni, hogy a grafikon x tengelye nem az eltelt időt jelzi, hanem a megtett távolságot a földfelszínre vetítve. Tehát a repülőgép sebessége az ábrák alapján nem reprodukálható.
5-3. ábra: A GPS vevő által az útvonalon mért magasság
Ezen az útvonalon az ElevationService() függvény meghívásával kérdezhetjük le a domborzati viszonyokat. A függvény visszatérési értékei alapján feltöltjük a CoordinateArray[] hiányzó adatait. Az 5-4. ábra a földfelszín magasságát ábrázolja a megtett útvonalon. Jól látható, hogy várakozásainknak megfelelően a tengerszint feletti magasság 810-840m között mozog, és viszonylag sík terület felett repül a gép.
5-4. ábra: Az útvonalon a földfelszín magassága Google Maps adatok alapján
Az 5-5.ábra a földfelszín feletti repülési magasságot mutatja. Mivel a repülés kisebb testű géppel történt, így az 1500m-es maximális repülési magasság reális. A grafikonon az útvonal elején található -800m-es tüske pillanatnyi hibás működést jelez. Ha a GPS vevő nem tud értékeket kalkulálni, mert nem lát elegendő műholdat, akkor zérus magasságértéket továbbít. Ha ebből a 0m-es magasságból kivonjuk a földfelszín nagyjából 800m-es magasságát, akkor pontosan a grafikonon ábrázolt magasságértéket kapjuk. Ez a hiba nagyon jó példa arra, hogy miért kell a repülőgépek mérési rendszerébe több módszert is integrálni, és miért szükségesek kiértékelő és hibajavító algoritmusok.
51
Bár a hiba hamar helyreáll, ez csak akkor nem okoz komoly gondokat a repülésnél, ha minden hasonló hibajelenséget megfelelően kezelünk.
5-5. ábra: A földfelszín feletti repülési magasság
Az 5-6. ábra az érzékelt műholdak számát jelöli. Mivel a GPS vevő képes differenciális adatok vételére, és azok felhasználására a mérés pontosítása érdekében, így fontosnak tartottam azt is bemutatni, hogy a vett adatok differenciálisan pontosítottak-e. Ahol nem elérhetők differenciális adatok, ott a műholdak számának negált értékét ábrázoltam. A grafikon alapján kiderül, hogy ennél a repülésnél nem volt elérhető ez a funkció. Ellenben a mérés során végig nagyon sok (8-11) műhold adatait figyelembe véve kalkulálhatott a vevő, így a számítás is meglehetősen pontos lehet.
5-6. ábra: A kapcsolatban levő műholdak száma
5.3 Kiértékelő szoftver Az összegyűjtött adatok kiértékeléséhez egy felhasználói felületet hoztam létre, mely egy ábrán összegzi a különböző szenzorok adatait. A szoftvert C++ nyelven, Qt fejlesztőkörnyezet segítségével hoztam létre. A program indulásakor a File menü legördülő „Import data files” menüpontjában tudjuk kiválasztani a megjelenítendő naplófájlokat. Az adatok feldolgozása után egy ábrán jelennek meg a görbék, azonos időalappal, így az adatok kiértékelése vizuálisan is lehetővé válik. A vízszintes tengelyen az idő, a függőleges tengelyes a méterben mért magasság kerül ábrázolásra. A görbék részletesen 52
tanulmányozhatók a nagyíthatóságuknak és mozgathatóságuknak köszönhetően. Továbbá minden görbén egy, az egér mozgását követő csuszka biztosítja, hogy az azonos időpontban mért értékek vizuálisan is könnyen összekapcsolhatók legyenek. A csuszka helyzetének megfelelően a jobb oldalon a megfelelő mérési módszerekhez tartozó mérési eredmények jelennek meg. A grafikonok értelmezését az alkalmazott színkódok is elősegítik. A mérési adatokhoz tartozó időbélyeg is a jobb oldalon kerül megjelenítésre. A feldolgozás és megjelenítés után a File menüben elérhető „Save chart” menüpont kiválasztásával a grafikon aktuális képét .png formátumban menthetjük.
5-7. ábra: A felhasználói felület működés közben
53
6. Mérési adatok kiértékelése 6.1 GPS magasságadatok pontosságának értékelése A GPS magasságadatok vizsgálatának céljából a mérésadatgyűjtő rendszert egy személygépkocsiban elhelyezve, közutakon végighaladva végeztem mérést. A GPS antenna a gépkocsi tetejére volt rögzítve, így az utazás során végig 1,5 méteres magasságban volt az aszfalthoz képest. Tehát a GPS adatok korrekciója után elméletben az egész mérés során ezt az adatot kéne kapnunk. Természetesen a mérés nagyon extrém körülmények között lett kivitelezve, sűrűn beépített területen, ahol az infrastruktúra önmagában is nehezen modellezhető, így itt előreláthatólag is pontatlanabb mérési eredményekre számítottam.
6-1. ábra: A mérés során vizsgált útvonal
6-2. ábra: A GPS vevő által mért magasság
54
6-3. ábra: Tengerszint feletti magasság az útvonalon
A Google Maps segítségével elvégzett korrekció után a 6-4. ábrán látható eredményeket kaptam. Látható, hogy a mérési értékek nagy eltérést mutatnak, az elvárt 1,5 méter helyett -5 és 23 méter között helyezkednek ez az adatok. A grafikon meglepően folytonosnak tekinthető, így valószínűleg nem arról van szó, hogy az eltérés a mérési adatok szórásából következik. Sokkal valószínűbb, hogy a pontosításra felhasznált adatbázis nem biztosít olyan szintű felbontást, mely egy nagyváros sűrűn lakott, ezáltal kifejlett és folyamatosan változó infrastruktúrájú környezetében a számunkra elvárt pontosságot biztosítaná.
6-4. ábra: A pontosított magasságadatok
A 6-5. ábra a kapcsolatban levő műholdak számát mutatja. Tekintve, hogy a GPS vevő az egész mérés folyamán 5-11 műhold adatai alapján kalkulál magasságot, és a mérés nagy részében ezek differenciálisan korrigált adatok, így az adatoknak elméletben sokkal pontosabbnak kéne lenniük. Ez a mérés tehát arra mutat példát, hogy bár az adatok pontosíthatók, gyorsan változó felszín esetén ne várjunk különösen pontos magasságot.
6-5. ábra: A látható műholdak száma
55
A Google Maps alapján korrigált adatok tehát elsősorban abban segíthetnek, hogy nagyságrendileg meg tudjuk határozni a repülési magasságot a domborzat függvényében. Ha például egy 2000m magasságú fennsík felett repülünk, és köd esetén a GPS 2100m repülési magasságot mutat, akkor a korrigált GPS adatok figyelmeztethetnek arra, hogy óvatosan kell navigálnunk, és inkább a rádiós altiméterre hagyatkozzunk, mert igazából csak nagyjából 100 méterre vagyunk a felszíntől.
6.2 GPS és rádiós altiméter adatok összehasonlítása A GPS és a rádiós altiméter által mért magasságadatok összehasonlítására a létrehozott felhasználói felület biztosít lehetőséget. A 5-2. - 5-6. ábrákon bemutatott mérés során alkalmazott szenzorok mérési eredményeit értékelem ki a grafikus felület segítségével. A legszembetűnőbb eltérés a GPS adatok lényeges eltérése a többi mért értéktől. Ez az eltérés a földfelszín elhelyezkedéséből adódik, az ugyanis tengerszint felett 800 méteren helyezkedik el.
6-6. ábra: Az egész mérés során gyűjtött adatok ábrázolása
A rádiós altiméter által szolgáltatott adatok sok esetben lényegesen eltérnek a GPS adataitól. Ha tanulmányozzuk a grafikont, akkor megállapíthatjuk, hogy ezekben az esetekben biztosan az altiméter szolgáltat helytelen adatokat, hiszen azok másodperces
56
időkülönbséggel mutatnak több száz méteres eltéréseket, és bár tudjuk, hogy a repülőgéppel éles manővereket hajtottak végre, semmiképpen sem ilyen hirtelen magasságváltozással tették azokat. A rádiós altiméter adatai akkor térnek el ilyen szinten a tényleges repülési magasságtól, amikor a gép nagy szögben fordul, megdől, ezzel megzavarva a mérést. Ekkor ugyanis a kibocsátott rádióhullámok nem verődnek vissza a földfelszínről, így az adó és vevő antenna között áthallás következik be. Mindig a legerősebb visszaverődő hullámokat mérjük, hiszen ezeket tekintjük a földfelszín által visszaverteknek. Ha a földfelszínről nem verődik vissza hullám, akkor a legerősebb vett rádióhullám az adóantenna által kibocsátott lesz, és ez alapján fogja az eszköz meghatározni a magasságot. Az ismertetett jelenség, az antennák közötti áthallás indokolja azt, hogy a mért magasság a hibás mérések esetén is néhány méter, nem pedig zérus. Tehát maga az altiméter jól végzi a mérést, a hibás mérési adatokat az antennák nem megfelelő elhelyezése, illetve a repülőgép extrém mozgása okozza. Ez egy újabb bizonyíték arra vonatkozóan, hogy a rádiós elvű magasságmérés akkor használható jól, ha a repülőgép az elvárt pozícióját tartva, a felszínnel párhuzamos síkban repül, kiválóan alkalmazható például a kifutópályára való leszállásnál.
6-7. ábra: A rádiós altiméter adatok lényeges eltérése
57
A 6-8. ábrán egy kiragadott példa látható arra vonatkozóan, hogy az üzemszerű feltételek teljesülése esetén a korrigált GPS adatok jól közelítik a rádiós altiméter adatait. A nyers GPS adat 1186 méteres, a korrigált 351 méteres, a rádiós altiméter pedig 333 méteres repülési magasságot mutat. Ebben az esetben lényegesen pontosítottuk a GPS adatait, melyek így 18 méterrel térnek el a rádiós altiméter adataitól. Ez olyan kis eltérés, hogy a kritikus szakaszok (felszállás és leszállás) kivételével lehetővé teszik a GPS magasságmérésre való hagyatkozást, és az aszerinti navigálást.
6-8. ábra: Üzemszerű működés esetén mért adatok
6.3 UAV fedélzeti mérés A mérésadatgyűjtő rendszert UAV repülés közben is lehetőségem volt tesztelni. Mivel a fejlesztés és a korábbi adatgyűjtő mérések egy falemezre szerelt rendszerrel kerültek megvalósításra, így a repülés véghezviteléhez ezt a tesztpanelt szét kellett szerelni, és az egyes alkatrészeket a repülőben megfelelően elhelyezve kellett rögzíteni.
58
6-9. ábra: A mérésadatgyűjtő rendszer a repülőgépben elhelyezve
A cég saját kisrepülőjével a dunakeszi reptéren végeztünk adatgyűjtést. A helyszín sík domborzata lehetőséget biztosított a korrekciós módszer ideális körülmények közötti teszteléséhez. A repülés során a gép nagyjából 200 méterre emelkedett. Az útvonal hosszú egyenes szakaszokat, meredek emelkedéseket és süllyedéseket, illetve éles fordulókat is tartalmazott.
6-10. ábra: Felszállás előtt
59
6-11. ábra: Repülés közben
A repülés után kiértékeltem a szerzett adatokat. A GPS koordináták alapján a JavaScript modul a térképen megjeleníti a repülés helyszínét, illetve az útvonalat is.
6-12. ábra: A mérés során vizsgált útvonal
A repülőgép az összeszerelési feladatok miatt a mérés indítása után még pár percig a földön volt, így a GPS által mért magasságadatok alapján azt becsülhetjük, hogy a reptér nagyjából 140 méteres tengerszint feletti magasságon helyezkedik el.
6-13. ábra: A GPS által mért magasságadatok
60
Az útvonalon mért felszíni magasság azonban az egész mérés során jelentős változásokat mutat. A dolgozatban korábban már kitértem arra, hogy az útvonalon mért domborzati magasság nem az idő függvényében, hanem az útvonalon megtett távolság függvényében kerül kiértékelésre. Mivel az első pár percben a gép egy helyben van, így nincs elmozdulás.
6-14. ábra: Az útvonalon mért felszíni magasság
A tényleges repülési magasság az előzetes becsléseinknek megfelelően maximálisan 200 méter, és olyan értékek kerülnek megjelenítésre, amikre számítunk.
6-15. ábra: Tényleges repülési magasság
6-16. ábra: Műholdak száma
A repülési magasság kiértékelésére azonban a grafikus felhasználói felület biztosítja a legjobb lehetőséget. Ennek használata során ugyanis a rádiós altiméter adatait összevethetjük a korrigált GPS magasságadatokkal. A két módszer együttesen meglehetősen pontos magasságadatokat szolgáltathat. A kirajzolt magasságfüggvények alapján megállapíthatjuk, hogy a korrigált GPS adatok sík felület feletti repülés esetén különösen pontos adatokat szolgáltatnak, melyek csak minimális mértékben térnek el a rádiós altiméter adataitól. Mivel a rádiós altimétert
61
rendeltetésszerűen használtuk, azaz mindig volt talajreflexió, és ezáltal érvényes adat, így ennél a mérésnél nem alakult ki az antennák közötti áthallás jelensége. Különösen meglepő volt számomra az, hogy a barometrikus szenzor adatai egy ofszettől eltekintve ilyen pontosan követik a többi mérési módszer eredményeit. Ez főleg azért ilyen meglepő, mert a szenzor a gép testében helyezkedett el, illetve a reptéren meglehetősen jelentős volt a légmozgás, sokszor a gép mozgásán is látszott a szél ereje. Az ofszetet kiküszöbölve tehát ez is egy meglepően pontos módszer lehet a repülési magasság meghatározására.
6-17. ábra: A különböző szenzorok által mért repülési magasságadatok
62
7. Összefoglaló A rádiós, és barometrikus elvű, illetve a GPS rendszeren alapuló magasságmérési módszerek elméleti hátterének megismerésével már körvonalazódott számomra, hogy az egyes mérési módszerek milyen körülmények között és milyen pontossággal használhatók. Tisztázódott, hogy míg nagyobb repülési magasságban a GPS és a barometrikus szenzor jó megoldás lehet, addig ezek közel se mutatnak elég pontos adatokat a kritikus szakaszok biztosítására, ilyen helyzetben a rádiós altiméterre kell támaszkodnunk. A mérési rendszer tápellátásának biztosítására egy tápegység panelt terveztem, mely a 24V-os akkumulátor feszültségét osztja 5V-os illetve 3,3V-os feszültségszintekre. Az adatgyűjtést végző szoftver Python nyelven történő implementálása után teszteltem a szoftver működését. Miután a szoftvert megfelelőnek találtam, beállítottam, hogy a Raspberry Pi modul a rendszer felállása után azonnal futtassa a scriptet. Az esetleges hibák detektálására egy állapotjelző LED-et használtam. Az adatgyűjtés befejezése után a JavaScript nyelvű programba integrált Google Maps API alapján pontosítom a GPS naplófájlok adatait. Továbbá a repülési útvonalat kirajzolom egy térképre, és a repülési magasságokról részletes információkat közlök grafikonok segítségével. Az eredeti és a korrigált GPS adatokat összehasonlítom a rádiós altiméter adataival egy grafikus GUI segítségével. Az adatok kiértékelését a létrehozott weboldal grafikonjai és a grafikus Qt GUI segítségével végzem. Az adatok kiértékelése alapján elmondható, hogy az online adatbázis alapján pontosított GPS adatok bár lényegesen hitelesebbek, mint az eredeti GPS adatok, precíz navigációra továbbra sem használhatók az akár 20-30 méteres vertikális pontatlanságuk miatt. Alacsony magasságban, vízszintes terület fölött repülve a rádiós altiméter által szolgáltatott adatok megbízhatóak. Azonban annak eldöntésére, hogy nagyjából milyen magasságban repülünk, a korrigált GPS adatok biztosítják a legjobb lehetőséget, hiszen ez egy megbízható rendszer, mely nagy magasságban, rossz látási viszonyok között is relatíve pontos adatokat szolgáltat.
63
8. Továbbfejlesztési lehetőségek A továbbfejlesztés egyik kulcsmozzanata az online adatbázisok egyszerűsített verziójának letöltése és integrálása lenne. Ahogy beágyazott rendszerekben a szinusz függvény értékeinek számítása helyett csak előre előállított szinusz táblákban mentett adatokat használunk fel, úgy lehetne ezt a több dimenziós domborzati függvényt is táblákkal modellezni. Ez lehetővé tenné a GPS magasságadatok valósidejű korrekcióját, és biztosítaná a dolgozatban említett rádiós magasságmérés pontosítását is. Továbbá éles alkalmazásban a Python script helyett natív kódot kellene futtatni, ezzel biztosítva a hibák minimalizálását. Éles alkalmazás esetén mindenképpen érdemes lenne a Raspberry Pi modult egy saját tervezésű hardverrel helyettesíteni. A fejlesztés során sokszor komoly problémának éreztem, hogy egyes alacsony szintű funkciók rejtettek. Ez a saját tervezésű rendszernél kiküszöbölhető lenne. Nagyon hasznos lenne továbbá, ha egy táblagép vagy okostelefon csatlakoztatásával már a repülés helyszínén is kirajzolható lenne a megtett útvonal, illetve a mérési adatok is megjelenítésre kerülnének.
64
9. Köszönetnyilvánítás Ezúton köszönöm meg mindazok munkáját, akik segítették a fejlesztés előre menetelét, lehetővé tették az eszközök létrehozását, és kipróbálását. Köszönettel tartozom a tanszéki konzulensemnek, Szabó Zoltánnak, akihez bármikor fordulhattam kérdéseimmel és a vállalati konzulensemnek, Mikó Gyulának, aki irányt mutatott a fejlesztésben, és hasznos visszajelzéseket adott az elvégzett munkával kapcsolatban. Külön köszönöm a BHE Bonn Hungary Electronics Ltd. hozzájárulását. Hatalmas segítség volt, hogy biztosították a felhasznált eszközöket. Szeretném megköszönni a cég minden munkatársának hozzájárulását, aki akár a fejlesztési, összeszerelési vagy tesztelési feladatok elvégzésében segítette munkámat.
65
10. Irodalomjegyzék [1]
GPS.gov Official U.S. Government information about the Global Positioning System (GPS) and related topics http://www.gps.gov/systems/gps/space/ http://www.gps.gov/systems/gps/control/ http://www.gps.gov/systems/augmentations/
[2]
W. Pogge: Real-World Relativity: The GPS Navigation System 2014 April 10 http://www.astronomy.ohio-state.edu/~pogge/Ast162/Unit5/gps.html
[3]
Relativistic Effects on Satellite Clock as Seen from Earth Wolfram Demonstration Project http://demonstrations.wolfram.com/RelativisticEffectsOnSatelliteClockAsSeenFr omEarth/
[4]
Dick Karsky: Comparing Four Methods of Correcting GPS Data: DGPS, WAAS, L-Band, and Postprocessing July 2004 http://www.fs.fed.us/t-d/pubs/pdfpubs/pdf04712307/pdf04712307dpi300.pdf
[5]
GPS.gov Official U.S. Government information about the Global Positioning System (GPS) and related topics http://www.gps.gov/systems/gps/performance/accuracy/
[6]
Global Positioning System (GPS) Standard Positioning Service (SPS) Performance Analysis Report July 31, 2014 http://www.nstb.tc.faa.gov/reports/PAN86_0714.pdf#page=22
[7]
Dave Jesse: Looking closely at Radio Altimeters November 13, 2013 http://www.flightdatacommunity.com/looking-closely-at-radio-altimeters/
[8]
FMCW Radar Sensors, Frequency Modulated Continuous Wave Radar Basic operating principles and theory http://www.siversima.com/wp-content/uploads/2011/06/FMCW-Radar-AppNotes-Frequency-Modulated-Continuous-Wave-Radar.pdf
[9]
Christian Wolff: Frequency-Modulated Continuous-Wave Radar (FM-CW Radar) http://www.radartutorial.eu/02.basics/Frequency%20Modulated%20Continuous% 20Wave%20Radar.en.html
[10] Bertrand Chazot, Loic Raucy, Samuel Mokrani, Axel Schumacher: Copterix, Factorized Quaternion Algorithm
66
http://copterix.perso.rezel.net/?page_id=74 [11] MIDE Engineering Smart Technology Products Air Pressure at Altitude Calculator http://www.mide.com/products/slamstick/air-pressure-altitude-calculator.php [12] U.S. Department of Transportation – Federal Aviation Administration: Order JO7110.65V April 3, 2014 http://www.faa.gov/air_traffic/publications/atpubs/ATC/TOC.html#Chapter%C2 %A08.%20Offshore/Oceanic%20Procedures [13] u-blox 5 Receiver Description, Including Protocol Specification 2009 https://www.u-blox.com/images/downloads/Product_Docs/ublox5_Protocol_Specifications%28GPS.G5-X-07036%29.pdf [14] BMP085 Digital pressure sensor Data sheet 15 Oct 2009 https://www.sparkfun.com/datasheets/Components/General/BST-BMP085DS000-05.pdf [15] Adafruit Raspberry Pi Python Code Sep 2, 2013 https://github.com/adafruit/Adafruit-Raspberry-Pi-PythonCode/blob/master/Adafruit_BMP085/Adafruit_BMP085.py [16] Dr. Judson L. Ahern: Principles of Geophysics 2007 http://principles.ou.edu/earth_figure_gravity/geoid/index.html
67
11. Ábrajegyzék 3-1. ábra: A GPS műholdak elrendezése a Föld körül[1] ................................................. 7 3-2. ábra: Műhold generációk[1] ...................................................................................... 8 3-3. ábra: A vezérlési szegmens földi állomásai és szerepük[1] ...................................... 9 3-4. ábra: A trilateráció elvén meghatározott pozíciók................................................... 10 3-5. ábra A műholdak órái a sebességük miatt lassabban, a gravitációs mező gyengébb volta miatt pedig gyorsabban járnak[3] .......................................................................... 12 3-6. ábra: Horizontális helymeghatározás hibáinak mértéke .......................................... 13 3-7. ábra: A FAA által meghatározott pontossági követelmények ................................. 15 3-8. ábra: Horizontális hibák eloszlása 2014 április 1–2014 június 30 között[6]........... 15 3-9. ábra: Vertikális hibák eloszlása 2014 április 1–2014 június 30 között ................... 16 3-10. DGPS lefedettség az Egyesült Államok területén[1] ............................................ 17 3-11. ábra: A CORS bázisállomások hálózata[1] ........................................................... 18 3-12. ábra: GDGPS állomások[1] ................................................................................... 18 3-13. ábra: IGS megfigyelőállomások világszerte[1] ..................................................... 19 3-14. ábra: Rádiós altiméter elhelyezkedése egy személyszállító repülőgépen [7] ........ 20 3-15. ábra: A fűrészfog jellegű pásztázó frekvencia [9] ................................................. 22 3-16. ábra: A háromszögjegű pásztázó frekvencia ......................................................... 23 3-17. ábra: Repülőgépek dőlési szögei [10].................................................................... 23 3-18. ábra: A repülési magasság és a mért magasságérték közötti összefüggés ............. 24 3-19. ábra: Rádiós altiméterek blokkvázlata................................................................... 25 3-20. ábra: A légköri nyomás a magasság függvényében [11] ....................................... 26 4-1. ábra: A Raspberry Pi B modell ................................................................................ 31 4-2. ábra: u-blox TIM-5H GPS vevő modul ................................................................... 31 4-3. ábra: NMEA üzenettípusok [13] ............................................................................. 32 4-4. ábra: Bosch BMP 085 barometrikus magasságmérő modul fejlesztőpanelen ......... 35 4-5. ábra: A BMP085 modul lekérdezésének folyamata ................................................ 36 4-6. ábra: MicroStrain 3DM-GX3-25 giroszkóp ............................................................ 38 4-7. ábra: AZ üzenetek általános felépítése .................................................................... 38 4-8. ábra: Ellenőrző megszólítás üzenet ......................................................................... 39 4-9. ábra: Ellenőrző megszólítás válasz .......................................................................... 39
68
4-10. ábra: Lekérdezéses kommunikációt beállító parancs ............................................ 39 4-11. ábra: Adatlekérdező üzenet felépítése ................................................................... 40 4-12. ábra: Az Euler szögeket tartalmazó üzenet formátuma ......................................... 41 4-13. ábra: A tápellátást biztosító panel kapcsolási rajza ............................................... 42 4-14. ábra: A tápellátást biztosító panel nyomtatott huzalozású terve ........................... 43 5-1. ábra: Az eszközcsoportok azonosítói ...................................................................... 46 5-2. ábra: Különböző magasságfogalmak[16] ................................................................ 49 5-3. ábra: A GPS vevő által az útvonalon mért magasság .............................................. 51 5-4. ábra: Az útvonalon a földfelszín magassága Google Maps adatok alapján ............ 51 5-5. ábra: A földfelszín feletti repülési magasság ........................................................... 52 5-6. ábra: A kapcsolatban levő műholdak száma ........................................................... 52 5-7. ábra: A felhasználói felület működés közben .......................................................... 53 6-1. ábra: A mérés során vizsgált útvonal....................................................................... 54 6-2. ábra: A GPS vevő által mért magasság ................................................................... 54 6-3. ábra: Tengerszint feletti magasság az útvonalon ..................................................... 55 6-4. ábra: A pontosított magasságadatok ........................................................................ 55 6-5. ábra: A látható műholdak száma ............................................................................. 55 6-6. ábra: Az egész mérés során gyűjtött adatok ábrázolása .......................................... 56 6-7. ábra: A rádiós altiméter adatok lényeges eltérése ................................................... 57 6-8. ábra: Üzemszerű működés esetén mért adatok ........................................................ 58 6-9. ábra: A mérésadatgyűjtő rendszer a repülőgépben elhelyezve ................................ 59 6-10. ábra: Felszállás előtt .............................................................................................. 59 6-11. ábra: Repülés közben ............................................................................................. 60 6-12. ábra: A mérés során vizsgált útvonal..................................................................... 60 6-13. ábra: A GPS által mért magasságadatok ............................................................... 60 6-14. ábra: Az útvonalon mért felszíni magasság ........................................................... 61 6-15. ábra: Tényleges repülési magasság ....................................................................... 61 6-16. ábra: Műholdak száma ........................................................................................... 61 6-17. ábra: A különböző szenzorok által mért repülési magasságadatok ....................... 62
69
12. Függelék 12.1 Az adatgyűjtő szoftver forráskódja (Python) Az alábbiakban csak a szoftver váza a kiszolgáló függvények nélkül kerül ismertetésre. import RPi.GPIO as GPIO import usb.core import usb.util import usb.legacy import usb.control import serial import smbus import Adafruit_BMP.BMP085 as BMP085 import os import time import sched import datetime #XXXXXXXXXXXXXXXXXXXXXXX VARIABLES XXXXXXXXXXXXXXXXXXXXXXXXX GPIO.setmode(GPIO.BCM) GPIO.setup(22, GPIO.OUT) GPIO.output(22, GPIO.HIGH) #GPIO 22 active low s1 = sched.scheduler(time.time, time.sleep) sensor = [] mass = [] hid = [] hub = [] wifi = [] #XXXXXXXXXXXXXXXXXXXXXXX MAIN #opening ports try: port_gps = serial.Serial("/dev/ttyUSB0", 38400) port_alt = serial.Serial('/dev/ttyUSB1', 115200) port_rad = serial.Serial('/dev/ttyUSB2', 115200) except: True
XXXXXXXXXXXXXXXXXXXXXXXXX
#selecting all devices connected with USB and sorting them into categories devices = usb.core.find(find_all = True) for dev in devices: if is_mass_storage(dev): mass.append(dev) elif is_human_interface_device(dev): hid.append(dev) elif is_hub(dev): hub.append(dev) else: sensor.append(dev)
70
for i in sensor: if i.idVendor == 0x0424: if i.idProduct == 0xec00: sensor.remove(i) converter = sensor[0] converter.reset() try: converter.attach_kernel_driver(0) except: True try: converter.attach_kernel_driver(1) except: True try: converter.attach_kernel_driver(2) except: True #========================= ACCESSING GPS MODULE ========================== try: converter.detach_kernel_driver(0) except: True cfg = converter.get_active_configuration() endpoint_GPS = cfg[(0,0)][0] GPS_get_time_date(endpoint_GPS) os.chdir("/media/KINGSTON") time_stamp = str(datetime.datetime.now()) time_stamp =time_stamp[0:19] time_stamp = time_stamp.replace('-', '').replace(' ', '_').replace(':', '') file_name_GPS = 'GPS_' + time_stamp + '.txt' data_GPS = open(file_name_GPS, "a+") #======================ACCESSING ATTITUDE MODULE (GYRO) ================== try: converter.detach_kernel_driver(2) except: True endpoint_ALT_IN = cfg[(2,0)][0] endpoint_ALT_OUT = cfg[(2,0)][1] command = [0x75, 0x65, 0x01, 0x02, 0x02, 0x01, 0xe0, 0xc6] converter.write( endpoint_ALT_OUT.bEndpointAddress, command ) data = converter.read( endpoint_ALT_IN.bEndpointAddress, endpoint_ALT_IN.wMaxPacketSize, 10000) command = [0x75, 0x65, 0x0c, 0x05, 0x05, 0x11, 0x01, 0x01, 0x00, 0x03, 0x19] converter.write( endpoint_ALT_OUT.bEndpointAddress, command ) file_name_ALT = "GYR_" + time_stamp + ".txt" data_ALT = open(file_name_ALT, "a+")
71
#================== ACCESSING RADIO ALTITUDE MODULE ====================== try: converter.detach_kernel_driver(1) except: True endpoint_RAD_IN = cfg[(1,0)][0] file_name_RAD = "ALT_" + time_stamp + ".txt" data_RAD = open(file_name_RAD, "a+") #=================ACCESSING BAROMETRIC ALTITUDE MODULE ================== bar_sensor = BMP085.BMP085() file_name_BAR = "BAR_" + time_stamp + ".txt" data_BAR = open(file_name_BAR, "a+") #======================== SCHEDULING SAVE FUNCTIONS ====================== s1.enter(3.1,1,ALT_data_save,(endpoint_ALT_IN,endpoint_ALT_OUT,data_ALT,s1,)) s1.enter(3.01328125, 1, GPS_data_save, (endpoint_GPS, data_GPS, s1,)) s1.enter(3.15, 1, RAD_data_save, (endpoint_RAD_IN, data_RAD, s1,)) s1.enter(3.13, 1, BAR_data_save, (data_BAR, s1,)) s1.run()
12.2 Az
adatfeldolgozó
szoftver
forráskódja
(JavaScript) Az alábbiakban csak a szoftver váza a kiszolgáló függvények nélkül kerül ismertetésre. var service; var map; var infowindow; var chart1; var chart2; var flightCoordinates = []; var file; var file_write_name; var CoordinateArray = []; google.load('visualization', '1', {packages: ['columnchart']}); google.setOnLoadCallback(plotElevation); //--------------------------------------------------------------------------------------------------------------------------//FUNCTION 'INITIALIZE' IS CALLED EVERY TIME THE PAGE IS LOADED. IT CALLS EVERY //------------------------------------------------OTHER FUNCTION-------------------------------------------------function initialize(){ file = document.getElementById("myFile").files[0].name; readDataFromTxtFile(file); var mapOptions = { center: new google.maps.LatLng(CoordinateArray[0].latitude, CoordinateArray[0].longitude), zoom: 15, mapTypeId: 'hybrid'};
72
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); for(var i=0; i
73
'meters.'); infowindow.setPosition(event.latLng); infowindow.open(map);} else{ alert('No results found');} } else{ alert('Elevation service failed due to: ' + status);} }); } //-----------------------------------------------------------------------------------------------------------------------function drawPath() { chart1 = new google.visualization.ColumnChart(document.getElementById('measuredAltitude_chart')); chart2 = new google.visualization.ColumnChart(document.getElementById('googleMapsElevation_chart')); chart3 = new google.visualization.ColumnChart(document.getElementById('altitudeFromGround_chart')); chart4 = new google.visualization.ColumnChart(document.getElementById('satellitesInView_chart')); var pathRequest = { 'path': flightCoordinates, 'samples': 100} service.getElevationAlongPath(pathRequest, plotElevation); } //-----------------------------------------------------------------------------------------------------------------------function plotElevation(results, status) { if (status != google.maps.ElevationStatus.OK) {return;} var scale = CoordinateArray.length / results.length; var iterator = 0; //Setting and plotting measured altitude chart var data1 = new google.visualization.DataTable(); data1.addColumn('string', 'Sample'); data1.addColumn('number', 'Elevation'); for (var i=0; i< CoordinateArray.length; i++){ if( i%10 == 0){ data1.addRow(['', CoordinateArray[i].measured_altitude]);}} var options1 = { title: "Altitude measured by GPS", titleTextStyle: {fontName: "Times-Roman", fontSize: 40}, legend: "none", titleY: "Altitude (m)"}; chart1.draw(data1, options1); //Setting and plotting google maps elevation chart var data2 = new google.visualization.DataTable(); data2.addColumn('string', 'Sample'); data2.addColumn('number', 'Elevation'); for (var i=0; i< results.length; i++){ data2.addRow(['', results[i].elevation]);} var options2 = { title: "Elevation sampled on route", titleTextStyle: {fontName: "Times-Roman", fontSize: 40}, legend: "none", titleY: "Elevation (m)"}; chart2.draw(data2, options2);
74
//Setting and plotting altitude from ground chart var data3 = new google.visualization.DataTable(); data3.addColumn('string', 'Sample'); data3.addColumn('number', 'Elevation'); for(var i=0; i
75
date = lineData[9]; var latitudeDM = parseFloat(lineData[3]); var latitudeInt = parseInt(latitudeDM); var latitudeD = parseInt( latitudeInt / 100 ); var latitudeM = latitudeDM - latitudeD*100; latitude = latitudeD + (latitudeM / 60); if(lineData[4] === "S"){ latitude = latitude * (-1);} var longitudeDM = parseFloat(lineData[5]); var longitudeInt = parseInt(longitudeDM); var longitudeD = parseInt( longitudeInt / 100 ); var longitudeM = longitudeDM - longitudeD*100; longitude = longitudeD + (longitudeM / 60); if(lineData[6] === "W"){ longitude = longitude * (-1);} var text = '{"time":' + time +', "date":' + date +', "latitude":' + latitude + ', "longitude":' + longitude + ', "measured_altitude":' + 0.0 + ', "satellites_in_view":' + 0 + ', "altitude_from_ground":' + 0.0 + '}'; var newCoordinate = JSON.parse(text); CoordinateArray.push(newCoordinate);} if( lineData[0] === "$GPGGA"){ var altitude = parseFloat(lineData[9]); var satellites = parseInt(lineData[7]); if( parseInt(lineData[6]) == 1 ){ satellites *= -1;} CoordinateArray[iterator].measured_altitude = altitude; CoordinateArray[iterator].satellites_in_view = satellites; iterator++;} }}}} rawFile.send(null); } //-----------------------------------------------------------------------------------------------------------------------function writeDataToTxtFile(file) { var url = "get_data.php" var http = new XMLHttpRequest(); for(var i=0; i < CoordinateArray.length ; i++){ var http = new XMLHttpRequest(); http.open("POST", url, false); data = "date=" + String(CoordinateArray[i].date) + "&time=" + String(CoordinateArray[i].time*100) + "&altitude=" String(CoordinateArray[i].altitude_from_ground) + ""; http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.send(data);} }
76
+