ASTLAB © 2004

A PSINAV GPS navigátor működése


1.Általános ismertető

2.A navigátor programcsomag telepítése

3.A shellscriptek működése

4.A navigációs adatbázisok

5.A GPS engine felélesztése

6.Ismert hibák


1. Általános ismertető

A Psion 5MX PDA-t viszonylag egyszerű módon tehetjük navigációra is alkalmassá. Ehhez szükség van egy LINUX operációs rendszerre, egy GPS engine-re, egy soros összekötő kábelre, meg néhány shell scriptre. A unix elég értelmes operációs rendszer ahhoz, hogy akár egy navigátort is elkészíthessünk csupán a shell programozásával. Tehát a C fordítót mindjárt felejtsük is el, mert nem lesz rá szükség. Ahhoz, hogy minél kevesebb hardvert kelljen építeni lemondunk az IRDA összeköttetésről és simán csak a soros portot fogjuk használni. A navigátorhoz nem szükséges X11, a karakteres terminál is elegendő. Mivel a processzor nem 6 GHz-en hasít, a navigációs számításokat minimalizálni kell, így nem az ultrabonyolult forgásellipszoidon elkövetett távolság és irányszámítást építjük be, hanem csak egy linearizálással működő egyszerűsített távolság és iránymeghatározást, ami 500 Km-ig egész jó eredményt ad, illetve a célhoz közeledve egyre pontosabb, a cél közelében pedig ugyan olyan pontos mint a forgásellipszoidos számítás.

2. A navigátor programcsomag telepítése

A PSINAV programcsomag nem igazi package, amit a dpkg-val kellene telepíteni, csak egy tar.gz állomány, amit a belátásod szerinti helyre másolhatsz fel. Mivel én vagyok a saját gépem teljhatalmú ura, és egyetlen felhasználója, ezért ez nálam a /root/navigator könyvtárba került. (A példákban ez fog látszani.) A tar.gz kicsomagolása után a következőket látjuk:

small:~/navigator# ll
total 25
-rw-r--r-- 1 root root 26 Sep 3 17:25 actdata.nav
-rwxrwxrwx 1 root root 2216 Sep 3 17:25 chtrg.sh
-rwxrwxrwx 1 root root 44 Sep 3 17:25 csron.sh
drwxr-xr-x 2 root root 1024 Sep 3 17:25 locationdata
-rwxr-xr-x 1 root root 7673 Sep 3 17:25 navdisplay.sh
-rwxr-xr-x 1 root root 459 Sep 3 17:25 navparser.sh
-rw-r--r-- 1 root root 5 Sep 3 17:25 navtty.work
-rwxrwxrwx 1 root root 2398 Sep 3 17:25 nearest.sh
-rwxr-xr-x 1 root root 218 Sep 3 17:25 startnav.sh
-rwxrwxrwx 1 root root 349 Sep 3 17:25 stopnav.sh
-rwxrwxrwx 1 root root 411 Sep 3 17:25 store.sh
drwxr-xr-x 2 root root 1024 Sep 3 17:25 stpengine
-rw-rw-r-- 1 root root 28 Sep 3 17:25 target.nav
-rw-r--r-- 1 root root 106 Sep 3 17:25 trgindexed.dat

Ebben a könyvtárban további két könyvtár is található, ezek a locatindata és az stpengine. A locationdata-ban vannak a navigációs adatbázisok , az stpengine pedig a GPS engine felélesztéséhez szükséges scriptet és adatokat tartalmaz.

A programcsomagot itt töltheted le: psinav09081750pub-tar.gz (8Kbyte)

3. A shellscriptek működése

Kihasználva a unix operációs rendszer multitaszk tulajdonságát, megpróbáljuk a feladatok végrehajtását szétaprózni, vagyis mindig csak annyi feladatot elvégezni amennyi feltétlenül szükséges. Erre azért van szükség mert nem 4 darab 6GHz-es processzorral működő brutál rendszerrel van dolgunk, és minden felesleges feladat feleslegesen enné a processzoridőt. A navigátor üzemeltetéséhez két terminál szükséges, és ha lehet ne is használjunk többet. Ehhez a következő beállítást kell eszközölni a /etc/inittab file-ban.

