Mérési jegyzőkönyv készítette Szabó Attila Mesterséges intelligencia alkalmazások gyakorlat, ELTE IK 2006/2007-2
1. RFSPP projekt 1.1. SPP demo alkalmazás rf-mems-ekre: A Survivable Pipeline Protocol leírása és a protokollhoz használt definíciók, illetve fogalmak [1]-ben találhatók. Az feladat kerekes székkel közlekedő emberek helyzetének nyomon követése. Ehhez minden kerekes székre kerül néhány rf-mems egység, továbbiak a falakon és a ház környékén kerülnek elhelyezésre. A kerekes székek relatív, illetve abszolút helyzete a rádió- és ultrahang jelek segítségével határozható meg. Bár kevés az információátvitel, megfelelő szervezés nélkül az egységek nem tudják megszerezni a szükséges adatokat. Az adatforgalmazásnak egy meghatározott rendszert (sorrendet) kell követnie (egyszerre nem rádiózhatnak többen adott sugáron belül), és ez a sorrend folyamatosan változik/változhat mozgás során. A számítások és a kommunikáció szervezését az SPP oldja meg. 1.2 Az SPP feladat: elosztott, központi ágens nélküli helyzetmonitorozó rendszer készítése Olyan PO-kat (Pipeline Operation) kell meghatározni, amik egyrészt biztosítják a helyzet meghatározásához szükséges információkat a cricketeknek, másrészt megfelelő kommunikációs sorrendet definiálnak. Ezek a PO-k a következők: három bázis PO, (origó, pozitív x irányt jelölő, illetve pozitív y irányt jelölő bázisok) melyekben egy-egy cricket dolgozik, illetve egy negyedik, amihez többen csatlakozhatnak. Ez utóbbi tagjai a három bázis által sugárzott adatokból számolják a saját helyzetüket háromszögelés segítségével. 1.3. Az eszköz:Crossbow Cricket Projekt szempontjából fontosabb technikai adatok: Processzor: 8Mhz-es 8 bites architektúrájú ATLmega128L Program-memória/RAM: 128KB/4KB (!) Külső memória: 512KB flash Rádió: 868/916MHz, 433MHz, vagy 315MHz Szenzor: ultrahang adó-vevő Programozáshoz használt szoftverek: TinyOS 1.1.15. telepítő (tartalma: cygwin, jdk, fordítóprogram, szimulátor, stb.) 1.4. Programcsomagok A használt programcsomagokat a tos (TinyOS programok), illetve a cricket (Java programok) könyvtárak tartalmazzák, lásd 7.3-7.4.
2. TinyOS kiegészítések
2.1. Háromszög-távolságmérés Mivel az ultrahang adott esetben a különböző tömör felületekről visszaverődve (plafon, padló, stb.) érkezik, a távolságmérő nem a két cricket valós távolságát adja meg. Ilyenkor a jel egy egyenlő szárú háromszög szárain megy végig (feltételezve egyrészt, hogy a többszörös visszaverődés kizárható, másrészt, hogy a két cricket azonos, padlóval párhuzamos síkban van). A fentiek alapján a következőkkel egészítettem ki a távolságmérést: a DistanceMeasureM modulban beállítható a visszaverő felület távolsága (kezdetben ez nulla). A beállítást a megjelenítő programmal lehet elvégezni a szoftveres ki/bekapcsoláskor (2.2.). Ha a mért távolság fele nagyobb a megadott értéknél, akkor a program automatikusan háromszögtávolságot számol, egyébként az adatot légvonalban vett távolságnak tekinti. 2.2. Szoftver ki/bekapcsolás A tesztelés könnyítése érdekében a cricketeken futó programot a megjelenítő program segítségével lehet megállítani és elindítani, megspórolva ezzel az áramtalanítást. A szoftver újraindításakor a cricket üzenetben megkapja a visszaverő felület távolságát. A megjelenítő programból történő leállításkor a főprogram futása áll meg, indításkor ez indul újra: ennek hatása megegyezik a ki- és bekapcsolás eredményével. A szolgáltatást az RFSwitchM modul biztosítja, ami SwitchMsg típusú üzeneteket fogad és ezek alapján vezérli az RFSPPSystemM modul StdControl komponensét (Start(), illetve Stop() műveleteinek hívásával). 2.3. „Külső tag” bug A rendszer felállási idejének tesztelésekor derült arra fény, hogy egy-egy cricket a negyedik PO tagjaként viselkedik, de nem szerepel a többiek nyilvántartásában. A hiba a nyilvántartás összehangolásának korlátai miatt adódott (a sorrend eleje három hosszan kerül elküldésre ellenőrzésképp). Kiküszöbölése a sorra kerülés ellenőrzésével sikerült: aki több körön keresztül nem kerül sorra (a konkrét hiba esetében pl. örök negyedik a saját nyilvántartása szerint), újraindítja a csatlakozási eljárást.
3. Java kiegészítések A Java forráskódot kiegészítettem a 2.1-2.2.-ben leírtakhoz szükséges vezérlőkkel és üzenetküldéssekkel. Készült egy naplófájlokat feldolgozó program is.
5. Mérések 5.1. Indítások mérése a bug javítása után (a vízszintes tengelyen a cricketek száma, a függőlegesen az eltelt idő másodpercben látható): A szórás igen nagy, emellett a negyedik PO méretének növekedésével (7,12,19,22 cricket) erősen (exponenciálisan?) nő a görbe meredeksége, mivel a kötött sorrendű rádiózás rontja a csatlakozás esélyét (a csatlakozni akaró a csatlakozásra szánt idő alatt nem kap elég engedélyt, több próbálkozás szükséges). A mérések a programindítástól (összes cricket egyszerre indult) az utolsó cricket csatlakozásáig tartottak.
5.2. A fenti ábra alapjául szolgáló mérési eredmyények:
10 15 20 25
1 31 56 101 174
2 3 4 5 6 7 8 9 10 11 12 13 14 15 23 19 33 31 26 33 41 20 23 26 30 20 27 23 35 34 45 36 47 49 47 47 47 43 87 44 42 97 86 46 87 67 68 59 132 50 125 107 79 111 61 62 117 145 139 131 135 139 223 104 115 237 112 146 159 105
5.2. távolságok mérésének pontossága, háromszög-mérés nélkül (az ábrák skálái cm-ben értendők): 5.2.1. Szintben lévő cricketek távolságmérései, egymás felé fordított soros porttal: A távolságonkénti 25 mérés átlaga és szórása mutatja, hogy a soros port olyan mértékben árnyékolja le az ultrahangvevőt, hogy az erősen zavart jelet tud csak fogni. 120 cm-es távolságnál már egyértelműen egy fix távoli felületről (a 191cm-re levő plafonról) verődik vissza a jel, ezért a szórás minimálisra csökken.
5.2.2. Szintben lévő cricketek távolságmérései, egymás felé fordított soros porttal: A plafonról visszaverődő jel viszonylag nagy szórást mutat és figyelembe véve, hogy a plafon 191cm-re van, a mérés pontatlan.
5.2.3. Szintben lévő cricketek távolságmérései, egymás felé fordított ultrahang adóvevővel:
A szórás elhanyagolható, de a mérés konzekvensen kisebb a valós értéknél. Árnyékolás nincs, a szenzor a légvonalbeli távolságot méri.
6. Kapcsolódó anyagok [1] A. Meretei, Z. Palotai, A. Lőrincz: „Systems and methods for sensing physiologic parameters of the human body and achieving a therapeutic effect” - United States Patent 20070043591 [2] Zia, T.A., and Zomaya, A.Y., „An Analysis of Simulations and Programming in Wireless Sensor Networks”, In the proceedings of the International Workshop on Sensor Networks and Applications [3] Alec Woo „The Mica Sensing Platform”, Jan 15th, 2002 NEST Retreat
7. Függelék 7.1. Telepítés A http://www.tinyos.net/download.html oldalon leírtak alapján. Szimulátoros futtatásokhoz fontos, hogy cygwin alatt a PATH változó a telepítő által felrakott jdk-t tartalmazza (minden esetleges más jdk előtt). 7.2. Frissítések
Az update.zip-ben könyvtárstruktúra megfelelő elemeit.
található
állományokra
kell
lecserélni
a
TinyOS
7.3. TinyOS programcsomag Az eredeti kód a commented_tos.zip tömörített fájl tartalma, a kiegészített változat a tos.zip-ben található. 7.4. Java programcsomag A cricket.zip tömörített fájl tartalma. 7.5. Fordítás/futtatás cygwin alatt 7.5.1. Szimulátorral Fordítás:
make pc
Futtatás:
A simdriver.jar és a getenv.dll legyen a futtatható állománnyal egy könyvtárban. A parancsokat természetesen ebből a könyvtárból kell kiadni. Egyik ablakban: export DBG=temp ./build/pc/main.exe [options] num_nodes //Pl.: ./build/pc/main.exe -gui -b=1 5 > log_fixstarttime_5_1.txt Másik ablakban: nipg/spp/tinyviz
java
-cp
.\;simdriver.jar
net.tinyos.sim.SimDriver
-gui
-plugins
7.5.2. Crickettel Fordítás:
make cricket
Feltöltés:
make reinstall.1 cricket //Ahol a reinstall.x-ben az x a TOS_LOCAL_ADDRESS azonosító.
Futtatás (NetBeans):
run file "MainLocatiionTracker"