MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
Automatizálási és Kommunikáció-technológiai Tanszék, Mérnök Informatikus Alapszak Infokommunikációs Szakirány
Marker alapú robot lokalizáció Szakdolgozat
Készítette: Szabó Dávid (CR25ZK) 3994 Pálháza, Móricz Zs. út 33. Tervezésvezető: Dr. habil Kovács Szilveszter, egyetemi docens ME Általános Informatikai Tanszék Konzulens: Farkas Zita BME Gép- és Terméktervezési Tanszék
MISKOLC, 2013
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
K ÖSZÖNETNYILVÁNÍTÁS Elsősorban szeretném megköszönni tervezésvezetőmnek, Dr. habil. Kovács Szilveszter a Miskolci Egyetem, Gépészmérnöki és Informatikai Kar, Általános Informatikai Tanszék, egyetemi docensének a temérdek türelmét és segítőkészségét, idejét, amelyet rám áldozott, hogy ez a dolgozat megszülethessen valamint konzulensemnek, Farkas Zitának – a Budapesti Műszaki és Gazdaságtudományi Egyetem, Gép- és Terméktervezési Tanszék doktoranduszának. Szeretnénk köszönetet mondani a BME Mechatronika, Optika és Gépészeti Informatika Tanszék, a Gép- és Terméktervezési Tanszék, valamint az Eötvös Loránd Tudományegyetem Etológiai Tanszék és a Miskolci Egyetem Általános Informatikai Tanszék munkatársainak a készséges segítségért, akik tökéletes szakmai hozzáértésükkel hozzásegítettek, hogy ez a szakdolgozat elkészülhessen.
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
E REDETISÉGI N YILATKOZAT Alulírott Szabó Dávid,
Neptun-kód: CR25ZK
a Miskolci Egyetem Gépészmérnöki és Informatikai Karának végzős Mérnök Informatikus szakos hallgatója ezennel büntetőjogi és fegyelmi felelősségem tudatában nyilatkozom és aláírásommal igazolom, hogy a
Marker alapú robot lokalizáció című szakdolgozatom saját, önálló munkám. Az abban hivatkozott szakirodalom felhasználása a forráskezelés szabályai szerint történt. Tudomásul veszem, hogy szakdolgozat esetén plágiumnak számít: -
szószerinti idézet közlése idézőjel és hivatkozás megjelölése nélkül;
-
tartalmi idézet hivatkozás megjelölése nélkül;
-
más publikált gondolatainak saját gondolatként való feltüntetése.
Alulírott kijelentem, hogy a plágium fogalmát megismertem, és tudomásul veszem, hogy plágium esetén szakdolgozatom visszautasításra kerül.
Miskolc, 2013 év 05 hó 17. nap
…….……………………………….… Hallgató
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
T ARTALOMJEGYZÉK 1 Bevezetés ......................................................................................................................... 1 2 Feladat ismertetése ........................................................................................................... 2 3 Irodalomkutatás ............................................................................................................... 6 3.1
NI, OpenNI ............................................................................................................. 6
3.2
OpenCV .................................................................................................................. 7
3.3
Robot lokalizáció problémaköre ............................................................................. 9
3.4
Markerek ............................................................................................................... 10
3.5
ARToolKit ............................................................................................................ 11
3.6
QR-kód.................................................................................................................. 15
3.7
Microsoft Tag ....................................................................................................... 17
3.8
MiddleWare .......................................................................................................... 19
3.8.1
RT-MiddleWare............................................................................................. 20
3.8.2
Robot Operation System ................................................................................ 20
4 Eszközök ismertetése ..................................................................................................... 21 4.1
OpenCV telepítésének menete .............................................................................. 21
4.2
Linux Operációs rendszerre való ROS telepítése ................................................. 22
4.3
A ROS telepítése ................................................................................................... 23
4.3.1
Környezet telepítése ...................................................................................... 24
4.3.2
Önálló eszközök ............................................................................................ 25
4.3.3
Oktató videók ................................................................................................ 25
4.3.4
Eclipse telepítése ........................................................................................... 25
4.4
Kinect szenzor intelligens terekben ...................................................................... 26
4.5
RGB HSV transzformáció ............................................................................... 26
5 Alkalmazás..................................................................................................................... 28 5.1
Az alkalmazás rövid ismertetése ........................................................................... 28
5.2
Az alkalmazás strukturális leírása ......................................................................... 28
5.2.1
Square osztály ................................................................................................ 29
5.2.2
Colours osztály .............................................................................................. 31
5.2.3
MIN_MAX_VALUE osztály ........................................................................ 31
5.2.4
ReadingOfMarker osztály.............................................................................. 32
6 Eredmények ................................................................................................................... 38 6.1
Kinecttel vett marker minták ................................................................................ 39
7 Tovább fejlesztési lehetőség .......................................................................................... 42
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
8 Irodalomjegyzék ............................................................................................................ 43 8.1
Előadások, tanulmányok, weboldalak .................................................................. 43
8.2
Könyvek ................................................................................................................ 44
9 Összegzés ....................................................................................................................... 45 10 Summary ........................................................................................................................ 46 1 1 Ábrajegyzék ................................................................................................................... 47 12 Mellékletek .................................................................................................................... 48 12.1
CD melléklet ..................................................................................................... 48
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
1 B EVEZETÉS A feladatom egy olyan alkalmazás készítése volt, mely egy összetett robotikai rendszer részeként alkalmas speciális navigációs markerek felismerésére és kiértékelésére. A munkám szervesen kapcsolódik a Budapesti Műszaki és Gazdaságtudományi Egyetem Mechatronika, Optika és Gépészeti Informatika Tanszék, Gép- és Terméktervezési Tanszék (GT3), valamint az Eötvös Loránd Tudományegyetem Etológiai Tanszék és a Miskolci
Egyetem
Általános
Informatikai
Tanszék
közös
etológiai
indíttatású
robotrendszer fejlesztéséhez. A feladatkörömön belül a konkrétan elvégzendő munkám egy a Budapesti Műszaki és Gazdaságtudományi Egyetem, Gép- és Terméktervezési Tanszék által kifejlesztett esztétikus marker rendszer felismerése és kiértékelése volt. A marker rendszer felismerésén túl a munkám kiterjedt a marker színeinek és kódolásának alkalmas megválasztására is. A kutatócsoport tagintézményei között az alábbi feladatmegosztás alakult ki:
BME- MOGI: Robotok elkészítése [ ETHON ]
BME- GT3: Esztétikus Marker ELTE- Etológia: Viselkedés leírás ME- Általános Informatika: Szoftvertervezés, implementálás
1
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
2 F ELADAT ISMERTETÉSE A Miskolci Egyetemnek, azaz nekünk jutott ki talán a legszebb része a projektnek, a robot automatizálása. Ezt azért tartom a legszebb résznek mivel, ugyebár ebben a fejlesztési fázisban fog minden eddigi munka kiteljesedni és kiforrni. Az érzékelők, hangszórók és minden egyéb periféria, amely megtalálható a roboton az ebben a fázisban nyerik el az értelmüket. Ezek a feladatok, mint például az intelligencia programozása valamint a middleware és az afölötti részek elkészítéséhez szükséges technológia (gondolok itt a Kinect perifériára) az én meglátásom szerint a napjainkba kezd kiforrni. Az automatizálása magában foglalja a robot mesterséges intelligenciával való felruházását is, mivel neki ugyebár teljesen autonóm módon kell a nap 24 órájában működnie. Az előzetes tervek szerint, a Robotnak (neve: ETHON, és a későbbiekben is így hivatkozok már rá) portás valamint takarító funkciót kell majd ellátnia. A robotunk szülőföldje a BME- MOGI tanszéke így ez a teljes nevéből is kivehető. Teljes neve: MOGI ETHON RUBENS A MOGI a tanszék nevéből adódik, az ETHON az etológiára a RUBENS kifejezés pedig a színére utal. A Miskolci Egyetemen a projekt 2012. november elején kezdődött, amikor is a Robot Operation System (ROS) –et vizsgáltuk. Ekkor ismerkedtünk meg a ROS komponensekkel és a függőségekkel, amelyeket tartalmaz, ugyanis nem mindegy milyen operációs rendszerre vagy UNIX alapú (esetünkben Ubuntu Linux) disztribúció mely verziójára telepítettük fel a ROS-t. A függőségek felismerése után ezeket egyértelműen dokumentáltuk, hogy a szerzet tapasztalataink a későbbiekben könnyedén feleleveníthető legyen. Ezzel azért volt fontos foglalkoznunk, mert a rendszer struktúrájának tervezésekor minden lehetséges irányt meg kellett vizsgálnunk, mivel a jelenlegi tervezetek alapján számos ROS komponenst szeretnénk majd használni a kész rendszerben. A rendszer felépítésének tervezése után elkészítettük a rendszer modelljét, amely lentebb látható (1. ábra).
2
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
1. ábra – ETHON architektúra
A tervezet összeállítása után kerültek kiosztásra az egyes feladatok. Én mindig is szerettem volna foglalkozni a képfeldolgozás problémakörével, így hát amint adódott ez a lehetőség én örömmel jelentkeztem a Kinect komponens és a hozzá kapcsolódó problémák megvalósítására és jeleztem, hogy én ebből írnám a szakdolgozatomat. Az én kutatási területem, jelenleg amely eme szakdolgozatom címe is mutatja, a Marker alapú Robot lokalizációs rendszer fejlesztése (Marker Based Robot Localisation System). Mivel ezt a robotot teljesen autonóm eszközként szeretnénk megvalósítani, így elengedhetetlen a navigációs szektora, azaz aktuális helyzetének pontos meghatározás. A lehetséges megoldásokat végig vizsgálva jutottunk arra az eredményre, hogy az ETHON az általa bejárt folyosó falán elhelyezett Esztétikus Marker távolságából, szögéből valamint színösszetételéből határozza meg pontos helyzetét. Annak ellenére, hogy a Robot tartalmazni fog egy statikusan tárolt térképet - amelyet mi viszünk fel a rendszerébe – szükség van még egy fajta pontosabb és valódi idejű helymeghatározós megoldásra, amely a környezetet vizsgálva határozza meg a pontos helyzetét. Erre azért van szükség, mert a kerekek csúszhatnak a mozgásuk során, esetleg ha nem egyenesen arányos módon változna a pozíció a statikusan megadott beépített térképében, akkor se tévedjen el és okozzon kellemetlenségeket. Az egyik elgondolás tehát, hogy ilyen markereket helyeznénk el a lefedettségi területen, amely hordozná a helyzet információkat, majd ez alapján újra pozícionálná magát a megfelelő helyzetbe, ahol az adatbázis alapján lennie kellene.
3
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
A másik elgondolás, hogy a markerekbe csak az adott területre jellemző információt kódolnánk bele. Tegyük fel, hogy a Miskolci Egyetem Informatikai Épületében aktiválva van ez a robot és a folyosón lévő markerekbe tárolnánk el az épület egyes részlegeinek neveit, mint például a tanszékek neveit, vészkijárat felé vezető útvonal és így tovább. Figyelembe véve, hogy egy vezeték nélküli eszközről beszélünk, így az energia ellátása akkumulátor telepekkel van megoldva, melyek körülbelül 4 óra üzemidőt jelentenek különkülön. A robot alapot 3x100 watt kefés DC motor hajtja 1:7 szíjáttétellel, míg a perifériákat ellátó hajtások 30 wattos kefés DC motorok 1:7 szíjáttétellel. A tápellátást egy 24 amperórás 12V-os ólomzselés akkumulátor biztosítja. ETHON-nak annyira intelligensnek kell lennie, hogy amint érzékeli az akkumulátor feszültség egy bizonyos szint alá történő csökkenését, automatikusan a töltőállomásra kell navigálnia, majd csatlakoztatnia kell magát a hálózati töltőjére. Mikor a töltését befejezte, visszamegy a helyére és folytatja „őrző” funkcióját. Ahhoz, hogy a megfelelő eszközöket, módszereket alkalmazhassam a feladat megoldásakor, először a képfeldolgozás és a hozzá tartozó tématerületeket kellet megismernem. A továbbiakban e módszerekről lesz olvasható egy rövid bevezető valamint útmutatót használatukhoz. Az első dolog, amivel kezdenem kellett az az irodalomkutatás. Az egyetemi éveim alatt ugyan elsajátítottam képfeldolgozáshoz kapcsolódó ismereteket, de ezek csak az alapismereteket fedték le a feladatom megoldásához, így hát mélyebbre hatóan kellett utánajárnom a friss információkhoz, hogy a számomra legoptimálisabb módszereket használjam fel a projekt megoldásához. Egy adott szegmensben több módszer is létezett ugyan arra a célra, így figyelembe kellett vennem azt, hogy a mi rendszerünknek mindenképp Real-Time módban kellesz majd ezeket a vizsgálatokat végrehajtani, így ennek megfelelően kellett a döntéseimet meghozni. Persze jelentős mértékben befolyásolta e komponensek egymás szembeni függőségei. Mivel egy esztétikus markernél nem szabad figyelmen kívül hagynunk, hogy esztétikusi mivoltát fenn kell tartania, így nem csupán mérnöki szemmel kellett megnézni azt, hanem több perspektívából, mint például a design szempontjából is.
4
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
Mint
korábban
leírtam,
a
robotunk
ÉS
több
INFORMATIKAI KAR
féle
funkciót
is
el
fog
látni.
Ezen funkciók a következőek:
portás robot
takarító robot
egyéb (még nem definiált)
Funkciójából kivehető, hogy a robot sokat fog mozogni és lesz egy adott bejárási területe, amelyen üzemelni fog. Üzemelése alatt matematikai módszerekkel fogja bejárni a területét és az adott területet a markerekből kiolvasott információ alapján fogja azonosítani, tehát most foglalkozzunk csak ezzel az azonosításos dologgal. Mivel robotunk a szemével (Kinect) pásztázni fogja folyamatosan a környezetét marker után kutatva, és amint talált egy markernek tűnő objektumot, azt a jelenlegi pozíciójából beolvasva fogja értelmezni. Ez leírva így szépen hangzik, bár ez sajnos nem ilyen egyszerű. A felismert marker objektumot képfeldolgozási műveleteknek kell alá vetnünk, hogy torzításmentes képet kapjunk. A feldolgozás sorrendje valahogy így festene:
Kép elő feldolgozása
Élkiemelés
Küszöbölés
Sarokpontok keresése az él kiemelt képen
Kép visszatranszformálása egységnyi méretű négyzetekre
Háromszögekben lévő színértékek becslése
Kódolt információ markerből való kinyerése és ellenőrzése
Pozíció meghatározás
Most akkor nézzünk pár fogalmat képfeldolgozásokat végezhetünk.
e
5
témához
kapcsolódóan,
amelyekkel
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
3 I RODALOMKUTATÁS 3.1
NI, O PEN NI
Maga az, NI (Natural Interaction) az egy olyan elgondolás [1], ami az ember-gép interakciót elsősorban a látásra és hallásra akarja alapozni. A koncepció szerint az olyan eszközök, mint a távirányító, egér vagy billentyűzet szükségtelenek egy ember-gép interakcióhoz. Alapvető céljai közé tartozik a hangfelismerés és hangvezérlés, kézjelek felismerése, vagy akár a teljes emberi alakfelismerés, követés és interpretáció további felhasználásra. Az OpenNI pedig egy cross-platform, több programozási nyelven elérhető (C, C++, C#, Java) framework, ami API-kat szolgáltat az olyan alkalmazások készítéséhez, amik az NI (Natural Interaction) alapelvekre épülnek. Az API-kat interfészeken keresztül lehet elérni, amik azt a célt szolgálják, hogy egységes felületen lehessen kommunikálni a hardver elemekkel, amik „látnak és hallanak”, és a szenzoradatokat
feldolgozó
middleware-rel.
Ezek
a
middleware
elemek
olyan
szoftverkomponensek, amik a szenzorból érkező adatokat feldolgozzák, és olyan magasabb szintű információkat szolgáltatnak a nyers adatokon felül, mint például egy felismert kézfej pozíciója a 3D térben. Ez alapján tehát az OpenNI egy sor olyan API-t definiál, amit a hardvernek, vagy a szoftverkomponensnek kell kielégítenie. Ezzel létrehozva egy egységes környezetet, ami lehetővé teszi:
a hardver elemek egyszerű helyettesítését
több hardver egyszerre való használatát
szoftver komponensek újrafelhasználását, hordozhatóságát
Például, ha egy hardvergyártó implementálja egy eszközébenben az OpenNI interfészeket, akkor ezzel biztosítja, hogy az OpenNI-t használó szoftverek az ő készüléküket is használni tudják, gyakorlatilag szabványosan (ehhez persze minden hardvernek egy listát kell szolgáltatnia az elérhető szolgáltatásokról). Másik oldalról megközelítve pedig a szoftverfejlesztők olyan alkalmazásokat készíthetnek, amik függetlenek a konkrét hardvertől (attól, hogy melyik hardverből jön az adat), csak a
6
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
hardver 5 képességeit kell szem előtt tartani (lsd. előbb említett szolgáltatáslista), és függetlenek a middleware komponensektől is. A koncepciót a 2. ábra mutatja be. A legalsó réteg reprezentálja a hardver réteget, ide tartozik maga a KINECT eszköz is. A középső (zöld) réteg azokat a middleware alkalmazásokat jelöli, amik kielégítik az OpenNI API-t és valamilyen hardverre támaszkodva magasabb szintű adatokat szolgáltatnak (pl. nyers pixel adatok helyett egy kézfej pozícióját a térben). Az ezeket összekötő réteg maga az OpenNI, mely ez által egy egységes interfészt kínál a legfelsőbb szinten elhelyezkedő felhasználói alkalmazásnak. A felhasználói alkalmazásnak ez által egyidejűleg lehetősége van:
Middleware által kinyert információ felhasználására.
Nyers hardver adatok felhasználására.
Az OpenNI funkcionalitásait használni az előbbi két ponton.
Más API-kat (pl. OpenCV) használni bármelyik előbbi pontban leírt
információforrással.
2.
3.2
ábra – OpenNI architektúra (forrás: OpenNI dokumentáció, [1])
O PEN CV
Az OpenCV az Open Source Computer Vision (Nyílt Forráskódú Számítógépes Látás) rövidítése. Lényegében tehát az OpenCV egy olyan API amely számos hasznos módszerrel
7
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
segíti a képfeldolgozást. Mivel ez egy API ezért így nekünk már csak használnunk kell a bizonyos mechanizmusokat és nem kell bajlódnunk az algoritmusok megírásával. Mint tudjuk, a számítógép pixelinformációkat dolgoz fel, míg mi emberek alakzatokat, formákat. Ha egy képet úgy szeretnénk feldolgozni, hogy az emberi szemre hagyatkozunk, akkor megeshet, hogy az eredmény nem egyezne meg egy számítógépes feldolgozás eredményével, hiszen az intenzitásváltozást a szemünk nem képes olyan részletesen felismerni, mint egy számítógépes feldolgozás. Ami számunkra egyforma színűnek látszódik, az a gép számára már lehet, hogy eltérő. Vegyünk egy példát. Tételezzük fel, hogy van egy homogén háttér környezetünk, ami elé elhelyezünk egy tárgyat, amelyet egy fényforrással megvilágítunk és készítsünk egy felvételt. Kezdjük el szerkeszteni a képet. Tudjuk, hogy a fényforrás miatt árnyék keletkezett a háttéren, de ezt a szemünkkel nem feltétlenül érzékeljük. Nos, ebben az esetben a program már más színnek látja azokat a pontokat. Ha az aktuális helyzet megengedi, akkor csökkenthetjük a program érzékenységét, ilyenkor (az előbbi példánál maradva) az árnyék zajként jelentkezhet és egy sötét háttérnél ez nem jelent gondot. A színeket ugyanis a számítógépünk több komponensben látja, ami a feldolgozásnál meglepetéseket okozhat. Az OpenCV-ben sajnos sok algoritmus csak a szürke árnyalatos képpel működik. Az OpenCV alapvetően a BMP, JPG, PNG valamint a TIFF képformátumokat támogatja, míg a videó formátumok támogatása függ az operációs rendszertől. Amennyiben Windows operációs rendszert használunk, abban az esetben szinte minden videó formátumot támogat, amihez van Video for Windows kodek. Linux operációs rendszer alatt a hivatalos dokumentáció szerint az ffmpeget említi, bár a Fedora és az Ubuntu disztribúció esetén olvassa a GStreamer támogatta videókat. MAC OS esetén meg a Quick Time, ami alá létezik ffmpeg alapú kodek csomag. Az OpenCV tartalmaz egy úgynevezett HighGUI felületet. Ez egy lebutított keresztplatformos grafikai felület, amely lényege, hogy platform független módon egyszerű felületeket fejleszthetünk vele. Az eszközkészlete nem olyan tág, de létrehozhatunk benne ablakokat, képeket és csúszkákat is. [2]
8
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
3.3
ÉS
INFORMATIKAI KAR
R OBOT LOKALIZÁCIÓ PROBLÉMAKÖRE
A marker alapú robot lokalizációs téma nagyon jó valószínűséggel szép jövőnek örvendhet majd, hiszen akár tetszik az embereknek akár nem, a robotok meg fognak jelenni a hétköznapjainkban. Közöttünk fognak tevékenykedni, feladatokat ellátni és biztosan meg kell majd velük tanulni együtt élni is, de még ne menjünk annyira előre. A jelenlegi tény az, hogy egy robotnak tudnia kell a pillanatnyi helyzetét, ami elengedhetetlen a biztonságos, pontos és hatékony feladatvégzéshez. Ő nem tudja megmondani a környezet alapján csak úgy, hogy hol is van pontosan, de mivel a robotok (úgy általánosan) nagyon okosak ezért képesek referencia pontokból kiszámolni pillanatnyi helyzetüket. A legegyszerűbb igazából egy GPS adóval felszerelt, robot helyzet meghatározó lenne, bár ez így ránézésre is több sebből vérezne és nekünk fontos, hogy hosszú távon kell gondolkodnunk. Egy olyan robot, amely az alagsorban vesztegel, nagy valószínűséggel nem tudja lekérdezni a helyzetét egy GPS modul segítségével, vagy ha még is le tudná kérdezni azt nem lesz pontos valamint folytonos eredmény. Felelőtlenség lenne több százezer ilyen kis feladatokat ellátó robotokra ilyen GPS modul-t varázsolni, amely nem, hogy csak egy műholdat igényelne, de a folyamatos online kapcsolat (vagy offline) leterhelné az akkumulátorokat, amivel szintén nem vagyunk előrébb. Jelenleg a legáltalánosabb megoldás a mobil robotok tájékozódására, ha implementálnak a rendszerükbe egy akadály elkerülő algoritmust vagy mesterséges intelligenciát gépi látással. Bár az intelligencia hiányának esetén a robotok feladatvégzése és szociális interakciójuk erősen korlátozódik. A jelenleg használt markereket inkább a praktikusság alapján, mint az esztétikai szempontok szerint tervezték. Ezeket a markereket viszont nem látnánk szívesen a felhasználási területeken, főleg ha az otthonunkról lenne szó. Így hát kiforrt az ötlet, hogy mi lenne, ha ezek a markereket esztétikai szempontból terveznénk meg, amely esetleg a modern művészetet is szimbolizálná az érintett területeken. Egy Japán kutató csoport által készített felmérés [8] alapján 2035-re a (ki) szolgáltató robotok száma meg fogja haladni az iparban elhelyezett ipari és a gyártó robotok számát. (3.ábra)
9
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
3. ábra – Robotok népszerűsége funkciójuk szerint [8]
Ebből a felmérésből láthatjuk, hogy igen is már pedig meg fognak jelenni ezek a robotok. A legtöbb robot optikai marker segítségével tájékozódik, amely igényel ugyan némi mesterséges intelligenciát és látórendszert is. Ezek önálló döntéshozatalra is képesek.
3.4
M ARKEREK
A markereket lényegében két fő csoportra oszthatjuk. Léteznek a természetes és a mesterséges markerek. A nevükből könnyen kikövetkeztethető, hogy a természetes csoportba tartozók nem információ tárolás céljából lettek kihelyezve, hanem az a felhasználási terület részeit képezik, mint például az ajtók, ablakok vagy az épületben elhelyezett irányító táblák (pl.: „EXIT” irányjelző táblák) esetleg a tárgyak sziluettje. A mesterséges markerek is szétválaszthatók két csoportra. Vannak az ipari és az esztétikus markerek. A nevükből már gondolhatjuk is, hogy mi a kettő között a különbség. Az ipari markerek általában olyan felhasználási területeken alkalmazandók ahol a legfontosabb tényezők a gyorsaság és a pontosság és kevésbé fontos a méret, színkompozíció, alakzat. Ebből következtethető ki, hogy az esztétikus markerek a kevésbé fontos tulajdonságokat veszi előtérbe és arra helyezi a hangsúlyt. Egy éles rendszerben Real-Time feldolgozásra van szükségünk és egy ilyen feldolgozásnál számít az idő, költség és a pontosság is. Az esztétikai markerek több színt tartalmaznak és ennek köszönhetően több információval is bírnak, valamint a marker detektálását és a leolvasást is könnyebb elvégezni. [16]
10
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
3.5
ÉS
INFORMATIKAI KAR
ART OOL K IT
Nevét az Augmented Reality Tool Kit, azaz a kiterjesztett valóság megvalósításának az eszköze (programkönyvtára), amely a gépi látáson alapul. Napjaink talán egyik legújabb és dinamikusan fejlődő kutatási területe. A kiterjesztett valóság nem egyezik meg a virtuális valósággal. A virtuális valóság esetében a felhasználó egy mesterséges világot érzékelhet maga körül, míg az AR technológia mesterséges elemekkel egészíti ki a valós környezetet. Egy digitális kamera segítségével képesé válik markerek be pozicionálására, felismerésére, azok követésére. Nyílván való, hogy szükségünk van valami szabálybázisra, hogy a markereket felismerje, mint például egy négyzet és benne egy mintával. Az AR rendszer úgy működik, hogy a megfelelő matematikai eljárásokkal (függvényekkel) azonosítja a készülék kamera képén megjelenő jeleket (marker vagy „közönséges” kép), majd ennek következtében végre hajt valamilyen feladatot, mint például egy 3D-s modellt helyez a képernyőre. A markerek követésére számítógépes látási mechanizmusokat használ. Ez úgy működik, hogy a nyomon követő könyvtár valós időben számolja ki a kamerának a pozícióját a markerhez képest. Legyen egy 16×16-os mátrix, amelyet minden lehetséges markerre kipróbál. Ennek következtében a felhasznált markerek számában nő a markerfelismerés ideje. Amennyiben sikeres találatot ad a rendszer, kiszámítható, hogy milyen transzformációs mátrixot kell megadni a 3D-s megjelenítésért szolgáló OpenGL-nek. Alapértelmezett kamerakalibrálás tartozik hozzá, amely során a kamerák különböző mértékű képmezőelhajlása korrigálható. Az ARToolKit nagy hangsúlyt fektet a platformfüggetlenségre, ezért különböző operációs rendszeren futtatható (Windows, Linux, MacOS). Esetünkben saját markerrel fogunk dolgozni és szerencsére ennek a lehetősége is adott. A letöltött könyvtárban található marker-sablon felhasználására van szükség. A sablon segítségével elkészült markert az ARToolKit mk_patt programmal állítható elő a hozzá tartozó pattern fájl. A könyvtárcsomag segítségével több virtuális objektumot kezelhetünk szimultán, reagálhatunk a felhasználói interakciókra, az OpenGL segítségével 3D-s modelleket, valamint VRML animációkat jeleníthetünk meg. Egy ARToolKit alkalmazás az alábbi hat lépésből tevődik össze:
11
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
1. videó inicializálása, pattern fájlok és kamera paramétereinek beolvasása 2. videó képének lekérése 3. markerek detektálása és minták felismerése a videó képén 4. kamera-transzformáció kiszámítása a detektált mintához képest 5. virtuális objektum kirajzolása a detektált mintára 6. videó bezárása. Az 1. és 6. lépés inicializáláskor, illetve az alkalmazás befejezésekor történik, míg a 2-5. lépés az alkalmazás futása során folyamatosan ismétlődik. Az ARToolKit kétféle licensz alatt áll. A nem kereskedelmi felhasználás esetén a GNU General Public License (GPL) licensz érvényes az elkészített programokra. Üzleti célra való felhasználáshoz fel kell venni a kapcsolatot az ARToolworks-szel[2] a kereskedelmi engedély megszerzésének érdekében. [17] Tegyük fel hogy a kameránk optikája egy ideális és perspektivikus 3D-ból 2D-ba való leképező rendszer, majd e optika által leképezett képet ha analizáljuk és találunk egy olyan síkbeli sokszöget (markert, melynek ismerjük az eredeti geometriáját mint pl.: szögeit, oldalhosszait és a körüljárását), akkor ennek az alakzatnak a perspektivikus levetülésében azonosított csúcsainak 2D-s koordinátáiból a vetítési transzformáció szabályai alapján visszafejthető az alakzat eredeti 3D-s pozíciója és orientációja. Az ARToolKit elég széleskörű felhasználási területet tudhat magának mivel a szemantikus böngészés, reklámok, marketing, navigáció, szórakoztatóipar és még az orvostudomány ágak is komoly érdeklődést mutatnak iránta. Jelenleg két irányvonala van az AR technológiának. Ezek a markeres (4. ábra) és a marker nélküli (5. ábra, 6. ábra) feldolgozás.
12
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
4. ábra – Markeres felismerés [11]
Itt a készülék detektált egy markert (vastag fekete kerettel körülvett speciális kép/pattern) majd végrehajtotta a megfelelő műveletet, ami ebben az esetben egy virtuális épület modell. [11]
13
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
5. ábra – Marker nélküli (Markerless) felismerés [11]
Ezen a képen jól kivehető, hogy a valóságban nincs marker elhelyezve, de a detektálás még is megtörtént és a műveletet ebben az esetben is végrehajtotta, amely az eredeti valós képre egy Gekkó objektumot helyezett el.
6. ábra – Marker nélküli (Markerless) felismerés [11]
14
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
AR előnyei:
A technológia legfőbb előnye, hogy kifejezetten látványos megoldásokat alkothatunk segítségével.
A fejlesztőknek nem kell a képfeldolgozással foglalkozniuk.
Nagy lehetőségeket rejt az egyre nagyobb teljesítményű mobileszközökön történő alkalmazása.
Kevés használható keretrendszer létezik, ezért érdemes lehet belevágni egy saját rendszer fejlesztésébe.
Ami
sajnos
nehézség
az,
hogy
a
legjobb
keretrendszerek
relatív
magas
hardverkövetelményeket igényelnek. Egy népszerű AR keret drága és egy esetleges saját keretrendszer elkészítése időigényes feladat lenne, bár segítséget jelenthet, ha keresünk egy opensource keretet és azt használjuk, fel vagy esetleg átalakítjuk. [17] Mindenképp érdekes és egyébként is felkapott témának tartom a QR kódot. Egy kis bevezető erről az egészről, hogy milyen módon is tárolja az információit, és ezeket hogyan vagyunk képesek egyszerűen egy mobil telefonos alkalmazás segítségével kifejteni.
3.6
QR- KÓD
Ez egy kétdimenziós vonalkód, amelyet 1994-ben egy japán cég fejlesztett ki. A Quick Response-nak (Gyors Reagálás) a kezdőbetűiből jött a neve. A QR-kód hibatűrő képessége és széles adatformátum támogatottsága miatt vált nagyon elterjedté a felhasználók között. 2000-ben ISO/IEC 18004 néven nemzetközi nyílt szabvánnyá vált.
15
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
7. ábra – QR -kód felépítése [12]
A hiba vagy torzulás itt azt jelenti, hogy a kódbélyeg lefényképezésekor sokszor nem sikerül a mintázatot teljes pontossággal rögzíteni. A fényképezőgép (mobiltelefon) képfelbontásának korlátai miatt, vagy a kódbélyeg kis mérete, a rossz megvilágítás vagy valami szennyeződés miatt néhány jelpont rosszul látható lesz. A hibajavítás, tehát a hibák ellenére a kód tartalmának hibátlan kiolvasása úgy lesz lehetséges, hogy a kódba annak előállításakor már belefoglaltak olyan kiegészítő jelzéseket is, amelyek segítségével a dekódoló program bizonyos mértékű torzulást még képes tolerálni. Hogy ennek a jeltorzulásnak mikor mekkora a megengedett legnagyobb mértéke, a kód előállításához használt, szabványosított módszerek megválasztásán múlik, és ezt a kód elkészítésekor döntheti el a felhasználó, a használt program lehetőségein belül. A tárolt információ mennyiség karakter típusoktól függően a következőek: [13] Csak számokból:
Max. 7089 karakter
Alfanumerikus értékekből:
Max. 4296 karakter
Bináris adatok (8 bites szervezésben):
Max. 2953 bájt
Kandzsi/Kana:
Max. 1817 karakter
Egy másik csodálatos kutatás eredménye a Microsoft Tag aminek szerintem van jövője. Ez valamivel kevesebben ismerik még a szakmán belül nézve is, de ezzel is érdemes
16
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
megismerkedni, ugyan is van egy nagyon nagy előnye a QR- kóddal szembe, még pedig az információ tárolás elve.
3.7
M ICROSOFT T AG
A QR valamivel esztétikusabb, továbbgondolt változata, mely számos lehetőséggel bővíti a grafikus alapú információközlést. Egy marketing szempontból hasznos egyedi funkciója például a bizonyos tag-ek olvasási gyakoriságának figyelemmel kísérése. A feladat itt is ugyan az. Offline adatból Online adatkinyerés. Amibe különbözik a QR kódtól, hogy itt képeket is tartalmazhat a marker. A Microsoft Taggel alkotható kódoknak több verziója létezik. Az alapváltozat fekete hátterű, fehér, vízszintes sorokra felosztott kép, melynek sorain citromsárga, cián és magenta színű háromszögeket helyeztek el, ezek helyzete és színe kódolja a rögzített információt. Igény esetén azonban ez az ábra lehet fekete-fehér is, ilyenkor némileg változik az elrendezés. Az így közzétehető tartalom típusa lehet egy weboldal címe vagy egy e-mail cím, alkalmazásletöltési link, vCard formátumú névjegy, telefonszám vagy szimpla szöveg is. A legjobb az egészben azonban az, hogy az adott képek nem egy statikus információt tárolnak, hanem – ahogy a neve is mutatja (a tag angol szó jelentése címke) – címkéket: a mobilkészülékekre ingyenesen letölthető Tag-olvasó alkalmazás a címke alapján kérdezi le az ábrához tartozó információt valamilyen adatkapcsolatot használva. Így egyrészt a már említett két formátum, sőt hagyományos QR-kód és NFC chipek által értelmezhető jel is hordozhatja közlendőnket, másrészt a már kiadott információhordozó jelentése utólagosan is megváltoztatható. Ennek köszönhetően egy-egy ilyen ábra (8. ábra) folyamatosan frissíthető, másrészt akár időzíthető is annak érvényessége.
17
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
8. ábra – Microsoft Tag-ek
Egy ilyen Tag-et létrehozni nagyon egyszerűen a Tag.Microsoft [14] oldaláról lehet, ahová Microsoft-os account-unkal tudunk bejelentkezni. Egy általam létrehozott tag (9. ábra) az alábbi képen látható, aminek elkészítési ideje másodperceket vett csupán igénybe. A letöltött tag egy vektorgrafikus objektum lesz.
9. ábra – Egyéni MS Tag
Egy kód típusa és mérete mellett annak fájlformátuma is letöltéskor határozható meg. A támogatott kiterjesztések listája pedig PDF, TIFF, JPEG, PNG, GIF, TAG és TXT.
18
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
10. ábra – Összehasonlítási ábra [15]
3.8
M IDDLE W ARE
A számítástechnikában a robottechnika területén elterjedt fogalom. A middleware-eket elsősorban
az
összetettebb
robotirányítási
rendszerekben
alkalmazzák.
Ennek
köszönhetően a fejlesztők egyszerre képesek elérni az össze szoftver és hardver komponenst. Ezt szokták még glue szoftvernek is nevezni. A komponens közötti kommunikációk mellet segíti a komponens alapú fejlesztést is. Az egyes middlewarek különbözőek, mivel más-más megszorításokat és kompromisszumokat kell kötni különböző rendszerekben, valamint abban, hogy mely témakörhöz tartoznak a robotika területén. Lényegében a middleware egy olyan szoftver réteg, mely a heterogén platformok és protokollok hálózati rétege és az üzleti alkalmazások között helyezkednek el. Képes leválasztani az üzleti alkalmazásokat bármilyen függőségről, amelyet a hálózati réteg okozott. A hálózati réteg okozta függőséget a heterogén operációs rendszerek, a hardver platformok és a kommunikációs protokollok okozzák, ezért egy middleware tervezésénél a legfontosabb feladat az interfészének megtervezése. Egy összetett rendszer esetekor az interfészt úgy kell megvalósítani, hogy az ne legyen bonyolultabb, mint az össze alrendszer együttes kombinációja, mivel ha ezt nem vesszük figyelembe, akkor nem lehet a valós idejű tervezés előnyeit kihasználni. [3]
19
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
Middlewar-ek: [3]
ASEBA (Multiprocesszoros robotok kommunikációjára. Eseményvezérelt)
MARIE (Rugalmas elosztott komponensrendszer, gyors alkalmazásfejlesztés)
Miro (Elosztott objektum orientált keretrendszer, mobil robotok irányítására, C++)
Orca (Járművön lévő elosztott érzékelő-hálózat kezelésére, Ice C++, Ice Java)
ORiN (Szabványos módszerek eléréséhez, robot rendszerek irányításához interfész)
PEIS kernel (Érzékelők, működtetők, ill. automatizált háztartási gépekre)
Player / Stage rendszer (Platform eszközöket és algoritmusokat biztosít, C++, Java)
RSCA (Erőforrások meghatározott rend szerinti felosztására, valós idejű támogatásra)
RT-Middleware
UPnP (Dinamikus belső/külső szoftverintegrációhoz és irányításhoz)
3.8.1 RT-M IDDLE W ARE RT (Robot-Technology) a JARA (The Japan Robot Association) a METI (Japanese Ministry of Economy, Trade and Industry) és a AIST (National Institute of Advanced Industrial Science Technology) közös fejlesztése. RT-Middleware egy CORBA alapú implementáció. Kihasználva ennek az elosztott middleware-nek számos specifikációját. A prototípust OpenRTM-ben készítették el. [4]
3.8.2 R OBOT O PERATION S YSTEM A ROS (Robot Operatin System) egy meta-operációsrendszer, amely könyvtárai és eszközei segítségével teszi lehetővé a szoftver-fejlesztők számára robot alkalmazások fejlesztését. Többek közt hardver absztrakciót, hardver-illesztőket, könyvtárakat, megjelenítőket, üzenetküldési funkciókat, package managementet biztosít. A ROS open source, BSD licenc alá esik. [19]
20
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
4 E SZKÖZÖK
ÉS
INFORMATIKAI KAR
ISMERTETÉSE
A telepítéshez szükséges hivatkozások megtalálhatóak a forrásjegyzékben, így hát az első lépésként le kell töltenünk az összes komponenst, amit itt láthatunk is. Figyeljünk arra, hogy a sorrendiséget betartsuk. Az alábbi csomagok ingyenesen letölthetőek. Ami még nagyon fontos és bár sokan nem veszik figyelembe az az, hogy mindig (amennyiben van rá lehetőségünk) az eredeti weboldalról töltsük le ezeket. Rengeteg tutorial videó található róla az interneten, és számos blog bejegyzés is tárgyalja ezeket a témákat. Elképzelhető az is, hogy az egyes csomagokból verziófrissítés történt, amely nem biztos, hogy kompatibilis a többivel. Ez elméletben nem feltétlen kell, hogy gondot jelentsen, de előfordulhat, hogy egy újabb verzióval nem hangolódnak össze a többiek. A szakdolgozat készítésemnél én ügyeltem ezekre a dolgokra, és az (akkor még) legfrissebb verziókat töltöttem le, és melyeket teszteltem is. Egyszóval, az általam leírt instrukciók alapján, fel lehet konfigurálni ezeket a dolgokat saját számítógépünkre.
4.1
O PEN CV TELEPÍTÉSÉNEK MENETE
Java JDK [2]
Eclipse IDE for Java Developers [5]
OpenCV [6]
JavaCV [7]
FFmpeg [8]
VcReDist [9]
Windows Operációs Rendszer esetén: A rendszermeghajtó gyökér könyvtárába bontsuk ki a következőket. Eclipse, OpenCV, JavaCV, FFmpeg. A többi file-t értelem szerűen telepítsük a rendszerünkre. A következő lépésként a környezeti változó beállítása. Computer Properties Advanced Environment Variables Majd adjuk hozzá a következőket a User Variables-hez.
21
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
CLASSPATH C:\opencv\build\x86\vc10\lib;C:\opencv\build\common\tbb\ia32\vc10;C:\opencv\build\x86\vc10\staticlib;%CLASSPATH%
PATH C:\opencv\build\common\tbb\ia32\vc10\;C:\opencv\build\x86\vc10\bin\; A harmadik lépés a fejlesztő környezet (esetünkben az Eclipse) beállítása. Workspace-nek én a dokumentumok könyvtáramat adtam meg C:\Users\Ted\Documents\Eclipse-Workspace Hozzunk létre egy új Java projektet. File New Java Project Next „Add project ’JavaCVPrjt01’ to build path” Libraries Add External JARs Majd adjuk hozzá a C:\javacv-bin mappából a szükséges file-okat. Esetünkben elegendő a javacpp.jar, javacv.jar és javacv-windows-x86_64.jar file-ok hozzáadása. Ami nagyon fontos és tapasztaltam az, hogy a projekt futtatásakor különböző exceptionöket dob az IDE. Ekkor, amit célszerű leellenőrizni:
a környezeti változók helyesen vannak-e megadva
a komponensek letöltésekor ügyeljünk arra, hogy azonos architektúrájú programokat telepítsünk majd
4.2
a JAR file-okat jól adtuk e hozzá a projektünkhöz
L INUX O PERÁCIÓS RENDSZERRE VALÓ ROS TELEPÍTÉSE
A www.ROS.org [19] oldalon feltüntetik, hogy mely operációs rendszereket támogat valamint, hogy melyiket ajánlják és, hogy melyekre található meg csak „Kísérleti” (ún.: Experimental) változatban. Tehát amit ajánlanak, és amelyik rendszerre támogatják ezt a ROS-t az az Ubuntu Linux operációs rendszer. Az Ubuntu hivatalos weboldaláról letölthetővé vált a 3 nappal ezelőtt meg jelent változat. Hozzá kell tennem erre a friss verzióra nem volt külön link én pedig megpróbálva az előző
22
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
verzióhoz linkelt ROS csomaggal feltelepíteni a rendszeremre. Sikertelenül. A hiba, amire hivatkozott az az ún.
„csomagfüggőség”. Miután nem találtam megoldást erre a
problémára, a legutolsó Ubuntu változatra kiadott package alapján töltöttem le az Ubuntu egyel régebbi változatát, amelyen már nem jelentkeztek ilyen csomagfüggőségi problémák. Miután tehát felállt a rendszerem azután követtem az oldalon lévő instrukciókat. Első lépésbe szükségem volt egy terminálra. A terminálba le kellett tölteni az aktuális rendszerhez lévő csomagokat a packages.ros.org szerveréről.
Parancsa a következő: • sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu precise main" > /etc/apt/sources.list.d/ros-latest.list' A következő lépésben a kulcsok beállítása történt: • wget http://packages.ros.org/ros.key -O - | sudo apt-key add
4.3
A ROS TELEPÍTÉSE
Első sorban meg kell győződnünk, hogy a legfrissebb csomagokat, használjuk. • sudo apt-get update Majd számos különböző megoldást választhatunk a könyvtárak és az eszközök telepítésére. Az oldal ad nekünk négyféle konfigurációt, amely közül választhatunk ahol saját magunknak is tudjuk telepíteni a ROS Stack-eket egyénileg. Ezeket nem csak terminálból tehetjük meg, hiszen az oldal feltüntet egy linket, amely az Ubuntu szoftverközpontra navigál. A négy konfiguráció az alábbi: Desktop-Full Install: (Ez az ajánlott): Itt mindent feltelepíthetünk egyszerre. ROS, rx ( Az r x stack tartalmazza a GUI-hoz kapcsolódott eszközöknek a használatát beleértve az rxbag, rxgraph, rxplot, rxconsole), rviz ( Ez egy 3D vizualizációs környezet a robotokhoz a ROS-ban), robot-generikus könyvtárak, 2D/3D szimulátorok, navigáció és 2D/3D érzékelés • sudo apt-get install ros-fuerte-desktop-full
23
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
Desktop Install: ROS, rx, rviz és robot-generikus könyvtárak • sudo apt-get install ros-fuerte-desktop ROS-Comm: (Félig előkészített) ROS csomagok, szerkezet, és kommunikációs könyvtárak. Nem GUI-s eszközök! • sudo apt-get install ros-fuerte-ros-comm Individual Stack: (Egyéni Stack) Tudunk telepíteni egy adott ROS stack-et ( Ki kell cserélni a kötőjeleket a STACKet a telepítendő stack nevére): • sudo apt-get install ros-fuerte-STACK Például: • sudo apt-get install ros-fuerte-slam-gmapping • sudo apt-get install ros-fuerte-turtlebot-simulator [19]
4.3.1 K ÖRNYEZET
TELEPÍTÉSE
Ez akkor alkalmas, ha a ROS környezeti változók automatikusan lettek hozzáadva az én bash session-ömbe minden egyes alkalommal mikor egy új shell-t indítanak. • echo "source /opt/ros/fuerte/setup.bash" >> ~/.bashrc • sudo gedit ~/.bashrc • echo $ROS_PACKAGE_PATH Majd ha megnyitottuk a bashrc-t akkor itt böngészgethetünk picit. Legalul látható az elérési útvonal ahová, ha elnavigálunk, akkor láthatjuk a csomag tartalmát. Ha több mint egy ROS disztribúció lett telepítve,
akkor a „~/bashrc” csak a forrás
szükséges setup.bash amely verzió jelenleg használva volt. Amennyiben csak meg akarom változtatni a jelenlegi shell-emnek a környezetét akkor csak ez kell: • source /opt/ros/fuerte/setup.bash A legtöbb ROS felhasználó szeretné fejleszteni az ő saját csomagjait. A legjobb módja annak, hogy beállítsuk a környezetünket az, hogy létrehozunk egy szegmentálást.
24
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
4.3.2 Ö NÁLLÓ
ÉS
INFORMATIKAI KAR
ESZKÖ ZÖ K
A ROS-ban a rosinstall és a rosdep gyakran használt parancssori eszközök, amelyek külön vannak szétosztva. Ezen eszközök telepítéséhez le kell, futtatunk az alábbi kódot: • sudo apt-get install python-rosinstall python-rosdep
4.3.3 O KTATÓ
VIDEÓK
Az első tutorial video bemutatja, hogyan kell feltelepítenünk a ROS-t a rendszerünkre, valamint az egyik stackban lévő kis alkalmazást ki is próbálhatjuk. Persze előbb fel kell telepítenünk azt a bizonyos stacket. • sudo apt-get install ros-fuerte-slam-gmapping Telepítés után: • rospack find turtlebot_gazebo (rákeresünk) • roscd turtlebot_gazebo (ezzel elnavigálunk a györérbe) • ls (kilistázzuk a mappa tartalmát) • cat manifest.xml (megnyitjuk a manifest xml-t) • cd laucnh • roslaunch turtlebot_gazebo turtlebot_empty_world.launch (futtattunk)
4.3.4 E CLIPSE
TELEPÍTÉSE
• Ubuntu szoftverközpontjából vagy • sudo add-apt-repository ppa:eclipse-team/ppa && sudo apt-get update && sudo apt-get upgrade
25
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
4.4
ÉS
INFORMATIKAI KAR
K INECT SZENZOR INTELLIGENS TEREKBEN
Olyan alkalmazási területeket szeretnénk megvizsgálni, ahol a szenzor speciális adottságait kihasználva érdekes és innovatív feladatokat lehetne megoldani. A szenzor tulajdonságait megvizsgálva rádöbbenünk, hogy ez alkalmas robotvezérlés valamint kiterjesztett valóság (augmented realty) biztonság technikai, vagy akár a biometriai felhasználás is. Az alkalmazás feltéttele a szenzor tesztelése. Elsősorban nem egy konkrét probléma megoldhatóságát akarom megvizsgálni, hanem általános paramétereket tesztelni, amik körülhatárolják a felhasználás lehetőségeit (hatótávolság, érzékenység, felbontás). Az NI egy olyan módszer amely az ember-gép interakciót elsősorban a látásra és a hallásra akarja alapozni. A koncepció szerint az olyan eszközök, mint a távirányító, egér vagy billentyűzet szükségtelenek egy ember-gép interakcióhoz. Alapvető céljai közé tartozik a hangfelismerés és a hangvezérlés, kézjelek felismerése, vagy akár a teljes emberi alakfelismerés, követés és interpretáció tovább felhasználásra. Az OpenNI egy cross-platform, ami C, JAVA és hasonló nyelveken elérhető. [16]
4.5
RGB HSV TRANSZFORMÁCIÓ
Az RGB red, green és blue komponenseit át kell transzformálni a HSV Hue, Saturation és Value komponensekre. Az RGB komponensei 0 és 255 közötti értékeket vehetnek fel. A HSV esetében a h [0, 360], az s [0,1] és a v [0, 255] közötti értékeket vehetnek fel. Az átalakítást a következőképpen kell végezni: Vesszük az RGB komponensek minimumát (
) és maximumát (
különbségét, . A Ha
értéke a
lesz.
nem , akkor ,
különben
A
,
érték kiszámítása a
értékeket vesz fel. -tól függ:
26
), majd ezek
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
Ha
a
, akkor
,
ha
a
, akkor
,
ha b a
, akkor
Majd
.
-t fokokba kell alakítani:
-t meg kell szorozni
-al. Amennyiben az eredmény negatív érték, akkor
hozzáadunk.
27
-ot
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
5 A LKALMAZÁS 5.1
A Z ALKALMAZÁS RÖVID ISMERTETÉSE
Az alkalmazás, amelyet készítettem egy összetett rendszer egyik komponensét képzi. Tehát az én alkalmazásom egy bitmap kiterjesztésű előre feldolgozott képet vár, majd ezt vizsgálja meg az általam készített kiértékelő algoritmusom alapján, majd ezek után eredményként egy egész számot ad vissza. Ez az egész szám egy információ adattagnak fog megfeleltetődni, amelybe bár mit letárolhatunk (esetünkben ez robot helyzete az épületben). Az bitmap képet egy elő feldolgozó komponens fogja átadni ennek a komponensnek. Ez sajnálatos módon a szakdolgozatom leadásának idejéig még nem készült el, ezért nem tudtam valós rendszerben tesztelni csak úgy, hogy ha én adok meg egy feldolgozott zajmentes képet. A még el nem készült komponensbe lesz majd benne a marker detektálása, transzformációja és az egyéb elvégezendő képfeldolgozási műveletek.
5.2
A Z ALKALMAZÁS STRUKTURÁLIS LEÍRÁSA
Az alkalmazás felépítésénél fontos hangsúlyt fektettem a program kód átláthatóságára, valamint a valós-idejű rendszer fenntarthatóságára. Így hát a rendszer struktúrája a következő kép alakult. Négy osztályt készítettem:
ReadingOfMarker.java
MIN_MAX_VALUE.java
Square.java
Colours.java
Az alábbiakban ezeknek az osztályoknak a metódusait valamint algoritmusait ismertetem. Kezdésnek a Square mellék osztályát választottam, hogy jól megérthető legyen a rendszer működése.
28
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
5.2.1 S QUARE
ÉS
INFORMATIKAI KAR
OSZTÁLY
Magát a markert, most vizsgáljuk meg csak színek nélkül mivel úgy sem az alapján olvasunk, hanem egy XY koordinátán alapuló algaritmuson keresztül. A markerünk szerkezetei felépítése a következő: (11. ábra)
11. ábra – Marker szerkezete
Láthatjuk, hogy ezt legegyszerűbben úgy tudjuk felfogni, mint egy 3*3-as mátrixot, amely elemeiben még a fő átlók nincsenek berajzolva, de most maradjunk csak magánál a mátrixnál. Ezt a programozásban úgy tudjuk feldolgozni, mintha a mátrixunk elemeit egymás után sorba raknánk. Azaz listába szervezzük az egyes négyzeteket. Ezt a programozásban sorfolytonos tárolásnak hívják, amelyet a 12. ábrán láthatunk.
12. ábra – Sorfolytonos tárolás
Minden egyes ilyen square objektumnak van, négy belső objektuma, melyeket a testátlók határ vonalai által kettészelt, háromszögek alkotnak. A négy vizsgálandó rész a kódban:
Top
Left
Bottom
Right
29
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
Az algoritmus bejárási sorrendje is ez. Ezekbe tároljuk el az aktuálisan vizsgált objektum „háromszögeinek” színeit. A szerkezeti felépítése a 13. ábrán látható.
13. ábra – Square objektum felépítése
A marker leképezése a lista szerkezetre a következő ábrán (14. ábra) szemléltetem. A körüljárási irány a lista sorrend, tehát először az 1. Square négyzetet vizsgálja majd annak a Top Left Bottom Right objektumait, majd utána ezt sorfolytonos módon folytatja.
14. ábra – Markerből Lista
Ebben az osztályban a Setter és a Getter metódusok vannak deklarálva a különböző háromszög objektumok értékeinek beállításához és lekérdezéséhez. (15. ábra)
30
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
15. ábra – Square osztály
5.2.2 C OLOURS
OSZTÁLY
A Colours osztályomnak egy enum osztályt választottam. Lényegében az enum fix konstans értékek létrehozására használható. Mivel típusos, így biztonságosabb, mint egy int konstans. Nem tudunk példányosítani egy enum-ot. Csak és kizárólag az enum-on belül lehet az előre meghatározott példányokat létrehozni.
16. ábra – Colours osztály
Az alkalmazásom a színekkel dolgozik majd attól függően, hogy milyen színű, annak megfelelően rendelünk hozzá értéket. A végeredmény így egy 36 tizedes jegyű egész szám, melynek letárolása BigDecimal típusban történik.
5.2.3 MIN_MAX_VALUE
OSZTÁLY
Ebben az osztályban (17. ábra) az RGB HSV színtérbe való konvertáláshoz szükséges minimum és maximum elemkeresési RGB komponensek közötti vizsgálatot végzem el és határozom meg a MIN_2 és a MAX_2 egész típusú változóba, majd a ReadingOfMarker osztályomnak ezeket a változókat adom át majd a végleges konverzió ott történik meg.
31
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
17. ábra – calculate metódus
A MAX_2 és MIN_2 változók értékeit egy-egy get metódussal tudom lekérdezni. Végezetül az utolsó osztály, amelybe minden mechanizmus eredménye összpontosul és akol a kiértékelés is történik.
5.2.4 R EADING O F M ARK ER
OSZTÁLY
Ebben az osztályban kerül átadásra a már elő feldolgozott, zajmentes marker.bmp kép, amiből az információt kell kinyerni. Az alábbiakban ennek a menetét fogom részletesen ismertetni. Vegyük először a main metódust, mivel úgy is itt hívom meg a részfeladatokat végző metódusokat és osztályokat. Első lépésként létrehozza a 9 db square objektumot, azaz lefoglalja a helyüket a memóriában, majd meghívódik az open metódus. Ebben található a kép megnyitása az OpenCV használatával, valamint a kép szélességének és magasságának lekérdezése, valamint a színrendszer beállítása (RGB). Majd ezek után egy for ciklussal végigmegyek a square objektumaimon és feltöltőm őket a transform_T, transform_L, transform_B és transform_R metódusokon, ezek meghívásával és az éppen aktuális ciklusváltozó paraméterként történő átadásával. Ez a metódus egy XY_TOP (vagy az éppen aktuálisan vizsgált objektumot XY_TOP, XY_LEFT, XY_BOTTOM, XY_RIGHT) által kiértékelt indexeléseket használja.
32
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
18. ábra – XY_TOP metódus
A transform-s metódusok ezt az XY_TOP,… metódusokat hívják meg melyekben megkapják az X és Y koordinátákat, melyekről kiolvasva az adott pixel RGB színtérbeli komponenseket a MIN_MAX_VALUE osztály meghívásával megkapott MIN és MAX értékek után a HSV színtérbeli komponensekre konvertálja a színkódot. Ezzel megszereztük az aktuális képpont HSV színtérbeli összetevőit, majd ezek alapján határozzuk meg a háromszög színeit. A színek megválasztása ennél a pontnál a legfontosabb, hiszen, olyan színeket kell választanunk, amelyek Hue (színezet) komponense megfelelően távol esnek egymástól. A 18. ábrán látható az első sor felső háromszögeire történő koordináta meghatározás. Az ábráról jól kivehető hogy egy g_x számot hozzáadunk az X koordinátákhoz, majd a végén az Y koordinátához is hozzáadunk egy g_y számot. Ebbe a két változóban vannak letárolva a véletlen szám generátor által létrehozott értékek. A véletlen szám generátor implementációját a 19. ábra mutatja be. A radius változóban az aktuálisan vizsgált marker kép szélessége alapján számolja ki a 12,5 %-át, amely maximálisan megengedett értékét jelenti a háromszögen belüli a pontok vizsgálatának sugarának meghatározásához. A g_n változóba generálódnak az értékek a szélesség 12,5% - 6,25% közötti intervallumon, hiszen a háromszög középpontja a kiinduló pontunk és ekörül kell negatív valamint pozitív intervallumon haladnunk az X és Y tengelyeken. Ebből a generált értékekből választjuk szét, hogy mely értékek mely koordináta meghatározásához kerülnek hozzáadásra. A szétválasztást a modulo meghatározásával oldottam meg. Azaz ha egy szám páros, akkor a g_x változóba kerül tárolásra, ha az épen generált szám pedig páratlan, akkor a g_y változóba. Így elkerülve a többségi szavazásnál ugyan azok pontok vizsgálatát.
33
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
19. ábra – randomNumber metódus
Az XY_TOP metódus meghívása után eltárolódtak a háromszögek egy belső pontjának az XY koordinátái, melyekből az OpenCV egyik eszközének köszönhetően képesek kiolvasni az adott pixel RGB színtérbeli összetevőit, melyeket letárolva átadjuk a 20. ábrán látható kódrésznek. Ez a kód végzi a RGB HSV átalakítást. Az átalakításhoz használt matematikai hátteret az 5.5 pontban részletesen taglalom. Első lépésként a MAXdifferenceMIN változó értékét állítjuk be, majd ezután határozzuk meg az átszámítási képleteknek megfelelően a H, S és V komponens értékeit, majd mivel ezeket a típusfüggőségek miatt a Math.round eszköz használatával kerekítjük. A MAXdifferenceMIN változóba elmenjük az RGB komponensek közül a legmagasabb értéket, amire a konverzió miatt van szükség. Arra az esetre, ha a Green komponens értéke kisebb lenne, mint a Blue komponens értéke akkor, hogy ne kapjunk negatív értéket így a H értéket szükséges mínusz egyel szoroznunk.
20. ábra – RGB HSV transzformáció
34
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
Mivel letároltuk a H, S és V komponensek értékeit is így már megvan a vizsgált képpont színének a HSV színtérbeli ábrázolása. A következőkben a komponensek színekre való leképezése kerül meghatározásra. A színek módját főleg a H azaz a színezet érték alapján határozzuk meg, de a meghatározásban szerepet játszanak a S és V komponensek is. A kiindulási alap, hogy a színeket 60°-os periódusokban vizsgáljuk így az értékek a következő képen alakulnak:
Piros: 0°
Sárga: 60°
Zöld: 120°
Kékeszöld: 180°
Kék: 240°
Bíbor: 300°
Majd ezeknek választottam egy megfelelő szélességű intervallumot, amely a periódusok fokértékével egyezik meg. Intervalluma: (60°)
Piros: [331° - 30°]
Sárga: [31° - 90°]
Zöld: [91° - 150°]
Kékeszöld: [151° - 210°]
Kék: [211° - 270°]
Bíbor: [271° - 330°]
Az eddigiekben ugyebár csak a H érték alapján vizsgáltunk, tehát jöjjön a maradék két komponens vizsgálta. A fenti intervallumba eső színek tökéletesen meghatározhatók ezzel a beállítással, bár ha narancs sárgát vagy lilából két árnyalatot is tartalmaz a markerünk, azt már nehezebb megkülönböztetni egymástól. A Saturation és a Value komponens a telítettséget és a világosságot kompenzálja a megadott értékeknek megfelelően. Ezt a problémát úgy oldottam meg, hogy a szűrési határokat a lehető legoptimálisabb feltételek megadásával állítottam be.
35
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
A színek telítettség (S) értékei nem lehetnek egyenlők nullával (S ≠ 0), valamint a világosság értéküknek nagyobbnak kell lennie tíznél (V > 10). Ugyebár ezzel még a zajokat nem kezeltük le. Mely zajok előfordulására a legnagyobb az esély? A feketére és a fehérre. Mivel vagy nincs elég fényviszony vagy túl sok van. A fekete és a fehér szín leíró intervallumait úgy határoztam meg, hogy a fekete esetében csak és kizárólag a világosság komponenst vizsgálom ahol a képpont akkor fekete, ha V komponense kisebb, mint 15. Míg a feketénél csak a világosságot figyeltem, addig a fehérnél ennél picit bonyolultabb a helyzet így itt a világosság mellett a telítettség (S) komponenst is vizsgálom. A feltétel, hogy a telítettségnek nullának kell lennie, a világosságnak pedig 90 –től nagyobbnak.
21. ábra – HSV szín paletta
Attól függően, hogy melyik feltételnek felelet meg a vizsgált képpont, letárolásra kerül az arrayT[i][c] (ahol c=1,2,3,….8) elemének inkrementálása egyel. Az én teszt programom jelenleg 60 elemet vizsgál meg, tehát összesen egy háromszögen belül 60 db véletlenül
36
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
generált pontot vizsgál meg és értékeli ki a színét, majd az arrayT megfelelő indexű elemének értékét növeljük, egyel. Mikor ezt meg tette az össze háromszöggel, egy maximumkeresést alkalmazva meghatározzuk a legmagasabb értékű elemet és eltároljuk a megfelelő színt majd a hozzárendelhető egész értéket. A rendszer nyílván annál hatékonyabb minél több pontot tudunk megvizsgálni. 60 db vizsgált képpont esetén egy nagyon jól hibatűrő rendszert kapunk. Az adott háromszög színét is eltárolja egy colours típusba így minden egyes háromszög értékét külön le tudjuk kérdezni, valamint egy egész számú értéket is megfeleltet neki. Ezek az értékek a következő képen néznek ki:
1- Piros (RED) 2- Narancssárga (ORANGE) 3- Sárga (YELLOW) 4- Zöld (GREEN) 5- Cián (CIAN) 6- Kék (BLUE) 7- Lila (PURPLE) 8- Sötét Lila (DPURPLE) 9- Fehér (WHITE) Tehát ezek az egész számok fésülődnek össze, majd alkotják meg a végeredményt, amely egy 36 jegyű egész szám. Ennek egy adatbázisban megfeleltethető lesz egy érték, amely jelen pillanatban még nincs kidolgozva, de lehet, hogy további konverzióra lesz szükség, mert ezt a 36 jegyű számot nehéz kezelni.
37
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
6 E REDMÉNYEK Ezzel a módszerrel nagyon magas valószínűséggel jó értéket olvashatunk ki. Az én teszt markerem a 22. ábrán látható. Ezek a színek megfelelő távolságra helyezkednek el a színpalettán egymástól, így nagyon jól leírhatóak az intervallumaik.
22. ábra – Teszt marker (RGB alkotószíneiből)
Az általunk használt marker séma a 23. ábrán látható. Összehasonlítva a 22. ábrán látható markerrel észrevehető az, hogy itt már megjelent két azonos szín, melyek csak a telítettség és a világosság komponensben térnek el, míg a színezet értékek közel azonosak. Az ilyen mértékben egymásra megegyező színeket, ha lehet, kerüljük, mert ha a fényviszonyok is közbe szólnak, akkor nehéz őket megkülönböztetni, mivel az egyébként is sötét szín még sötétebb lesz és annak az árnyalata meg a másik színnek fog megfelelni.
23. ábra – Markerünk
A következő marker (23. ábra) a rossz fényviszonyokat próbálja tükrözni. Míg az alkalmazásom a 22. ábrán látható markerre 100%-os sikerességgel olvasta ki az értékeket,
38
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
és minden színre tökéletesen a megfelelő értéket feleltette meg, addig a 24. ábrán látható markernél már a lila és a sötétlila színek megkülönböztetése nem járt ilyen jó sikerrel. Habár ez egy lényegében tökéletes kép, még itt is se képes megkülönböztetni az egymásra hasonló színeket.
24. ábra – Markerünk rossz fényviszonyok mellett
6.1
K INECTTEL VETT MARKER MINTÁK
A kinect alapértelmezetten 8 bites VGA (640 × 480) felbontást használ egy Bayer színszűrővel, de maga a hardver képes akár (1280 × 1024) felbontást is, de alacsonyabb frame rate-el. Ha az alapértelmezett VGA képből indulunk ki, láthatjuk, hogy nem teljesen tökéletes képet nyújt a kamera számunkra, és nekünk ebből még információt is kell kinyernünk, de ugyan akkor a célnak megfelel. A 25. ábrán látható egy túlexponált marker kép, amelyet képfeldolgozási műveletekkel kihúzunk a síkba. Annak ellenére, hogy a kinect nem használ vakut-t, de a markeren még is fehér foltok (zajok) jelentek meg. Ezeket a fehér foltokat a benti neonvilágítás és az ablakon bejutó természetes fény együttese okozza. Amennyiben e tényezők számát képesek vagyunk lecsökkenteni akár a felére (ablakmentes folyosó rész ahol állandó intenzitású a mesterséges fény) akkor a színek leírásánál azt figyelembe véve kiküszöbölhető a hibás színdetektálás.
39
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
25. ábra – Marker terület inverzének kivonása
A 26. ábrán azt néztem meg, hogy az oldalról felvett marker transzformáció után mennyire lesz használható. Az eredmény meglepően jól sikerült. Látható, hogy az élek majdnem, hogy szabályosak.
26. ábra – Túlexponált kinect kép síkba transzformálása
40
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
Az alábbi képen az előző műveletet láthatjuk, csak ezen a képen kevesebb a zaj található és a síkba transzformálás mértéke is kevesebb, így az arányok tisztábbak, pontosabbak és jobban kivehetőek.
27. ábra – Marker síkba transzformálása
A módszer működik bár nem a legdinamikusabb, ha tudjuk a markereket tartalmazó színeket, akkor előre definiálnunk kell azokat, és azoknak megfelelően meghatározni az intervallumokat. Ennél a képnél (27. ábra) láthatjuk azt, hogy mikor alul exponált a kép akkor a hasonló színek nem biztos, hogy eltérőek a gép számára. Ebben az esetben én egy egyszerű világosítási be szabályzóval állítanék a képen, amelyet könnyebben fel tud dolgozni. (28. ábra)
28. ábra – Marker világosítása
41
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
7 T OVÁBB
ÉS
INFORMATIKAI KAR
FEJLESZTÉSI LEHETŐSÉG
A későbbiekben úgy gondolom, hogy a színek számát nem kellene 9db fölé vinni, mivel akkor abban az esetben nagyon keskeny lenne a színeket elszeparáló megkülönböztethető intervallum, valamint az eredmények tárolásánál is gondot jelentene, ugyanis más módszert kellene rá alkalmazni. A rendszert tovább szeretném majd fejleszteni a későbbiekben, hogy hibatűrőbb legyen az alul illetve a túlexponált képek esetében. Meg kell találni a tökéletes módszert a kép síkba transzformálásához, valamint le szeretném kezelni azokat a kivételeket is melyek akkor keletkeznek, mikor a rendszer hibásan ismer fel egy markert, azaz ha a marker kódja, nem létezik. Ebben az esetben alkalmazásnak újra kell vennie a képet miközben a robot pozíciója, változik, így lehet, hogy egy kedvezőbb szögből nézve a kép optimálisabban fogja vissza adni a színeket és az érték kiolvasható lesz. Amennyiben a rendszert már elég teszten lefutattuk és mindent tökéletesítettünk, majd miután elég eredménnyel rendelkezünk a pontosságról és a megbízhatóságról, akkor szeretném implementálni Android platform-ra is. Érdemesnek találom a Microsoft TAG tárolási elvének implementálását is a rendszerbe, így online is le lehetne kérdezni egy egyszerű andorid rendszerű okostelefon alkalmazással az tárolt információt, és az esetleges információ frissítés esetén is naprakész lenne a leolvasó.
29. ábra - ETHON
42
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
8 I RODALOMJEGYZÉK 8.1
E LŐADÁSOK , TANULMÁNYOK , WEBOLDALAK [1] Open NI: http://www.openni.org/ [2] Java SE Developement Kit 7: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads1880260.html [3] Middleware: http://en.wikipedia.org/wiki/Robotics_middleware [4] Middlewarek a robotikában: http://www.ektf.hu/agriamedia/data/present/188/188_present.pdf [5] Eclipse IDE for Java Developers: http://www.eclipse.org/downloads/ [6] OpenCV: http://opencv.org/ [7] JavaCV: https://code.google.com/p/javacv/downloads/list [8] FFmpeg: http://ffmpeg.org/download.html [9] Microsoft Visual C++ 2010 Redistributable Package (x64): http://www.microsoft.com/en-us/download/details.aspx?id=14632
[10] Ministry of Economy, Trade and Industry: http://www.meti.go.jp/english/press/data/20100423_01.html [11] Augmented Reality: http://www.arlab.com/blog/markerless-augmented-reality/ [12] QR- kód:http://qr-kod.hu/mi-az-a-qr-kod [13] QR- kód: http://en.wikipedia.org/wiki/QR_code [14] Microsoft Tag: http://tag.microsoft.com [15] Microsoft Tag: http://www.istartedsomething.com/20090108/microsoft-tagmicrosofts-own-2d-barcode/ [16] Tudományos Diákköri Konferencia 2012 – Esztétikus markerek robot lokalizációhoz: http://mogi.bme.hu/service/download.svc?path=_TDKPROPS_&file=VER LMS5kb2N4 [17] ELTE AR portál: ARToolkit http://arportal.elte.hu/index.php?option=com_content&view=article&id=10:arto olkit&catid=7:ar-toolkitek&Itemid=11
43
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
[18] Kiterjesztett valóság: http://codeguide.hu/2013/01/13/kiterjesztett-valosagalapok/ [19] Robot Operation System: http://www.ros.org/wiki/
Linkek utoljára ellenőrizve: 2013. május 18.
8.2
K ÖNYVEK [1] Learning OpenCV: Computer Vision with the OpenCV Library 2008 [2] OpenCV 2 Computer Vision Application Programming Cookbook 2011 [3] Making Things See: 3D vision with Kinect, Processing, Arduino, and MakerBot 2012 [4] Képfeldolgozás: Dr. Czap László, HEFOP Miskolci Egyetem 2007
44
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
9 Ö SSZEGZÉS Az alkalmazásfejlesztést a C++ nyelven kezdetem, mivel gépközeli nyelv és a legtöbb komponens is ezen a nyelven íródik ebben a témakörben, és aki jártas ebben a környezetben annak ezt ajánlom. A nyelvben való jártasság hiányában azonban át tértem a Java programnyelvre. Fejlesztő környezetnek az Eclipse IDE for Java Developers Juno Service Release 2 változatát választottam és az OpenCV –t is erre az IDE-re állítottam be. Ezekről természetesen készítettem egy részletes útmutatót is, amit ebben a dolgozatban publikáltam. A következő nagy probléma a képből való információ kinyerésének kérdése volt. Milyen elven, milyen módszerekkel, milyen algoritmussal tegyük meg azt, úgy, hogy a színek értékei és azok sorrendiségei is számítanak valamint figyelembe kellett venni azt is, hogy az alkalmazásom már egy előre feldolgozott (síkba transzformált, él kiemelt) képet fog kapni és így azok méretei nem biztos, hogy konstansok lesznek. Így hát az algoritmus, amit készítettem bármilyen méretű kapott képnél működni fog, mivel lekéri a kép szélességét és azzal az értékkel fog számolni, ahol viszont a vizsgálandó pontok koordinátáját értékeljük ki, ott százalékosan határozza meg az X és Y koordinátákat. A többségi szavazás ilyenkor kap szerepet, hiszen egyazon háromszögen belül több különböző véletlenül generált képpontot vizsgál meg és a legtöbb szavazatot kapott színre állítja be az objektum értékét. A színek száma maximálva van, így csak 9 különböző színt tudunk definiálni. Amire figyelnünk kell azok a színek értékeinek helyes megválasztásai. Próbáljunk arra törekedni, hogy a lehető legnagyobb távolságra állítsuk be a szomszédos színeket, így elkerülve a hibás kiértékelést. Végezetül, nagyon örülök, hogy ezt a témát választottam, mert számos információval lettem gazdagabb és így egy teljesen letisztult képet kaptam a Computer Vision témában. Mindenképp látok ebben az esztétikus markerben lehetőséget a jövőre nézve mivel egy folyosón elhelyezett ilyen „szimbólum” a jövő művészetének benyomását keltené. Bár azt kell, mondjam, hogy véleményem szerint nem lenne túl költséghatékony (mind a mérete, mind a hordozható információ értékének) valamint pontos és megbízható módszer egy robot lokalizációs rendszer kiépítéséhez, de információs pontok megvalósítására mindenképp alkalmas.
45
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
10 S UMMARY At first I tried to develop my application in C++, as it is not only a machine-oriented language, but most components of this topic are developed in this language. Even though I would strongly recommend C++ for this purpose, in the end I decided to use Java, as I am more acquainted with it. My choice for the developer environment was Eclipse IDE for Java Developers Juno Service Release 2. I prepared a detailed description of this, which can be found in this thesis as well. After choosing the programming language, the next big problem was how to extract the information from the pictures. It was important to choose the correct principle, method and algorithm that take into consideration the value and sequencing of the colours. I also had to consider the fact, that my application would receive an already processed (transformed, edge enhanced) picture, which means that the size would not always be constant. Because of this, the developed algorithm will be able to manage any picture size, by not using a predetermined value, but calculating with the current size of the current picture. In those cases where the coordinates of the analysed pixels need to be evaluated, the X and Y coordinates are defined in percentages. This is where majority voting comes into play, as the programme examines lots of randomly generated points in a triangle, choosing the one that gets the most votes as the value of the object. The number of colours is maximized, so only 9 different ones can be defined. We have to be very careful when choosing the value of the colours, it is the best if the adjoining colours have the furthest possible values. This way incorrect assessment can be avoided. In the end I am very happy to have chosen this topic, because I learnt lots of valuable information, getting a clear picture of the subject of Computer Vision. I believe that there are countless possibilities in this aesthetic marker, as such a “symbol” in corridors would create the impression of the art of the future. In my opinion this method would not be very cost-efficient, nor would it be accurate or reliable for creating a robot localization system, but as far as establishing information points goes, this method is definitely a very good choice.
46
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
11 Á BRAJEGYZÉK 1. ábra – ETHON architektúra ............................................................................................... 3 2. ábra – OpenNI architektúra (forrás: OpenNI dokumentáció, [1]) ................................... 7 3. ábra – Robotok népszerűsége funkciójuk szerint [8] ..................................................... 10 4. ábra – Markeres felismerés [11] .................................................................................... 13 5. ábra – Marker nélküli (Markerless) felismerés [11] ...................................................... 14 6. ábra – Marker nélküli (Markerless) felismerés [11] ...................................................... 14 7. ábra – QR -kód felépítése [12] ....................................................................................... 16 8. ábra – Microsoft Tag-ek ................................................................................................ 18 9. ábra – Egyéni MS Tag ................................................................................................... 18 10. ábra – Összehasonlítási ábra [15] .................................................................................. 19 11. ábra – Marker szerkezete ............................................................................................... 29 12. ábra – Sorfolytonos tárolás ............................................................................................ 29 13. ábra – Square objektum felépítése ................................................................................. 30 14. ábra – Markerből Lista .............................................................................................. 30 15. ábra – Square osztály ..................................................................................................... 31 16. ábra – Colours osztály.................................................................................................... 31 17. ábra – calculate metódus ................................................................................................ 32 18. ábra – XY_TOP metódus ............................................................................................... 33 19. ábra – randomNumber metódus ..................................................................................... 34 20. ábra – RGB HSV transzformáció .............................................................................. 34 21. ábra – HSV szín paletta ................................................................................................. 36 22. ábra – Teszt marker (RGB alkotószíneiből) .................................................................. 38 23. ábra – Markerünk ........................................................................................................... 38 24. ábra – Markerünk rossz fényviszonyok mellett ............................................................. 39 25. ábra – Marker terület inverzének kivonása .................................................................... 40 26. ábra – Túlexponált kinect kép síkba transzformálása .................................................... 40 27. ábra – Marker síkba transzformálása ............................................................................. 41 28. ábra – Marker világosítása ............................................................................................. 41 29. ábra - ETHON .................................................................................................................. 42
47
MISKOLCI EGYETEM GÉPÉSZMÉRNÖKI
ÉS
INFORMATIKAI KAR
12 M ELLÉKLETEK 12.1 CD MELLÉKLET A CD-n található tartalom:
Szakdolgozat
Szakdolgozat.docx
Szakdolgozat.pdf
Szakdolgozat_kiiras.doc
Osszegzes.docx
Osszegzes.pdf
Summary.docx
Summary.pdf
Forráskód
MARKER (Java project)
JAR mappa
marker.jar
marker2.jar
marker3.jar
marker4.jar
marker5.jar
marker6.jar
marker_lib mappák (javacv file-ok)
markers mappa (marker képek)
Demo program indítása: start.bat file elindításával, vagy JAR file futtatássa cmd-ből: java –jar marker.jar
48