small:~/navigator# cat /etc/inittab
id:2:initdefault:
# System initialization.
si::sysinit:/etc/rc

#ca::ctrlaltdel:/sbin/shutdown -t5 -rf now
0:0:wait:/etc/halt halt

# Run gettys in standard runlevels
1:2345:respawn:/sbin/getty 115200 tty1
2:2345:respawn:/sbin/getty 115200 tty2
3:2345:off:/sbin/getty 115200 tty3
#starting only three gettys to save memory
4:2345:off:/sbin/getty 115200 tty4
5:2345:off:/sbin/getty 115200 tty5
5a:2345:off:/sbin/getty 115200 ttyAM1

6:6:wait:/etc/halt reboot

ca::ctrlaltdel:/sbin/reboot

Tehát csak 2 darab getty-t indítsunk el, és lehetőség szerint ha van még valami amit nélkülözni tudunk azt is állítsuk le.

A következő ábra mutatja a navigációs scriptek és adatállományok kapcsolatait:



Mint már említettem a navigátor üzemeltetéséhez két terminál szükséges. Az egyiken (a példában a tty1) elindítjuk a startnav.sh segítségével a navparser.sh és a navdisplay.sh scripteket. A navparser.sh teljesen a háttérben fut, olvassa a GPS engine által küldött mondatokat, és kiveszi azokat az adatokat belőlük, amire a navigációhoz feltétlenül szükség van. Ezek az adatok az actdata.nav nevű mindig csak egy sort tartalmazó file-ba kerülnek:

small:~/navigator# cat actdata.nav
47.45118 19.79170 191 0

A file space szeparált és az aktuális LAT LON haladási_irány haladási_sebesség adatokat tartalmazza. A file tartalma 1 másodpercenként frissül.

A target.dat szintén egysoros file tartalmazza a cél adatait:

small:~/navigator# cat target.nav
Jokai Mor utca,47.44850,19.10445

Ebből a két file-ból veszi az adatokat a navdisplay.sh. Ennek feladata az aktuális koordináta és a cél adataiból meghatározni a cél irányát és távolságát, majd ezeket jól láthatóan a képernyőre írni. A cél adatainak betöltését és az aktuális pozíció mentését a másik (a példában tty2) terminálon indított chtrg.sh nearest.sh store.sh scriptek segítségével végezhetjük el. A navigátor leállítása szintén a tty2-es terminálról lehetséges, ehhez a stopnav.sh scriptet kell elindítani. Ha a tty1-en nem kapjuk vissza a kurzort (ez ritkán, de előfordulhat), akkor azt a csron.sh script futtatásával nyerhetjük vissza. A navigációs adatokat bármelyik a ./locationdata könyvtárban elhelyezett adatfile-ból kinyerhetjük. Pontok rögzítése szintén bármelyik navigációs adatfile-ba lehetséges.

4. A navigációs adatbázisok

A navigációs adatbázisok a ./locationdata könyvtárban .dat kiterjesztésű file-okban vannak elhelyezve. A programcsomaghoz két példa file-t mellékeltem. Ezek a mycoords.dat amely Budapest néhány jellegzetes tájékozódási pontját tartalmazza, illetve az otpatmbp.dat ami a legtöbb budapesti OTP ATM automata koordinátáit tartalmazza. A navigációs adatfile-ok bármennyi sort tartalmazhatnak. Minden sorban három adatnak kell lennie, ezek a cél neve, szélességi és hosszúsági koordinátája decimálfokban megadva. A három adatot vesszővel kell elválasztani egymástól. Példa:

small:~/navigator/locationdata# cat otpatmbp.dat | more
AUCHAN,47.42025,19.15682
Ady Endre utca 122,47.45286,19.14259
Alagut utca 3,47.49716,19.03348
Albertirsai ut 10,47.49148,19.12415
Andrassy ut 23,47.50187,19.05851
Andrassy ut 6,47.50073,19.05638
Andrassy ut 83,47.50897,19.06931
Anker koz 2,47.49822,19.05557
Apaczai Cs. J. utca 10,47.49658,19.04877
Apor Vilmos ter 11,47.49039,19.01565
Arpad fejedelem ut 8,47.52102,19.03784
Arpad ut 112,47.56032,19.09848
Arpad ut 63,47.56042,19.08933
Arpad ut 87,47.55998,19.09286
Balaton utca 7,47.51136,19.04906
Baross utca 67,47.48967,19.07371
Bartok Bela ut 54,47.47848,19.04951
Bartok Bela ut 66,47.47679,19.04476
Bartok Bela ut 94,47.47445,19.03821
Bathory utca 9,47.50605,19.05107
Batthány ter METRO,47.50643,19.03778
Becsi ut 132,47.53942,19.03132
--More--

Az adatfile-okat a chtrg.sh nearest.sh scriptek olvassák illetve a store.sh-val lehet irni beléjük. Ezeknek a scripteknek paraméterként lehet megadni a használni kívánt adatfile nevét.

5. A GPS engine felélesztése

Nyissuk ki a hardver dobozát és ha rajta van a tüskén a JP1 jumper, akkor azt vegyük le. Tekerjük rá az antennát a GPS engine-re, majd kössük össze a hardvert soros kábel segítségével a PSION-al és adjunk neki tápfeszültséget. A GPS engine ekkor rögtön működni kezd, de az első bekapcsolás után várjunk nyugodtan legalább 5 percet. Ezidő alatt az engine legyűjti a műholdakról a megfelelő adatokat, így amikor felprogramozzuk már valószínű jó koordinátákat fog adni. Lépjünk be a ./navigator/stpengine könyvtárba és itt indítsuk el az setupengine.sh-t. A script felprogramozza az engine-t, és lehetővé teszi a működes ellenőrzését. Az ellenőrzésnél értelmes NMEA mondatokat kell látnunk, ezek így néznek ki:

$GPGLL,4727.3583,N,01911.7405,E,175448.163,A*3E
$GPVTG,23.97,T,,M,0.09,N,0.2,K*54
$GPGLL,4727.3584,N,01911.7405,E,175449.163,A*38
$GPVTG,359.15,T,,M,0.09,N,0.2,K*60
$GPGLL,4727.3586,N,01911.7405,E,175450.163,A*32
$GPVTG,354.68,T,,M,0.11,N,0.2,K*6E
$GPGLL,4727.3587,N,01911.7405,E,175451.163,A*32
$GPVTG,18.84,T,,M,0.05,N,0.1,K*51
$GPGLL,4727.3588,N,01911.7405,E,175452.163,A*3E
$GPVTG,11.60,T,,M,0.06,N,0.1,K*51
$GPGLL,4727.3589,N,01911.7405,E,175453.163,A*3E
$GPVTG,349.25,T,,M,0.05,N,0.1,K*6D
$GPGLL,4727.3590,N,01911.7405,E,175454.163,A*31
$GPVTG,299.84,T,,M,0.01,N,0.0,K*6F

Ha értelmes mondatok jönnek, akkor tegyük fel a JP1-es jumpert a tüskére. Ezzel a backup battery a kikapcsolás után is életben tartja a GPS engine memóriáját. Ezek után a beállításokat megjegyzi, és következő bekapcsoláskor már csak a felprogramozásnak megfelelő adatokat adja a felprogramozásnak megfelelő formátumban. Az engine bootolása tapasztalataim szerint ezután 5-30 másodperc, és ez az idő a pillanatnyi műholdkonstellációtól és a kikapcsolás -bekapcsolás helyének távolságától függ. Utolsó lépésként pattintsuk össze a dobozt, és innentől a navigációs rendszer üzemkész.

6. Ismert hibák

Hiba 1

Számomra ismeretlen okból, de valószínűleg abból adódóan, hogy a PSION processzora nem hasít túl nagy sebességgel, néha overrun hiba keletkezik a soros device-on. Ez nem tragédia, mert ha ebből következően adat veszik el, hát vesszen, úgy is egy másodperc múlva jön a másik friss adatsor. A baj igazából az, hogy overrun hiba esetén a PSION az aktuálisan használt terminálra kiirja, hogy ttyAM: 1 input overrun(s) miáltal összepiszkíthatja a navigációs képernyőt. Próbáltam a /etc/syslog.conf -ban minden hibaüzenetet file-ba irányítani, de ez nem hatotta meg a linuxot. Ha tudod, hogy miként lehet ezt kikapcsolni, vagy a hiba okát megszűntetni, akkor légyszives írd meg nekem.